zoukankan      html  css  js  c++  java
  • 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回收
     
    

      

     
     
  • 相关阅读:
    List接口之ArrayList
    锁定线程:同步方法
    锁定线程:同步块
    通过Lambda表达式实现多线程
    通过实现Runnable接口来实现多线程
    通过继承Thread类实现多线程
    super关键字的经典案例
    Merge Two Sorted Lists
    Remove Element
    Remove Duplicates from Sorted List
  • 原文地址:https://www.cnblogs.com/wonder2636/p/5524699.html
Copyright © 2011-2022 走看看