Java性能剖析]Sun JVM内存管理和垃圾回收
来源:互联网 发布:千里眼监控软件 编辑:程序博客网 时间:2024/05/29 19:54
1.内存管理
在程序运行过程当中,会创建大量的对象,这些对象,大部分是短周期的对象,小部分是长周期的对象,对于短周期的对象,需要频繁地进行垃圾回收以保证无用对象尽早被释放掉,对于长周期对象,则不需要频率垃圾回收以确保无谓地垃圾扫描检测。为解决这种矛盾,Sun JVM的内存管理采用分代的策略。
1)年轻代(Young Gen):年轻代主要存放新创建的对象,内存大小相对会比较小,垃圾回收会比较频繁。年轻代分成1个Eden Space和2个Suvivor Space(命名为A和B)
当对象在堆创建时,将进入年轻代的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垃圾回收器)出于效率的原因,可能会不进行压缩。
3)持久代(Perm Gen):持久代主要存放类定义、字节码和常量等很少会变更的信息
- [Java性能剖析]Sun JVM内存管理和垃圾回收
- Java性能剖析]Sun JVM内存管理和垃圾回收
- [Java性能剖析]Sun JVM内存管理和垃圾回收
- [Java性能剖析]Sun JVM内存管理和垃圾回收
- Sun JVM内存管理和垃圾回收
- JAVA性能剖析 JVM内存管理与垃圾回收
- Sun JVM内存管理与Java虚拟机(JVM)垃圾回收器的工作机制
- Java-JVM的内存管理和垃圾回收
- JAVA之JVM内存管理和垃圾回收
- Java JVM内存管理及垃圾回收
- JVM的内存管理和垃圾回收
- JVM学习内存管理和垃圾回收
- JVM内存管理和垃圾回收
- JVM的内存管理和垃圾回收
- jvm内存管理和垃圾回收
- JVM内存管理和垃圾回收
- JVM内存管理和垃圾回收
- JVM的内存管理和垃圾回收
- GREENPLUM介绍之数据库管理(二)
- 基于V4L2采集数据
- Activity四种加载模式
- 无法启动IIS服务解决办法
- cocos2d 学习(一)
- Java性能剖析]Sun JVM内存管理和垃圾回收
- XStream使用之二
- Java中的注释Annotation用法
- 计算机作业
- 解析json字符串
- IOCP加Windows线程池打造高伸缩性高性能的服务
- 9大云开发平台崛起 微软Windows Azure在列
- 中华人民共和国宪法(1982)
- 群(转)