JVM 调优 算法

阅读更多
近来三周对所在公司系统进行了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 一起使用.

你可能感兴趣的:(jvm,tuning)