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