• JVM常用启动参数


    本文参考
     
    在一个java应用启动时,我们可以配置其jvm的启动参数,如:

    java -jar -Xms4096M -Xmx4096M -Xmn1024M -Xss256K hello.jar [这里可以加args参数传入]

    下面我记录了一些常用的JVM参数的配置说明,仅用于记录和简单说明。

    一、堆大小设置(堆 = 年轻代 + 年老代+ 持久代)

    • -Xmx3550m设置JVM最大可用内存为3550M。
    • -Xms3550m设置JVM初始内存为3550m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
      若设置初始内存过大,比如-Xms8000m,这都超过了我电脑内存,则会报错
    Error occurred during initialization of VM
    Unable to allocate 256000KB bitmaps for parallel garbage collection for the requested 8192000KB heap
    Error: Could not create the Java Virtual Machine.
    Error: A fatal exception has occurred. Program will exit.
      若设置初始内存过小,比如-Xms10k,则会报错
    Error occurred during initialization of VM
    Too small initial heap
      若设置初始内存过小得让gc无法触发,比如-Xms1200k,则会报错。估算gc需要2500K的内存。
    Error occurred during initialization of VM
    GC triggered before VM initialization completed. Try increasing NewSize, current value 1536K.
    • -Xss128k:设置每个线程的堆栈大小。(JDK5.0以后每个线程堆栈大小为1M)
    • -Xmn1024m:设置年轻代大小为1024m。等效于同时配置下面两个。
      • -XX:NewSize=1024m:设置年轻代初始值为1024M。
      • -XX:MaxNewSize=1024m:设置年轻代最大值为1024M。
    • -XX:PermSize=256m:设置持久代初始值为256M。
    • -XX:MaxPermSize=256m:设置持久代最大值为256M。
      JVM8.0已经没有持久代,若设置则会警告
    Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=10m; support was removed in 8.0
     

    二、垃圾回收器设置(串行收集器、并行收集器、并发收集器 )

         默认情况下JDK5.0以前都是使用串行收集器,如果想使用其他收集器需要在启动时加入相应参数。JDK5.0以后,JVM会根据当前系统配置进行智能判断。
     
      串行收集器
    • -XX:+UseSerialGC:设置串行收集器。
      并行收集器(吞吐量优先)
    • -XX:+UseParallelGC:设置年轻代为并行收集器。(此时年老代仍然为串行)
    • -XX:+UseParallelOldGC:配置年老代为并行收集。
    • -XX:ParallelGCThreads=20:配置并行收集器的线程数。
    • -XX:MaxGCPauseMillis=100:设置每次年轻代垃圾回收的最长时间(单位毫秒)。如果无法满足此时间,JVM会自动调整年轻代大小,以满足此时间。
    • -XX:+UseAdaptiveSizePolicy:设置此选项后,并行收集器会自动调整年轻代Eden区大小和Survivor区大小的比例,以达成目标系统规定的最低响应时间或者收集频率等指标。此参数建议在使用并行收集器时,一直打开。
      并发收集器(响应时间优先)
    • -XX:+UseConcMarkSweepGC:即CMS收集,设置年老代为并发收集。
    • -XX:+UseParNewGC:设置年轻代为并发收集。JDK5.0以上JVM会自行设置,无需再设。
    • -XX:CMSFullGCsBeforeCompaction=0:每次Full GC后立刻开始压缩和整理内存。
    • -XX:+UseCMSCompactAtFullCollection:打开内存空间的压缩和整理,在Full GC后执行。
    • -XX:+CMSIncrementalMode:设置为增量收集模式。一般适用于单CPU情况。
    • -XX:CMSInitiatingOccupancyFraction=70:表示年老代内存空间使用到70%时就开始执行CMS收集,以确保年老代有足够的空间接纳来自年轻代的对象,避免Full GC的发生。
      其它垃圾回收参数
    • -XX:+ScavengeBeforeFullGC:年轻代GC优于Full GC执行。
    • -XX:-DisableExplicitGC:不响应 System.gc() 代码。
    • -XX:+UseThreadPriorities:启用本地线程优先级API。即使 java.lang.Thread.setPriority() 生效,不启用则无效。
    • -XX:SoftRefLRUPolicyMSPerMB=0:软引用对象在最后一次被访问后能存活0毫秒(JVM默认为1000毫秒)。
    • -XX:TargetSurvivorRatio=90:允许90%的Survivor区被占用(JVM默认为50%)。提高对于Survivor区的使用率。

     

    三、辅助信息参数设置

    • -XX:-CITime:打印消耗在JIT编译的时间。
    • -XX:ErrorFile=./hs_err_pid.log:保存错误日志或数据到指定文件中。
    • -XX:HeapDumpPath=./java_pid.hprof:指定Dump堆内存时的路径。
    • -XX:-HeapDumpOnOutOfMemoryError:当首次遭遇内存溢出时Dump出此时的堆内存。
    • -XX:OnError=";":出现致命ERROR后运行自定义命令。
    • -XX:OnOutOfMemoryError=";":当首次遭遇内存溢出时执行自定义命令。
    • -XX:-PrintClassHistogram:按下 Ctrl+Break 后打印堆内存中类实例的柱状信息,同JDK的 jmap -histo 命令。
    • -XX:-PrintConcurrentLocks:按下 Ctrl+Break 后打印线程栈中并发锁的相关信息,同JDK的 jstack -l 命令。
    • -XX:-PrintCompilation:当一个方法被编译时打印相关信息。
    • -XX:-PrintGC:每次GC时打印相关信息。
    • -XX:-PrintGCDetails:每次GC时打印详细信息。
    • -XX:-PrintGCTimeStamps:打印每次GC的时间戳。
    • -XX:-TraceClassLoading:跟踪类的加载信息。
    • -XX:-TraceClassLoadingPreorder:跟踪被引用到的所有类的加载信息。
    • -XX:-TraceClassResolution:跟踪常量池。
    • -XX:-TraceClassUnloading:跟踪类的卸载信息。
  • 相关阅读:
    easyui tree:根据属性格式化树节点名称
    Druid执行多条SQL异常:Cause: java.sql.SQLException: sql injection violation, multi-statement not allow
    springmvc接收jquery提交的数组数据
    jquery easyui:tab自动加载第一个tab内容
    thymeleaf-extras-shiro
    Shiro:授权控制
    thymeleaf : EL1050E The arguments (...) for the constructor call are missing
    (转载)ibatis:解决sql注入问题
    05 Oracle process
    04 memory structure
  • 原文地址:https://www.cnblogs.com/hanxue112253/p/8515515.html
Copyright © 2020-2023  润新知