zoukankan      html  css  js  c++  java
  • jvm参数配置

    GC参数:
    -XX:+PrintGC 打印GC信息
    -XX:+PrintGCDetails GC详细信息
    -XX:+PrintHeapAtGC 堆使用的信息
    -XX:+PrintGCTimeStamps 虚拟机启动后的时间偏移量
    -XX:+PrintGCApplicationConcurrentTime 应用程序执行时间
    -XX:+PrintGCApplicationStoppedTime 程序由GC停顿的时间
    -XX:+PrintReferenceGC (软引用/弱引用/虚引用/Finallize队列)信息
    -Xloggc:D:loggc.log 存到文件中

    类加载卸载
    -verbose:class 类的加载卸载
    -XX:+TraceClassLoading 类加载
    -XX:+TraceClassUnloading 类卸载
    -XX:+PrintClassHistogram 当前类信息柱状图(Ctrl+Break使用)

    系统参数查看
    -XX:PrintVMOptions 打印虚拟机参数(显式)
    -XX:PrintCommandLineFlags 打印全部虚拟机参数
    -XX:PrintFlagsFinal 所有的系统参数值

    堆配置
    -Xms 初始堆大小
    -Xmx 最大堆内存
    -Xmn 新生代大小(堆的1/4-1/3)
    -XX:SurvivorRatio Eden区和s0,s1(from-to)比例(一般8)
    -XX:NewRatio 新生代比例(4)
    -XX:MaxTenuringThreshold 垃圾最大年龄(15)
    -XX:PretenureSizeThreshold 进入老年代的阈值

    堆溢出
    -XX:HeapDumpOnOutOfMemoryError 内存溢出时生成Dump文件
    -XX:HeapDumpPath 指定堆存放路径

    方法区配置(Java8为Metaspace元空间)
    -XX:PermSize 初始永久代大小
    -XX:MaxPermSize 最大永久代

    元空间
    -XX:MetaspaceSize 元空间大小
    -XX:MaxMetaspaceSize 最大元空间(默认无大小)

    栈配置
    -Xss 线程的最大栈空间

    直接内存配置
    -XX:MaxDirectMemorySize 最大直接内存(默认最大堆-Xmx)

    指定GC回收器
    -XX:+UseSerialGC 新生代、老年代都使用串行回收器(Clint模式,默认的回收器)
    -XX:+UseParNewGC 新生代使用ParNew回收器,老年代使用串行回收器
    -XX:+UseParallelGC 新生代使用Parallel回收器,老年代使用串行回收器
    -XX:+UseParallelOldGC 新生代使用Parallel回收器,老年代使用ParallelOld回收器
    -XX:+UseConcMarkSweepGC 新生代使用ParNew回收器,老年代使用CMS回收器
    -XX:ParallelGCThreads 指定ParNew回收器的线程数量
    -XX:MaxGCPauseMillis 最大垃圾收集停顿时间
    -XX:GCTimeRatio 吞吐量大小(0-100)默认99,即不超过1/(99+1)=1%的时间用于垃圾收集

    CMS回收器参数
    -XX:ConcGCThreads 设定线程数量
    -XX:ParallelCMSThreads 设定线程数量
    -XX:CMSInitiatingOccupancyFraction 指定回收阈值,默认68,老年代空间使用率达到68%,执行CMS回收
    CMS回收采用标记清除算法,会产生大量内存空间碎片
    -XX:UseCMSCompactAtFullCollection 在收集完成后,进行一次内存整理
    -XX:CMSFullGCsBeforeCompaction 设定多少次cms回收后,进行内存压缩
    -XX:CMSClassUnloadingEnabled 开启回收Class数据

    G1回收器
    -XX:+UseG1GC 使用G1收集器
    -XX:InitiatingHeapOccupancyPercent (默认45)堆使用率达到时,触发并发标记周期执行

    引用计数
    对象引用,计数器+1,引用失效,计数器-1,引用为0,可回收
    无法处理循环引用
    每次都会计算,性能影响

    可达性分析
    通过GC Root根节点向下搜索,不可达的对象即为不可用,被认为是可回收的对象
    GC Root对象:
    虚拟机栈中引用的对象
    方法区中类静态属性引用的对象
    方法区中常量引用的对象
    本地方法(Native)中引用的对象

    标记清除
    标记阶段,从根节点标记所有可达对象
    清除阶段,清除未被标记的对象
    缺点,产生大量不连续的空间

    复制算法
    将空间分为两块,只使用其中一块,回收时,把存活的对象复制到未被使用的内存块中,清除原内存块中的所有对象
    适用于年轻代,survivor区 s0,s1(from-to)
    缺点,系统内存折半

    标记压缩
    在标记清除的基础上,将所有存活对象进行压缩到内存的一端,清理边界外的空间
    适用于老年代,等同于标记清除算法完成后,再进行内存碎片整理

    分代算法
    基于不同回收算法的特性,将内存分为几块,根据对象的特点,使用不同算法,提高效率
    分代思想在虚拟机中广泛使用
    虚拟机使用卡表(card table)(0,1)记录老年代对象是否持有新生代对象引用,新生代GC时不用扫描所有老年代对象

    分区算法
    将堆内存分为对个小区间,独立使用、回收,有效减少GC所产生的停顿

    覆盖finalize()方法,重新引用对象,可能导致对象复活,谨慎使用

  • 相关阅读:
    开源.net 混淆器ConfuserEx介绍
    k8s删除namespace失败,状态Terminating解决方案
    java get all threadlocal from thread
    mysql查看索引的大小
    InnoDB一定会在索引中加上主键吗?
    全链路追踪traceId,ThreadLocal与ExecutorService
    redis 批量删除keys
    shell逐行读取excel并执行sql
    Is it possible to create @Around Aspect for feign.Client
    Spring Boot后台启动不打印nohup.out
  • 原文地址:https://www.cnblogs.com/jhin-wxy/p/11951570.html
Copyright © 2011-2022 走看看