zoukankan      html  css  js  c++  java
  • JVM --需要知道的一些术语

    1. Java堆中各代分布:

    Young:主要是用来存放新生的对象。

    Old:主要存放应用程序中生命周期长的内存对象。

    Permanent:是指内存的永久保存区域,主要存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域. 它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。

    2. JVM 使用的GC算法是什么?

    分代收集。

    即将内存分为几个区域,将不同生命周期的对象放在不同区域里;

    在GC收集的时候,频繁收集生命周期短的区域(Young area);

    比较少的收集生命周期比较长的区域(Old area);

    基本不收集的永久区(Perm area)。

    3. GC 和 Full GC 有什么区别?

    GC(或Minor GC):收集 生命周期短的区域(Young area)。

    Full GC (或Major GC):收集生命周期短的区域(Young area)和生命周期比较长的区域(Old area)对整个堆进行垃圾收集。

    他们的收集算法不同,所以使用的时间也不同。 GC 效率也会比较高,我们要尽量减少 Full GC 的次数。 当显示调用System.gc() 时,gc does a full collection(both young generation and tenured generation).

    4. Minor GC后,Eden是空的吗?

    是的,Minor GC会把Eden中的所有活的对象都移到Survivor区域中,如果Survivor区中放不下,那么剩下的活的对象就被移到Old generation 中。

    5. Garbage collection options(JDK1.4):

    堆设置
    -Xms :初始堆大小
    -Xmx :最大堆大小
    -XX:NewSize=n :设置年轻代大小
    -XX:NewRatio=n: 设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4
    -XX:SurvivorRatio=n :年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5
    -XX:MaxPermSize=n :设置持久代大小
    收集器设置
    -XX:+UseSerialGC :设置串行收集器
    -XX:+UseParallelGC :设置并行收集器
    -XX:+UseParalledlOldGC :设置并行年老代收集器
    -XX:+UseConcMarkSweepGC :设置并发收集器
    垃圾回收统计信息
    -XX:+PrintHeapAtGC GC的heap详情
    -XX:+PrintGCDetails  GC详情
    -XX:+PrintGCTimeStamps  打印GC时间信息
    -XX:+PrintTenuringDistribution    打印年龄信息等
    -XX:+HandlePromotionFailure   老年代分配担保(true  or false)
    并行收集器设置
    -XX:ParallelGCThreads=n :设置并行收集器收集时使用的CPU数。并行收集线程数。
    -XX:MaxGCPauseMillis=n :设置并行收集最大暂停时间
    -XX:GCTimeRatio=n :设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)
    并发收集器设置
    -XX:+CMSIncrementalMode :设置为增量模式。适用于单CPU情况。
    -XX:ParallelGCThreads=n :设置并发收集器年轻代收集方式为并行收集时,使用的CPU数。并行收集线程数。

    6. JVM  Runtime Data Area(运行时数据区):

    Heap: JVM只有一个为所有线程所共享的堆,所有的类实例和数组都是在堆中创建的。

    Method area: JVM只有一个为所有的线程所共享的方法区。它存储类结构,例如运行时常量池,成员和方法数据以及方法、构造方法的代码。

    Java Stacks:每个JVM线程拥有一个私有的栈。

    Pc registers: JVM可以同时支持运行多个线程,因此每个线程需要各自的PC(program counter)寄存器。

    Native method stacks: 保存native方法进入区域的地址 。

    7 日志分析

    GC (minor )日志

    Full GC 日志

  • 相关阅读:
    hdu3613(扩展KMP)
    hdu4333(扩展KMP)
    poj 2185
    指数型母函数
    java高精度hdu4043
    卡特兰数简单应用
    hdu3625(第一类斯特林数)
    卡特兰数和斯特林数(转载)
    hdu4045(递推)
    java 中sendredirect()和forward()方法的区别
  • 原文地址:https://www.cnblogs.com/plxx/p/4217860.html
Copyright © 2011-2022 走看看