标签:
1.Trace跟踪参数
-verbose:gc -XX:+printGC -XX:+PrintGCDetails 打印GC详细信息 -XX:+PrintGCTimeStamps 打印CG发生的时间戳 -Xloggc:log/gc.log 指定GC log的位置,以文件输出 -XX:+PrintHeapAtGC 每次一次GC后,都打印堆信息 -XX:+TraceClassLoading 监控类的加载 -XX:+PrintClassHistogram 按下Ctrl+Break后,打印类的信息, 分别显示:序号、实例数量、总大小、类型
-Xmx20m -Xms5m 指定最大堆20m和最小堆5m -Xmn 设置新生代大小 -XX:NewRatio 新生代和老年代(不包含永久区)的比值,4 表示 新生代:老年代=1:4,即年轻代占堆的1/5 -XX:SurvivorRatio 设置两个Survivor区和eden的比, 8表示 两个Survivor :eden=2:8,即一个Survivor占年轻代的1/10 -XX:+HeapDumpOnOutOfMemoryError OOM时导出堆到文件 -XX:+HeapDumpPath 导出OOM的路径 -XX:OnOutOfMemoryError 在OOM时,执行一个脚本
-Xss 通常只有几百K,决定了函数调用的深度,每个线程都有独立的栈空间,局部变量、参数 分配在栈上
-XX:PermSize -XX:MaxPermSize 设置永久区的初始空间和最大空间
5.gc算法
引用计数法:
1)老牌垃圾回收算法 (新生代中) 2)通过引用计算来回收垃圾 3)引用计数器的实现很简单,对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1,当引用失效时,引用计数器就减1。只要对象A的引用计数器的值为0,则对象A就不可能再被使用。 4)引用计数法的问题:引用和去引用伴随加法和减法,影响性能,很难处理循环引用
标记-清除:
1)标记-清除算法是现代垃圾回收算法的思想基础。标记-清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段。一种可行的实现是,在标记阶段,首先通过根节点,标记所有从根节点开始的可达对象。因此,未被标记的对象就是未被引用的垃圾对象。然后,在清除阶段,清除所有未被标记的对象。
标记-压缩:
1)适合用于存活对象较多的场合,如老年代。它在标记-清除算法的基础上做了一些优化。和标记-清除算法一样,标记-压缩算法也首先需要从根节点开始,对所有可达对象做一次标记。但之后,它并不简单的清理未标记的对象,而是将所有的存活对象压缩到内存的一端。之后,清理边界外所有的空间。
复制算法:
1)与标记-清除算法相比,复制算法是一种相对高效的回收方法 2)不适用于存活对象较多的场合 如老年代 3)将原有的内存空间分为两块,每次只使用其中一块,在垃圾回收时,将正在使用的内存中的存活对象复制到未使用的内存块中,之后,清除正在使用的内存块中的所有对象,交换两个内存的角色,完成垃圾回收
6.分代思想:
1)依据对象的存活周期进行分类,短命对象归为新生代,长命对象归为老年代。 2)根据不同代的特点,选取合适的收集算法 3)少量对象存活,适合复制算法 4)大量对象存活,适合标记清理或者标记压缩
7.Stop-The-World(STW)
1)Java中一种全局暂停的现象,全局停顿,所有Java代码停止,native代码可以执行,但不能和JVM交互,多半由于GC引起(Dump线程,死锁检查,堆Dump). 2)危害:长时间服务停止,没有响应,遇到HA系统,可能引起主备切换,严重危害生产环境。
8.GC参数整理
-XX:+UseSerialGC:在新生代和老年代使用串行收集器 -XX:SurvivorRatio:设置eden区大小和survivior区大小的比例 -XX:NewRatio:新生代和老年代的比 -XX:+UseParNewGC:在新生代使用并行收集器 -XX:+UseParallelGC :新生代使用并行回收收集器 -XX:+UseParallelOldGC:老年代使用并行回收收集器 -XX:ParallelGCThreads:设置用于垃圾回收的线程数 -XX:+UseConcMarkSweepGC:新生代使用并行收集器,老年代使用CMS+串行收集器 -XX:ParallelCMSThreads:设定CMS的线程数量 -XX:CMSInitiatingOccupancyFraction:设置CMS收集器在老年代空间被使用多少后触发 -XX:+UseCMSCompactAtFullCollection:设置CMS收集器在完成垃圾收集后是否要进行一次内存碎片的整理 -XX:CMSFullGCsBeforeCompaction:设定进行多少次CMS垃圾回收后,进行一次内存压缩 -XX:+CMSClassUnloadingEnabled:允许对类元数据进行回收 -XX:CMSInitiatingPermOccupancyFraction:当永久区占用率达到这一百分比时,启动CMS回收 -XX:UseCMSInitiatingOccupancyOnly:表示只在到达阀值的时候,才进行CMS回收
标签:
原文地址:http://www.cnblogs.com/wonder2636/p/5524699.html