JVM垃圾回收

    最近项目有点多,机器不够用,就想到了节省空间,一台服务器多跑几个服务,于是把几个tomcat都监控起来了,然后研究了一下jvm的各项指标,有一些自己的理解,分享一下
    本人用的是jmx监控tomcat,一般未更改过gc策略的,jdk1.5以上gc策略都是用的PS MarkSweep,网上不少在说cms策略更好,但是没用过,说是可以减少stop-the-world的时间,具体影响多大,没有测试数据不好说。
    先简单说一下jvm的heap区,heap一般分成新生代,老年代,永久代。gc的话发生在新生代和老年代。永久代的话等同于方法区,放置的都是类,常量等。主要gc是对新生代的gc,java里我们创建了对象都会放在新生代里面,当新生代满了之后就会触发新生代的gc,新生代的gc方式是copy【新生代分为3个区,eden/from survior/to survior,比例未指定的话默认是8:1:1(指定方式-XX:SurvivorRatio=4表示4:1:1),新生代和老年代如果未指定的话是按默认比例分(指定方式-XX:NewRatio=4表示1:4),永久代指定方式-XX:MaxPermSize=128M】,从from survior和eden中将还在用的对象复制到to survior中,那对象什么时候进入老年代呢,有多种情况,第一就是存活期超过了配置的会今天老年代(XX:MaxTenuringThreshold=10,表示存活10轮),第二中情况就是对象过大,to survior中装不下,这个时候也会直接进入老年区。

你可能感兴趣的:(垃圾回收)