首页 > 其他分享 >JVM常用启动参数

JVM常用启动参数

时间:2023-10-07 21:01:27浏览次数:33  
标签:常用 JVM 收集器 XX 参数 内存 设置 GC

在一个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:跟踪被引用到的所有类的加载信息。

标签:常用,JVM,收集器,XX,参数,内存,设置,GC
From: https://blog.51cto.com/u_16270511/7742623

相关文章

  • 六款Linux常用远程连接工具
    1、Xshell介绍:xshell是一个非常强大的安全终端模拟软件,它支持SSH1,SSH2,以及Windows平台的TELNET协议。Xshell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。(也是我目前使用的远程连接工具) 官网:www.netsarang.com2、secureCR......
  • 【常用操作】CentOS系统配置远程桌面
    一、前言当前系统使用最小化安装方式,因使用需求变更,需要使用图形化界面操作,此处介绍如何安装图形化界面,并配置远程桌面二、安装部署1、安装图形化界面安装Gnome包yumgroupinstall"GNOMEDesktop""GraphicalAdministrationTools"-y更新系统运行级别ln-sf/lib/sy......
  • Oracle常用语句
    一、表注释1、添加表注释commentontablescheduler_tableis'调度表'2、删除表注释commentontablescheduler_tableis''3、查询表注释select*fromuser_tab_commentswheretable_name='SCHEDULER_TABLE'4、添加字段注释commentoncolumnscheduler_table.idis&#......
  • 对常用I/O模型进行比较说明
     #一、网络I/O模型阻塞型、非阻塞型、复用型、信号驱动型、异步#1、阻塞型I/O模型(blockingIO 阻塞IO模型是最简单的I/O模型,用户线程在内核进行IO操作时被阻塞用户线程通过系统调用read发起I/O读操作,由用户空间转到内核空间。内核等到数据包到达后,然后将接收......
  • 总结sshd服务常用参数
    服务器端的配置文件:/etc/ssh/sshd_config​常用参数:Port                          #端口号ListenAddressipLoginGraceTime2m          #宽限期PermitRootLoginyes           ......
  • kafka常用命令
    1、启动Kafka./bin/kafka-server-start.sh./config/server.properties&2、停止Kafka./bin/kafka-server-stop.sh3、创建Topic#通过zookepper./bin/kafka-topics.sh--create--zookeeper192.168.209.102:2181--partitions3--replication-factor2--topictest#......
  • 详解PLC常用的编程语言
    大家都知道学习某种新知识,技巧跟方法是关键的。正如新手刚开始接触PLC,它的软件编程语言与一般计算机语言相比,具有明显的特点,它既不同于高级语言,也不同于一般的汇编语言,它既要满足易于编写又要满足易于调试的要求。早期的PLC仅支持梯形图编程语言和指令表编程语言,现根据国际电工委......
  • plt.scatter 中cmap参数详解
    plt.scatter中cmap参数详解 1.首先,cmap参数和c参数配合使用的。参数c可以是一个序列,如:plt.scatter(a,b,c=['b','r','b','r','b'],s=80)此时c的序列是一个颜色序列,除了上述的简洁写法,还可以使用RGB或RBGA:plt.scatter(a,b,c=['#f00','#0f0','#f00�......
  • Java 常用开发总结
    Java8集合篇ListStream常用操作1List去重publicclassStreamTest{@Testpublicvoidtest_listDistinct(){List<String>oldList=Arrays.asList("a","b","a","c");List<String>newLi......
  • 强烈推荐!8 个 IDEA 常用小技巧,准点下班必备!
    InteIIiJIDEA2023.2版本发布了,在2023.2中,官方根据用户的宝贵反馈对新UI做出了大量改进,新UI界面大大减少了干扰,可以让用户更好地专注于代码。相信很多同学都已经迫不及待地尝试了。但官方激活码的校验规则进行了更新,之前已经成功激活的Idea可能突然无法使用了,给大家准备了激活码......