JVM
今天你写博客了吗
这个作者很懒,什么都没留下…
展开
-
JVM怎么判断垃圾?
JVM采取判断一个对象是否为垃圾,采用引用计数法或者可达性分析算法, 引用计数法则是给每个对象维持一个引用计数器count,如果有引用到其余对象则该值count++,引用消失则该值count–,count=0时则表示该对象没有任何引用,可当作垃圾回收。JVM一般不采用这种方法,当两个对象存在相互引用时,则两个对象都不会被回收。 可达性分析算法维护一个GC Roots引用链,引用链上引用的对象不会被当作垃圾回收。 像上图,及时object5-object7之间存在相互引用,但是三者并未在GC Roots引用原创 2021-10-19 13:37:57 · 404 阅读 · 0 评论 -
CMS收集器
CMS收集器是基于标记-清除算法实现的。 它的垃圾收集分为四个步骤: 初始标记 并发标记 重新标记 并发清除 其中初始标记与重新标记过程需要Stop the World。 初始标记仅标记GC Roots直接关联的对象,速度很快;并发标记阶段则是从GC Roots直接关联的对象开始遍历整个对象图的过程;重新标记阶段是为了修正并发标记期间,用户线程继续运作而导致标记产生变动的那一部分对象标记记录,时间远比并发标记耗时短;并发清除阶段则是清除删掉标记阶段判断的已死亡的对象。 在耗时最长的并发标记以及并发清除阶原创 2021-10-19 13:32:16 · 75 阅读 · 0 评论 -
JVM类加载机制
.class文件的二进制输入流被加载进类加载子系统,经过加载、链接、初始化等过程完成类的加载。 在加载阶段通过类的全限定名获取该类的二进制数据流,将该字节流所代表的静态存储结构转换为程序运行时动态结构,在堆中生成这个Class对象的数据访问入口,在该阶段用户可以选择使用自定义的类加载器进行加载,或者使用系统加载器。 链接阶段里面又细分为验证、准备、解析环节,验证环节为了确保加载的类的正确性,.class文件符合jvm要求;准备阶段是为了类变量(static)分配内存并设置初始值。这里的初始值是系统默认的初始原创 2021-10-19 13:31:11 · 64 阅读 · 0 评论