jvm基础概念和参数

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后,打印类的信息, 分别显示:序号、实例数量、总大小、类型
 
2.堆的分配参数
 
  -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时,执行一个脚本

 
3.栈大小分配
 
 -Xss  通常只有几百K,决定了函数调用的深度,每个线程都有独立的栈空间,局部变量、参数 分配在栈上

 
4.永久区分配参数
 
 -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回收
 

  

 
 

 

posted on 2016-05-24 20:26  wonder2636  阅读(262)  评论(0编辑  收藏  举报

导航