阅读更多
近来三周对所在公司系统进行了JVM Tuning,期间阅读了大量的文章. 也得意了我的老大哥cheng的指导,使整个tuning按着合理有序的方向开展.
因为JVM概念理论知识相对较多,对JVM的基础原理也需要很好的理解,所以我将近期所学试图用简洁清晰的语言整理记录,已备日后之用. 所述如有出入, 也请不吝赐教.
什么是垃圾回收:
在计算机科学中垃圾回收是一种自动内存管理. 回收器回收垃圾以及不被程序继续使用的对象占用的内存.
垃圾回收的基本原则:
1. 找到程序中不再被存取的数据对象.
2. 回收被这些对象占用的资源. Java通常找到所有被引用的对象,然后将剩余的对象当作没有被应用的对象进行回收.
下面介绍jvm5.0的几种收集器以及回收算法,我们可以通过JVM参数对垃圾回收器进行选择.
Serial Collector:
JVM Parameter: -XX:+UseSerialGC
Throughput Collector 或 Parallel Collector:
JVM Parameter: -XX:+UseParallelGC
Young Generation GC 使用 parallel threads 算法.
Tenured Generation GC 使用 serial threads 算法.
Parallel Old Generation Collector:
JVM Parameter: -XX:+UseParallelOldGC
Old Generation的垃圾回收在一定阶段使用并行算法,使得old generation的回收速度加快.
The Concurrent Low Pause Collector:
JVM Parameter: -Xincgc 或者-XX:+UseConcMarkSweepGC
The concurrent collector 是一种降低程序暂停时间的算法, 在收集tenured generation 的时候, 与stop all world 算法不同,在Major Collection绝大多数时间application依然运行不被暂停.在我所做试验中, 使用Concurrent Collector时MinorGC会变频繁.
The concurrent low pause collector 在jvm中使用一下参数启用
-XX:+UseConcMarkSweepGC
-XX:+UseParNewGC
原则上讲,使用会得到更好的response time更低的pause time.
使用此算法也可以使多核处理器更好的发挥它的多线程能力.
值得注意的是 -XX:+UseParallelGC 不能和 -XX:+UseConcMarkSweepGC 一起使用.