JVM

作者: 云烟1f3bca320ba6 | 来源:发表于2017-02-08 23:03 被阅读0次

    JVM

    jvm.png
    • 程序计数器

    ​ 线程私有,主要用于线程切换能恢复到正确的执行位置。执行java方法时这个计数器为当前字节码的位置,如果是native方法的时候为空。

    • java虚拟机栈

    ​ 线程私有,每个方法执行的时候创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。

    ​ 局部变量表存放了编译期可知的各种基本数据类型,对象引用和returnAddress类型。局部变量表所需的内存空间在编译期间完成分配,在方法运行期间不会改变局部变量表的大小。

    • 本地方法栈

    ​ 和虚拟机栈类似

    • java堆

    ​ 线程共享。所有对象实例和数组都在堆上分配,垃圾收集器的主要区域。

    • 方法区

    ​ 线程共享。用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码。

    • 运行时常量池

    ​ 方法区的一部分。存放编译期生成的各种字面量和符号引用。

    GC

    判断对象存活算法

    • 引用计数算法

    ​ 给对象添加一个引用计数器,有地方引用的时候,计数器值加1,引用失效的时候,计数器减1。计数器为0的对象不可能被使用。

    • 可达性分析算法

    ​ 通过gc root为起点向下搜索,搜索经过的路径成为引用链,当一个对象到引用链没有相连时,证明此对象不可用。

    GC算法

    • 标记清除算法

    ​ 标记出要收集的对象,标记完成后统一清除。问题是效率低,而且会产生大量内存碎片。

    • 复制算法

    ​ 将内存分为两块,每次只使用一块,当内存用完了,将存活的对象复制到另一块内存上,将使用过的内存一次清理掉。

    • 标记整理算法

    ​ 标记出要收集的对象,标记完成后让所有存活的对象都向一端移动,直接清理掉端边界的内存。

    垃圾收集器

    gc.png
    • Serial收集器

    ​ 单线程收集器,进行垃圾收集时,暂停其他线程。

    • ParNew收集器

    ​ Serial收集器的多线程版本,

    • Parallel Scavenge

    ​ 使用复制算法的收集器,并行。目标是达到一个可控制的吞吐量。

    • Serial Old收集器

    ​ Serial收集器的老年代版本

    • Parallel Old收集器

    ​ Parallel Scavenge收集器的老年代版本

    • CMS收集器

    ​ 以获取最短回收停顿时间为目标的收集器。

    • G1收集器

    ​ 并行与并发:充分利用多CPU、多核环境下的硬件优势,使用多个CPU(CPU或者
    CPU核心)来缩短Stop-The-World停顿的时间;

    ​ 空间整合:整体基于标记-整理算法,局部使用复制算法,减少内存碎片。

    ​ 可预测的停顿。

    JVM参数

    堆设置

    -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:+PrintGC
    -XX:+PrintGCDetails
    -XX:+PrintGCTimeStamps
    -Xloggc:filename

    并行收集器设置

    -XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数.并行收集线程数.
    -XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间
    -XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比.公式为1/(1+n)

    并发收集器设置

    -XX:+CMSIncrementalMode:设置为增量模式.适用于单CPU情况.
    -XX:ParallelGCThreads=n:设置并发收集器年轻代收集方式为并行收集时,使用的CPU数.并行收集线程数.

    相关文章

      网友评论

          本文标题:JVM

          本文链接:https://www.haomeiwen.com/subject/cogbittx.html