一、什么内存会被回收

可达性分析算法

通过一系列的GC ROOT的对象作为超始点,从这些节点开始向下搜索,搜索所走的路径称为"引用链",当一个对象到GC ROOT之间没有任何引用链,则会对该对象进行一次标记,说明对象暂时是没用的

GC ROOT对象指:

虚拟机栈(栈帧中的局部变量表)中的引用对象

方法区中静态属性的引用对象

方法区中常量引用对象

本地方法栈中JNI引用对象

刚刚上面所说,经过可达性分析算法后,会对该对象进行一次标记,只能说明对象暂时是没用的,一个对象宣告死亡最少要经历两次标记,如果经过可达性分析算法后,如果对象到 GC ROOT 之间没有引用链,将会进行一次标记并且进行一次筛选,筛选的条件:

此对象没有重写finalize()方法

finalize()方法已经被执行过一次

如果满足这两个条件,说明没有必要执行

如果这个对象有实现finalize()方法,那这个对象将会放置在一个叫做F-QUEUE的队列中,由虚拟机自动建立,低优先级的执行。

二、什么时候回收

Jvm堆内存可分为:新生代(Eden、From、To),老年代,永久代

新生代:

新生代可分为Eden、From、To空间,占比:8:1:1,可以通过SurvivorRatio进行设置

当Eden空间满了后,会进行YGC,采用复制算法(ParNew、Parallel Scavenge),将还存活的对象复制到Survivor空间,然后清理掉Eden空间

老年代:

当新生代产生YGC时,会将前面Survivor中还存活的对象复制到老年代,如果此时,老年代空间不足(老年代使用了92%,CMS会被激活),会进行Full GC,采用(CMS、Parallel old),

CMS分为四个过程:

初次标记(STW)

并发标记

重新标记(STW)

并发清除

最新文章

  1. GCC 中零长数组与变长数组
  2. Android Button上的文字自动变成大写,如何解决呢?
  3. Stream 同步错误之解决方案 ORA-00001 ORA-26787 ORA-26786
  4. 问题: Oracle Database 10g 未在当前操作系统中经过认证
  5. CentOS 6.8 新安装系统的网络IP配置(转载)
  6. [转] Android PhoneGap Cordova 体系结构
  7. JDK安装 配置环境变量
  8. 调用REST接口获取数据
  9. 程序员MM的自白:磨人小妖精之安卓碎片化
  10. [Adruino]XBEE 无线数据传输实际操作
  11. Oracle- UPDATE FROM讲解
  12. react 的五脏六腑ing~
  13. CRM客户关系管理系统(二)
  14. What?VS2019创建新项目居然没有.NET Core3.0的模板?Bug?
  15. 29 内置方法 eval | exec 元类 单例
  16. Bootstrap分页插件ajax返回数据,工具类的编写
  17. 将ipad作为电脑拓展屏或分屏的简单方法
  18. 西山居首页jQuery焦点图代码
  19. 【译】使用 ndb 调试 node 应用
  20. python3 练习题(多级菜单)

热门文章

  1. 【LeetCode】861. Score After Flipping Matrix 解题报告(Python & C++)
  2. 【LeetCode】402. Remove K Digits 解题报告(Python)
  3. Interesting Fibonacci(hdu 2814)
  4. Codeforces629 C. Famil Door and Brackets
  5. BestCoder Round #66 (div.2)B GTW likes gt
  6. Jenkins安装教程:Windows环境通过jenkins.war安装
  7. Contrastive Generative Adversarial Networks
  8. 台湾旺玖MA8601|USB HUB方案|MA8601测试版
  9. Python升级至2.7方法
  10. mongdb分片