![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
jvm
文章平均质量分 60
lienuag
这个作者很懒,什么都没留下…
展开
-
深入理解Java虚拟机:运行时数据区域
运行时数据区域程序计数器(Program Counter Register) 是一个块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器;字节码解释器工作时通过改变这个计数器的值来选取下一条需要执行的字节码命令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各线程之间计数器互不...原创 2018-07-13 14:38:16 · 183 阅读 · 0 评论 -
虚拟机:对象的访问定位
对象的访问方式是取决于虚拟机实现而定的,目前主流的访问方式有使用句柄和直接指针两种。1. 句柄访问如果使用句柄访问的话,那么Java堆中将会划分一块内存作为句柄池,reference中存储的就是对象的句柄地址,而句柄中包含了对象实例数据与类型数据各自的具体地址信息。2. 指针访问如果使用指针直接访问,那么Java堆对象的布局中就必须考虑如何放置访问类型数据的相关信息,而refere...原创 2018-07-28 15:02:07 · 623 阅读 · 0 评论 -
垃圾回收:判断对象是否已死(即不可能再被任何途径使用的对象)
1. 引用计数算法给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。引用计数算法(Reference Counting)的实现简单,判定效率也很高,在大部分情况下它都是一个不错的算法,但主流的Java虚拟机里面没用选用引用计数算法来管理内存,其中主要原因是它很难解决对象之间互相循环引用的问题。 ...原创 2018-07-30 15:58:39 · 417 阅读 · 0 评论 -
虚拟机:JAVA对象的创建
Java对象创建的步骤在语言层面上,创建对象(例如:克隆,反序列化)通常仅仅是一个new关键字而已,而在虚拟机中对象创建对象(限于普通的java对象不包含数据和class对象)过程是怎样的呢虚拟机遇到一条new指令时:1.首先去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那就必须执行相应的类加载过程了 ...原创 2018-07-27 17:12:45 · 287 阅读 · 0 评论 -
垃圾收集算法
1. 标记-清除算法“标记-清除”(Mark-Sweep)算法是最基础的收集算法,算法分为“标记”和清除两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。不足之处:1.效率问题,标记和清除两个过程的效率都不高;2.空间问题:标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配较大对象时,无法找到足够的连续内存而不得不提前触发另...原创 2018-07-31 16:22:05 · 146 阅读 · 0 评论 -
虚拟机:对象的内存布局(以HotSpot虚拟机为例)
在HotSpot虚拟机中,对象在内存汇总存储的布局可以分为3块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。 1. 对象头 HotSpot虚拟机的对象头包含两部分:第一部分用于存储对象自身的运行时数据,如:哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等,另外一部分是类型指针,即对象指向它...原创 2018-07-28 11:33:22 · 244 阅读 · 0 评论