
Java虚拟机
瑞雨
这个作者很懒,什么都没留下…
展开
-
JVM之对象的内存布局
1.对象内存划分:在Hotspot虚拟机中,对象的内存布局可以划分为三个部分:对象头实例数据对齐填充2.对象头对象头中储存了两类信息:对象自身运行时的数据,官方称为“Mark Word”,包括哈希码、GC分代年龄、锁状态标志、线程持有的锁等等。在32位和64位虚拟机中,Mark Word占据的内存空间分别为32个bit和64个bit,即4个字节和8个字节。类型指针,官方称为“Klass Pointer”,即对象指向它的类型元数据的指针。在虚拟机默认开启指针压缩的情况下,Klass Po原创 2020-08-12 20:07:09 · 217 阅读 · 0 评论 -
JVM之判断对象是否可以被回收
1.引用计数算法 在对象中添加一个引用计数器,如果该对象被引用一次,计数器就加一,如果引用失效一个,计数器就减一;如果计数器为零,则该对象就可以被回收。 在Java中一般不采用引用计数算法对对象进行管理,因为引用计数算法需要考虑一些特殊情况,必须要配合大量额外工作才能保证正确地工作,例如典型的对象之间互相循环引用的问题。如果两个对象之间互相引用,会导致这两个对象的计数器始终不为零,最终导致两个对象永远无法被清理的情况(类似于死锁)。2.可达性分析算法 主流的商用程序语言(Java、C#等原创 2020-07-30 21:13:27 · 446 阅读 · 0 评论 -
Java虚拟机之内存区域划分
Java虚拟机之内存区域划分程序计数器线程私有。在内存中占据一块较小的区域,可以看作是当前线程所执行的字节码的行号指示器。由于Java虚拟机的多线程是通过线程轮流切换、分配处理器时间的方式来实现的,而每个处理器同一时间只能执行一条线程中的指令,所以每条线程需要一个独立的程序计数器,以便在线程切换过程中,记录并恢复到正确的执行位置。如果线程执行的是一个Java方法,计数器记录的就是正在执行的虚拟机字节码指令的地址;如果正在执行的是本地方法(Native方法),则计数器值为空。Java虚拟机栈原创 2020-07-19 23:03:33 · 99 阅读 · 0 评论