[Java性能剖析]Sun JVM内存管理和垃圾回收
来源:互联网 发布:鸟哥的linux私房菜pdf 编辑:程序博客网 时间:2024/05/29 19:07
内存管理和垃圾回收是JVM非常关键的点,对Java性能的剖析而言,了解内存管理和垃圾回收的基本策略非常重要。本篇对Sun JVM 6.0的内存管理和垃圾回收做大概的描述。
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的对象(经过几次的YoungGen的垃圾回收后仍然存在),内存大小相对会比较大,垃圾回收也相对没有那么频繁(譬如可能几个小时一次)。年老代主要采用压缩的方式来避免内存碎片(将存活对象移动到内存片的一边),当然,有些垃圾回收器(譬如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的内存管理和垃圾回收
- 中文化和国际化问题权威解析之一:字符编码发展历程
- 数值优化(Numerical Optimization)
- Eclipse 中的 NullProgressMonitor
- 字符,字节和编码
- 浅谈Sun JVM中的内存管理及调优和内存参数详解
- [Java性能剖析]Sun JVM内存管理和垃圾回收
- Sun JDK自带JVM内存使用分析工具HProf
- 浅谈SUN JVM内存管理与应用服务器的优化之 服务器内存分配与优化
- 实现补码加减运算的逻辑电路
- Demo2总结
- redis 集合操作
- 获得页面值往后台传
- pthread_cond_timedwait 实例
- const修饰符的作用