JVM GC笔记
2015-03-29 17:17
99 查看
堆分区:所有new的对象都会存放在堆中
> 新生代(Young Generation):存放生命周期短的对象,具体还分为Eden和Survivor两个区,其中Survivor分为From Space和To Space;
> 旧生代(Old Generation):存放生命周期长的对象
> 持久代(Permenent Generation):用于存放class字节码等
JVM使用的GC算法是:分代收集
> 频繁的收集新生代
> 较少的收集旧生代
> 基本不收集持久代
JVM的GC机制分为:Minor GC 和 Full GC
> Minor GC: 即普通GC,负责收集新生代里所有对象,会把Eden里所有活着的对象复制到Survivor里,如果Survivor放不下,则把Survivor里活着的对象放入旧生代里
> Full GC:会对新生代和旧生代进行收集,算法不同效率会低于GC。显式调用System.gc()时,就是进行Full GC。
> 触发条件:Eden满了触发Minor GC;有新对象进入旧生代时,旧生代空间不足则进行Full GC
JVM的清理算法:
> 引用计数法(早期JVM):JVM会为对象的引用数进行计数,创建则添加,引用超出范围则删减,当计数为0时,则可以收集
> 对象引用遍历:JVM会遍历所有根对象,根据对象图递归确定可到达对象,如果某对象实例可以从根对象到达,则将其标记,称为标记对象;在执行收集阶段,只需要简单的扫描堆栈,删除所有未标记对象即可。一般在之后还会进行压缩,以便为新的对象腾出空间。
> 复制清理法
JVM如何清理一个对象:
> 新生代:采用复制清理法,扫描后把可到达的对象复制到未使用的区域,如survivor里,然后清楚Eden里所有对象
> 旧生代:采用标记清理然后压缩,内容见对象引用遍历。
> 机制:串行和并行两种,串行使用于单线程,单cpu;并行使用于多线程,多核cpu。
调优:
>使用调优:尽早将不用的对象赋值null,而不是等到退出生命周期自动赋值;少用finalize(),会增大GC工作量;当程序等待时,手动执行system.gc();
>虚拟机优化选项:网上查询
> 新生代(Young Generation):存放生命周期短的对象,具体还分为Eden和Survivor两个区,其中Survivor分为From Space和To Space;
> 旧生代(Old Generation):存放生命周期长的对象
> 持久代(Permenent Generation):用于存放class字节码等
JVM使用的GC算法是:分代收集
> 频繁的收集新生代
> 较少的收集旧生代
> 基本不收集持久代
JVM的GC机制分为:Minor GC 和 Full GC
> Minor GC: 即普通GC,负责收集新生代里所有对象,会把Eden里所有活着的对象复制到Survivor里,如果Survivor放不下,则把Survivor里活着的对象放入旧生代里
> Full GC:会对新生代和旧生代进行收集,算法不同效率会低于GC。显式调用System.gc()时,就是进行Full GC。
> 触发条件:Eden满了触发Minor GC;有新对象进入旧生代时,旧生代空间不足则进行Full GC
JVM的清理算法:
> 引用计数法(早期JVM):JVM会为对象的引用数进行计数,创建则添加,引用超出范围则删减,当计数为0时,则可以收集
> 对象引用遍历:JVM会遍历所有根对象,根据对象图递归确定可到达对象,如果某对象实例可以从根对象到达,则将其标记,称为标记对象;在执行收集阶段,只需要简单的扫描堆栈,删除所有未标记对象即可。一般在之后还会进行压缩,以便为新的对象腾出空间。
> 复制清理法
JVM如何清理一个对象:
> 新生代:采用复制清理法,扫描后把可到达的对象复制到未使用的区域,如survivor里,然后清楚Eden里所有对象
> 旧生代:采用标记清理然后压缩,内容见对象引用遍历。
> 机制:串行和并行两种,串行使用于单线程,单cpu;并行使用于多线程,多核cpu。
调优:
>使用调优:尽早将不用的对象赋值null,而不是等到退出生命周期自动赋值;少用finalize(),会增大GC工作量;当程序等待时,手动执行system.gc();
>虚拟机优化选项:网上查询
相关文章推荐
- 孙鑫VC学习笔记:第十二讲 用API函数、CFile类操作文件
- 关于GDI+学习笔记。
- 设计模式笔记--创建型模式之五--单件 Singleton
- Android下解析xml文档,笔记一下
- 09 12 07 Java学习笔记
- Linux Shell 笔记一
- 初学存储引擎笔记
- 学习笔记及一些心得
- Android笔记:解决eclipse中重载函数时参数为arg0,arg1
- 《敏捷个人》学习笔记 - 如何经营博客
- python学习手册笔记--第21~24章
- 《认知与设计——理解UI设计准则》笔记(3) 我们寻找和使用视觉结构
- 我的笔记-Mysql同步相关
- asp.net简单显示学习笔记
- java基础学习笔记之九--线程(3)
- ok6410 定时器学习笔记
- Git使用笔记
- sonar 安装配置笔记
- 【转】ArcGIS API for Silverlight/WPF 2.1学习笔记(三)
- shell中case的用法学习笔记