![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 55
Crazy丶Mark
这个作者很懒,什么都没留下…
展开
-
Java是如何判断对象是否需要回收的?
常见的两种判断的算法:引用计数算法可达性分析算法(Java使用的这一种)引用计数算法引用计数算法是在对象中加入一个计数器,当对象被引用,计数器+1,当引用失效,计数器-1这种算法实现简单,效率高,但是有一个严重的问题会导致内存泄漏,那就是对象之间循环引用,比如说A对象持有B对象的引用,B对象持有A对象的引用,那么A和B的计数器值永远>=1,也就是说这两个对象永远不会被回...原创 2018-03-02 13:43:49 · 1835 阅读 · 0 评论 -
Java虚拟机的类卸载
如何判断类已经死亡:该类的所有实例都已经被回收,即堆中不存在该类的实例加载该类的ClassLoader已经被回收该类的Java.lang.Class对象没有在任何地方被引用,即在任何地方都无法通过反射调用该类的方法当满足以上三个条件时,类才有可能被回收,具体的回收策略需要自己设定。...翻译 2018-03-02 14:00:13 · 602 阅读 · 0 评论 -
垃圾收集算法
常见的垃圾回收算法有如下几种:标记清除算法复制回收算法标记整理算法分代回收算法其它的一些算法都是根据这几个算法演变而来的,我们来一个一个的看准备知识:如何判断一个对象是否应该被回收标记清除算法标记回收算法分为标记和清除两个部分,把需要回收的对象标记,在标记完成之后把标记对象清除(一般而言,只有连续标记几次之后,对象才会被清除)标记清除算法实现简单,但是效率比较低,...原创 2018-03-02 14:25:53 · 175 阅读 · 0 评论 -
Stop the world
我们都知道,在虚拟机进行GC的时候会需要让所用的线程都停止工作,等待他GC完成,那么他是如何保证所有线程全部都停止工作的呢?只有当所有线程都跑到了安全点,或者进入安全区域之后,才会进行GC安全点在安全点,虚拟机会生成OopMap用来记录引用关系(这也是不能在任何地方停下的原因,如果每一条指令都生成OopMap那么效率会非常低,也会占用大量的空间)一般安全点设置在以下位置:方法...原创 2018-03-02 14:53:16 · 5373 阅读 · 0 评论 -
CMS收集器
CMS收集器是基于标记清除算法的一种并发的,低停顿的收集器,值得注意的一点是,CMS只是低停顿而不是没有停顿CMS分为以下四步:初始标记并发标记重新标记并发清除初始标记和重新标记都是需要Stop the world的初始标记仅仅是记录CG root关联的对象,因此停顿时间比较短,并发标记是进行GC RootTracing,重新标记是修正并发标记期间标记的改动(时间比初始标...原创 2018-03-02 15:58:50 · 437 阅读 · 0 评论