一、概念

GC,Garbage Collection垃圾回收,主要针对JVM中的堆和方法区,而JVM栈、本地方法栈,程序计数器都是线程私有的,跟随线程生命周期。

二、对象存活判断

1. 引用计数:每个对象有个计数器,多一个引用加1,少一个减1,为0时回收

2. 对象可达性分析:到GC Roots没有任何引用链

三、垃圾回收算法种类,内存回收的方法论

1. 标记-清除算法,标记需要回收的对象,然后清除,会产生内存碎片

2. 复制算法,把内存分为两半,一半用来使用,当需要回收时,把存活的对象复制到另一半,限制了内存空间

3. 标记-整理算法,清除完之后移动碎片

4. 分代回收算法:年轻代使用复制算法,老年代使用标记-整理算法,综合上面几种算法

四、垃圾回收器,内存回收的具体实现

1. 串行收集器(serial collector):

最稳定,效率最高,但应用线程会产生较长停顿,年轻代和老年代都进行单线程串行回收

参数:-XX:+UseSerialGC

2. ParNew收集器:串行收集器的多线程版本,新生代并行,老年代串行

参数:-XX:+UseParNewGC

-XX:ParallelGCThreads 限制线程数量

3. 并行收集器(parallel collector):类似于ParNew收集器

参数:-XX:+UseParallelGC 老年代串行

4. Parallel Old收集器

参数:-XX:+UseParallelGC 老年代并行

5. CMS收集器Concurent Mark Sweep:

a. 以获取最短回收停顿时间为目标,与用户线程一起并发执行,基于标记-清除算法实现

b. 4个步骤:初始标记、并发标记、重新标记、并发清除

c. 参数:-XX:UseConcMarkSweepGC

d. 优缺点:优:并发收集耗时低,缺:产生碎片,并发阶段降低吞吐量

6. G1收集器,重点使用

最新的收集器,弱化新生代和老年代,空间整合(基于标记-整理算法)并可预测停顿

五、 内存申请过程

a. JVM会试图为相关Java对象在Eden中初始化一块内存区域

b. 当Eden空间足够,内存申请结束,否则进行下一步

c. JVM试图释放在Eden中所有不活跃的对象(minor collection),释放后若Eden空间仍然不足,则试图将部分Eden对象放入Survivor区

d. Survivor区被用来作为Eden及old的中间交换区域,当old区空间足够时,Survivor区的对象会被移到old区,否则会被留在Survivor区

e. 当old区空间不够时,JVM进行major collection

f. Full gc后,如果survivor和old区仍然无法存放从Eden复制过来的部分对象,导致JVM无法在Eden区为新对象创建内存,则“out of memory”

六、对象衰老过程

a. 衰老过程:Eden->Survivor Space->Old

b. GC触发条件:YGC:eden空间不足时, FGC:old空间不足,显式调用System.GC时

参考:

http://www.cnblogs.com/ityouknow/p/5614961.html

http://www.cnblogs.com/redcreen/archive/2011/05/04/2037056.html

最新文章

  1. docker中如何制作自己的基础镜像
  2. java web(三) Tomcat虚拟目录映射方式
  3. PowerShell调用jira rest api实现jira统计自动化
  4. MySQL Server 5.7解压版缺少文件无法启动
  5. 安卓虚拟机启动失败intel haxm未安装
  6. nyoj 56-阶乘因式分解(一)
  7. 常用应用层协议HTTP、RTSP、RTMP比较
  8. Redirect and POST in ASP.NET
  9. Linux巡检
  10. RegexOptions枚举
  11. 免费利用网页版谷歌翻译实现任意语言转换php版
  12. 【Vue】详解Vue组件系统
  13. WPF自学入门(三)WPF路由事件之内置路由事件
  14. java.text.DateFormat 多线程并发问题
  15. 解决stackoverflow打开慢的问题
  16. Linux内核第五节 20135332武西垚
  17. python logging模块,升级print调试到logging。
  18. map 小模板~~~ 写的不好 继续添加
  19. adb shell pm list packages的用法
  20. jquery-easyui:如何设置组件属性

热门文章

  1. Office2021简体中文离线安装包下载地址合集,目前最全
  2. hashMap的底层数据结构
  3. 解决用flex布局时内容溢出的问题
  4. appsettings.json用机密替换字符串-利用 VisualStudio 管理用户机密
  5. Linux常用命令 转于WoW_Boom
  6. Golang依赖管理工具: go module 详解
  7. 【CDH】cdh搭建遇到的坑和解决过程
  8. 【Shell】DBeaver Enterprise Edition 5.1.1 Download
  9. react -hook 项目搭建
  10. 【SSO单点系列】(4):CAS4.0 之非Ajax-iframe 登录