jvm
一如既往的坚持
这个作者很懒,什么都没留下…
展开
-
java对象内存布局分析
对象的内存布局 在 HotSpot 虚拟机中,对象在内存中的布局主要分为三部分:对象头(Header)、实例数据(Instance Data)、对齐填充(Padding)。 对象头主要包含两部分数据: MarkWord、类型指针。 对象头其中第一部分数据 MarkWord 用于存储哈希码(HashCode)、GC分代年龄、锁状态标志位、线程持有的锁、偏向线程ID等信息。这部分数据长度在32位和64位虚拟机中的长度为32bit和64bit。 对象头的另外一部分是类型指针,即对象指向他的类元数据指针,虚拟机.原创 2020-12-14 13:32:47 · 65 阅读 · 0 评论 -
<clinit>与<init>方法
这两个方法是由java编译器自动生成,当java类中存在用static修饰的静态类型字段,或者存在使用static{}快包裹的逻辑时,编译器会自动生成方法。而当java类定义了构造函数或者其非static类成员变量被赋予初始值时,编译器会自动生成方法 init方法详解 public class ClinitTest extends MyClass{ private Integer a = 3 ; public ClinitTest() { short b=8; } .原创 2020-12-10 19:12:46 · 390 阅读 · 0 评论 -
Class文件的装载流程
系统装载class文件的步骤 类装载的条件 一个类或接口在初次使用前,必须要进行初始化,这里指的使用,是指主动使用,主动使用只有几种情况 当创建一个类的实例时,比如使用new关键字,或者通过反射,克隆,反序列化 当调用了类的静态方法时,即当使用了字节码invokestatic指令 当使用类或者接口的静态字段时(final常量除外),比如,使用getstatic或者putstatic指令 当使用java.lang.reflect包中的方法反射类的方法时。 当初始化子类时,要求先初始化父类 作为启动.原创 2020-12-09 16:45:55 · 290 阅读 · 1 评论 -
类的加载机制
什么是类的加载机制 Java源文件----编译---->class文件 类加载器ClassLoader会读取这个.class文件,并将其转化为java.lang.Class的实例。有了该实例,JVM就可以使用他来创建对象,调用方法等操作了。 class文件的来源 Java内部自带的核心类,位于JAVA_HOME/jre/lib,其中最著名的莫过于rt.jar Java的扩展类,位于JAVA_HOME/jre/lib/ext目录下 我们自己开发的类或项目开发用到的第三方jar包,位于我们项.原创 2020-12-09 14:14:27 · 105 阅读 · 0 评论 -
JVM内存区域划分
虚拟机基本结构示意图原创 2020-12-09 19:18:23 · 92 阅读 · 0 评论 -
“强软弱虚”四种引用
强引用 Object o = new Object();这就是强引用,只要某个对象有强引用与之关联,这个对象永远不会被回收,即使内存不足,JVM宁愿抛出OOM,也不回去回收,只有当强引用和对象之间的关联切断了,就可以被回收了,回收特别简单,只需要将o = null; public class Student { //当垃圾收集器认为没有指向对象实例的引用时,会在销毁该对象之前调用finalize()方法。 @Override protected void finalize() throws .原创 2020-11-16 22:54:21 · 146 阅读 · 0 评论 -
垃圾回收算法
引用计数法 对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1,当引用失效时,引用计数器就减1.只要对象A的引用计数器的值为0,则对象A就不可能被再使用。 缺点:无法处理循环引用的情况。 对象A中含有对象B的引用,对象B中含有对象A的引用。此时,对象A和B的引用计数器都不为0。 标记清除法 分为两个阶段:标记阶段和清除阶段。在标记阶段,首先通过根节点,标记所有从根节点开始的可达对象。因此,没被标记的对象就是未被引用的垃圾对象。然后,在清除阶段,清除所有未被标记的对象。 缺点:产生不连.原创 2020-11-22 21:17:07 · 59 阅读 · 0 评论