Java学习第八天--------面向对象之成员变量和局部变量之间的区别、匿名对象、封装、this关键字、构造方法1.成员变量和局部变量之间的区别: A:在类中的位置不同 成员变量:在类中方法外 局部变量:在方法定义中或者方法声明上(形参) B:在内存中的位置不同 成员变量:在堆内存 局部变量:在栈内存 C:生命周期不同 成员变量:随着对象的创建而存在,随着对象的消失而消失 局部变
假如Java对象是个人,那意味着它也具备了我们人所有的东西,头,身体,大长腿。头头就是我们的对象头(Header)。根据JAVA虚拟机规范,我们的对象头分为两部分,分别是存储对象自身的运行时数据和存储类型指针。存储对象自身的运行时数据这部分数据有HashCode、GC年龄对象锁信息等。数据长度在32位和64位的虚拟机中分别为32bit和64bit,官方称它为Mark Word。如下图所示:h
在JVM中,对象在Eden区诞生,当内存不够用时触发GC进行对象回收,但不是所有的对象都可以被回收,当一个对象还在被引用时就无法回收,此时JVM会将其移动到“幸存者区”。幸存者区内部又分为“From区”和“To区”,在幸存者区,对象仍然要面临GC,每经历一次GC,对象就要在From区和To区之间来回移动,每移动一次对象的GC年龄就加1,当年龄加到15时(不绝对),JVM会将对象移动到老年区。为什么
转载 2024-06-07 16:32:54
65阅读
一、JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范,JVM将内存划分为:New(年轻)Tenured(年老)永久(Perm)-XX:PermSize -XX:MaxPermSize 年轻(New):年轻代用来存放JVM刚分配的Java对象年老(Tenured):年轻中经过垃圾回收没有回收掉的对象将被Copy到年老永久(Perm):永久存放Class、
转载 2023-08-01 21:55:39
74阅读
对象内存布局,对象对象年龄 最大值 15 对象在内存中的布局:对象在内存中主要分为3个部分:对象头,示例数据,对其填充。  对象头:存放hashcode,对象年龄,锁标识,偏向锁Id,偏向时间,数组长度(数组对象独有)  实例数据:对象的属性  对其填充:由于虚拟机要求 对象起始地址必须是8字节的整数倍。填充数据不是必须存在的,
转载 2023-05-18 14:47:39
137阅读
Java对象的分配策略内存分配策略共有以下几个策略1)对象优先在Eden分配:major gc时经常会伴随至少一次的minor gc,但并非绝对,比如说 Parallel Scavenge就是直接major gc没有伴随minor gc;2) 大对象的分配策略 :一种情况是看对象大小,由-XX:PretenureSizeThreshold启动参数控制,若对象大小大于此值,就会绕过新生, 直接在老
系列文章目录【JVM系列】第一章 运行时数据区 【JVM面试题】第二章 从JDK7 到 JDK8, JVM为啥用元空间替换永久? 【JVM面试题】第三章 JVM年龄为何是15次?能设置为16吗?   大家好,我是青花。拥有多项发明专利(都是关于商品、广告等推荐产品)。对广告、Web全栈以及Java生态微服务拥有自己独到的见解。曾经辅导过若干个计算机专业的学生进入到软件开发行业就业。希望和大家
jvm的堆内存堆空间的内存划分对象的分配过程逃逸分析GCMinor GC/Young GC触发Full GCStop-The-World 堆空间的内存划分这部分过多描述,直接上图 比例划分图上很明确了,一目了然;新生(年轻):Eden区、from、to区;比例是8:1:1;新生顾名思义就是存放新产生的对象的地方;老年代占用三之二的内存空间; 打印对象空间分配的工具类 implementa
Java面向对象编程三大特征 - 封装本文关键字:Java、面向对象、三大特征、封装 文章目录Java面向对象编程三大特征 - 封装一、名词解读1. 权限修饰符2. 权限对应关系表3. 属性访问二、概念阐释1. 封装有什么用2. 如何进行封装3. 常规封装方法 封装是面向对象编程中的三大特征之一,在对封装性进行解释时我们有必要先了解一些面向对象的思想,以及相关的概念。当我们想要去描述一系列的关系
文章目录3.6.1 对象优先在Eden分配3.6.2 大对象直接进入老年代3.6.3 长期存活的对象分配到老年代3.6.4 动态对象年龄判断3.6.5 空间分配担保 3.6.1 对象优先在Eden分配对象优先在Eden分配,当Eden没有足够空间进行配时,虚拟机发起一次Minor GC;Minor GC发生在新生GC;Major GC/full Gc发生在老年代的GC;     出现了Maj
    JVM是java知识体系的基石之一,任何一个java程序的运行,都要借助于他。或许对于我这种初级程序员而言,工作中很少有必要刻意去关注JVM,然而如果能对这块知识有所了解,就能够更清晰的明白程序的运行机制,从而写出更为健壮的代码,也能更好的理解java中很多处理方式的原因。以下是个人读书后整理的知识点,同时参考并引用了以下博客:JVM学习笔记JVM性能优化JVM调优总结
Key TakeawayJava 默认启用了 GC启用 GC 的,在发生 Young GC,更准确地说是在 Survivor 区复制的时候,存活的对象年龄会加1。当年龄 = -XX:MaxTenuringThreshold 指定的大小时,对象进入老年代还有动态晋升到老年代的机制,首先根据 -XX:TargetSurvivorRatio (默认 50,也就是 50%) 指定的比例,
# Java Java是一种面向对象的编程语言,广泛应用于各个领域的软件开发。为了提高Java程序的性能和内存利用率,Java虚拟机(JVM)使用了垃圾回收算法。算法将Java堆内存划分为不同的(Generation),并根据对象的存活时间将对象分配到不同的中。这篇文章将介绍Java的概念、原理和应用,并通过代码示例演示算法的效果。 ## 概述 Java堆内存被划
原创 2023-08-07 05:08:23
60阅读
## Java对象年龄的实现流程 为了实现Java对象年龄的功能,我们可以采用以下流程: ```mermaid flowchart TD A(定义一个Java类) --> B(创建一个日期变量) B --> C(创建一个方法来计算年龄) C --> D(获取当前时间) D --> E(计算年龄) E --> F(返回年龄) ``` 其中,具体的步骤和
原创 2023-11-29 16:31:28
31阅读
# Java 对象头的年龄实现指南 在 Java 中,理解对象的生命周期及其状态对于开发者来说是至关重要的。特别是在优化内存使用和进行性能调优时,了解对象年龄是一个核心概念。本指南旨在帮助刚入行的开发者实现这样的功能。 ## 实现流程 我们需要遵循以下步骤来实现 Java 对象头的年龄功能: | 阶段 | 步骤 | 描述
原创 11月前
17阅读
JVM 对象动态年龄判断是怎么回事?虚拟机并不是永远地要求对象年龄必须达到了-XX:MaxTenuringThreshold=15才能晋升老年代;动态年龄判断: Survivor区的对象年龄从小到大进行累加,当累加到X年龄(某个年龄)时占用空间的总和大于50%(可以使用-XX:TargetSurvivorRatio=?来设置保留多少空闲空间,默认值是50),那么比X年龄大的对象都会晋升到老年代;《
编写Java程序,不能随便查看用户的年龄,工资等隐私,并对设置的年龄进行合理的验证。年龄合理就设置,否则给默认年龄,必须在1-150,年龄工资不能直接查看,name长度在2-5字符之间。首先创造一个类,在这个类中定义姓名,年龄,工资等变量。package test01; public class employee { public String name; // 姓名 private int
目录Java面向对象入门2. 面向对象进阶2.1 封装(private)2.2 this2.3 static概述:重点2.4 代码块2.5 包简介使用规则2.6 权限修饰符2.7 main方法详解2.8 单例设计模式2.9、练习:面向对象进阶训练任务概述:代码: Java面向对象入门2. 面向对象进阶2.1 封装(private)我们观察如下代码: class Person{ privat
转载 2024-02-24 22:53:25
21阅读
# Java算法 Java算法是一种用于垃圾回收的策略,该算法将内存分为不同别,并针对不同别的对象采取不同的回收策略。这种算法可以有效提高垃圾回收的效率,同时减少应用程序的停顿时间,提高系统的性能。 ## 算法原理 Java算法将内存分为年轻、老年代和持久三个部分,其中年轻主要存放新创建的对象,老年代主要存放存活时间较长的对象,而持久主要存放类的元数据信息。
原创 2024-05-07 05:48:46
26阅读
# Java实现 ## 介绍 Java堆是Java虚拟机内存管理的一部,用于存储对象实例。为了提高性能,Java堆可以根据对象的生命周期分成不同的,一般将Java堆分为新生(Young Generation)、老年代(Old Generation)和永久(Permanent Generation)。 在本文中,我将向你介绍如何实现Java堆的。我们将按照以下步骤进行: 1
原创 2023-08-08 12:45:42
93阅读
  • 1
  • 2
  • 3
  • 4
  • 5