内存回收机制
来源:互联网 发布:php处理数组的函数 编辑:程序博客网 时间:2024/06/11 02:22
垃圾收集技术的三大传统算法——引用计数算法(无法解决循环引用的问题)、标记-清除算法(效率问题)和复制算法(空间利用率减半)。
现在的回收算法:标记-整理,增量收集算法(实际是对多线程的运用),分代收集(分类收集、在JVM中得到了应用)。
具体讲解一下JVM的垃圾回收机制:
Space(命名为S0和S1)具体分为这么几块,那么在每一块又是怎么进行内存分配及回收的那:
1、年轻代(Young Gen):年轻代主要存放新创建的对象,内存大小相对会比较小,垃圾回收会比较频繁。年轻代分成1个Eden Space和2个Suvivor
当对象在堆创建时,将进入年轻代的Eden Space。
垃圾回收器进行垃圾回收时,扫描Eden Space和A Suvivor Space,如果对象仍然存活,则复制到B Suvivor Space,如果B Suvivor Space已经满,则复制 Old Gen
扫描A Suvivor Space时,如果对象已经经过了几次的扫描仍然存活,JVM认为其为一个Old对象,则将其移到Old Gen。
扫描完毕后,JVM将Eden Space和A Suvivor Space清空,然后交换A和B的角色(即下次垃圾回收时会扫描Eden Space和BSuvivor Space。
可以看到:Young Gen垃圾回收时,采用将存活对象复制到到空的Suvivor Space的方式来确保不存在内存碎片,采用空间换时间的方式来加速内存垃圾回收。
2、年老代(Tenured Gen):年老代主要存放JVM认为比较old的对象(经过几次的Young Gen的垃圾回收后仍然存在),内存大小相对会比较大,垃圾回收也相对没有那么频繁(譬如可能几个小时一次)。年老代主要采用压缩的方式来避免内存碎片(将存活对象移动到内存片的一边),当然,有些垃圾回收器(譬如CMS垃圾回收器)出于效率的原因,可能会不进行压缩。
有这些区域的区别,那么我们就可以理解那些在JVM经常配置的参数的意义了:
-Xms:初始堆大小
-Xmx:最大堆大小
-Xmn:年轻代的大小
-XX:NewRatio=n:设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4
-XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5
-XX:MaxPermSize=n:设置最大持久代大小
-XX:MinPermSize=n:设置初始持久代大小
其中具有如下关系:
垃圾收集趣史:http://blog.csdn.net/javafuns/article/details/1771535
垃圾回收调优及JVM参数详解:http://blog.csdn.net/suiyuan0808/article/details/5109164
SunJVM内存管理和垃圾回收:http://ayufox.iteye.com/blog/652205
- 内存回收机制
- java内存回收机制
- .net 内存回收机制
- Java 内存回收机制
- java内存回收机制
- Java内存回收机制
- android内存回收机制
- JAVA 内存回收机制
- Java内存回收机制
- java 内存回收机制
- java内存回收机制
- jvm内存回收机制
- 内存回收机制
- Qt 内存回收机制
- Java内存回收机制
- Java内存回收机制
- java内存回收机制
- java内存回收机制
- nginx访问日志中的400
- IOS面试题汇总
- nodejs安装
- Webview 如何支持window.open 和window.close
- emacs24 颜色主题设置
- 内存回收机制
- C4.5决策树
- oracle10g11g日志alter文件位置
- ORA-08104: this index object 67420 is being online built or rebuilt
- android开发者应该深入学习的十个开源项目
- seo (百度百科 仅截取小部分)
- HQL多对多的查询语句
- 3步破解windows7 登陆密码
- UILable 使用全面解析