因为GC的复制算法,导致从1536-》1536K ,总空间少掉1536K。一般大对象以及一直存活经过多次GC未能回收的对象都会进入老年代。
nParNew
–-XX:+UseParNewGC
•新生代并行
•老年代串行
–Serial收集器新生代的并行版本
–复制算法
–多线程,需要多核支持
–-XX:ParallelGCThreads限制线程数量
nParallel收集器
–类似ParNew
–新生代复制算法
–老年代标记-压缩
–更加关注吞吐量
–-XX:+UseParallelGC
•使用Parallel收集器+老年代串行
–-XX:+UseParallelOldGC
•使用Parallel收集器+并行老年代
n-XX:MaxGCPauseMills
–最大停顿时间,单位毫秒
–GC尽力保证回收时间不超过设定值
n-XX:GCTimeRatio
–0-100的取值范围
–垃圾收集时间占总时间的比
–默认99,即最大允许1%时间做GC
GC参数整理:
n-XX:+UseSerialGC:在新生代和老年代使用串行收集器
n-XX:SurvivorRatio:设置eden区大小和survivior区大小的比例
n-XX:NewRatio:新生代和老年代的比
n-XX:+UseParNewGC:在新生代使用并行收集器
n-XX:+UseParallelGC:新生代使用并行回收收集器
n-XX:+UseParallelOldGC:老年代使用并行回收收集器
n-XX:ParallelGCThreads:设置用于垃圾回收的线程数
n-XX:+UseConcMarkSweepGC:新生代使用并行收集器,老年代使用CMS+串行收集器
n-XX:ParallelCMSThreads:设定CMS的线程数量
n-XX:CMSInitiatingOccupancyFraction:设置CMS收集器在老年代空间被使用多少后触发
n-XX:+UseCMSCompactAtFullCollection:设置CMS收集器在完成垃圾收集后是否要进行一次内存碎片的整理
n-XX:CMSFullGCsBeforeCompaction:设定进行多少次CMS垃圾回收后,进行一次内存压缩
n-XX:+CMSClassUnloadingEnabled:允许对类元数据进行回收
n-XX:CMSInitiatingPermOccupancyFraction:当永久区占用率达到这一百分比时,启动CMS回收
n-XX:UseCMSInitiatingOccupancyOnly:表示只在到达阀值的时候,才进行CMS回收
nJDK6:使用最大堆512M堆处理请求
–参数:
–setCATALINA_OPTS=-Xmx512m -Xms64m -XX:MaxPermSize=32M -Xloggc:gc.log-XX:+PrintGCDetails
-Xms64m 设置是JVM虚拟机产生一个大的堆,JVM就不会往一个堆区复制,从而减少GC数量
GC的回收机制还是在老年代里。