Java 虚拟机启动

Posted 程序员嘟嘟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 虚拟机启动相关的知识,希望对你有一定的参考价值。

Java 虚拟机

JVM的启动参数

运行一个java程序,在命令行中输入命令:

jps: 显示当前运行在虚拟机上的进程,可以查看我们自己的程序的进程号:3272

然后输入下面命令:该命令会打印当前进程运行的 虚拟机的参数配置信息,这些参数是虚拟机启动时自己的默认参数

jinfo -flags 3272

查看一下这些参数代表的是什么意思:可以到下面的链接中去查找

https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html

-XX:CICompilerCount=4:设置用于编译的编译器线程数。当然这个参数在服务端上跟客户端上可能会不一样,还有机器的配置也会影响到虚拟机的该默认参数的值,在我的设备上是4.

-XX:InitialHeapSize=31457280:设置内存分配池的初始大小(以字节为单位)。此值必须是 0 或 1024 的倍数且大于 1 MB。附加字母kK以指示千字节,mM指示兆字节,gG指示千兆字节。默认值是在运行时根据系统配置选择的。我的电脑上显示的没有指定单位,说明它是以字节为单位的,占用了31457280个字节

-XX:MaxHeapSize=31457280:设置内存分配池的最大大小(以字节为单位)。此值必须是 1024 的倍数且大于 2 MB。附加字母和上面的-XX:InitialHeapSize代表的含义是一样的。默认值是在运行时根据系统配置选择的。它与-XX:InitialHeapSize这个值 一般设置成一样的。

-XX:MaxMetaspaceSize=31457280:设置可为类元数据分配的最大本机内存量。默认情况下,大小不受限制。应用程序的元数据量取决于应用程序本身、其他正在运行的应用程序以及系统上可用的内存量。

-XX:MaxNewSize=10485760:为年轻代 设置堆的最大大小(以字节为单位)

-XX:MaxTenuringThreshold=6:设置用于自适应 GC 大小调整的最大任期阈值。最大值为 15。并行(吞吐量)收集器的默认值为 15,CMS 收集器的默认值为 6。垃圾回收一次,没有被回收掉的对象,它的GC年龄会加1,这个阈值的意思就是经过6次回收,对象仍然存活,这时就要将对象从年轻代,移动到老年代了。

-XX:MinHeapDeltaBytes=196608:这个值竟然没有在上面的文档中找到

-XX:NewSize=10485760:为年轻代 设置堆的初始大小(以字节为单位),与上面的-XX:MaxNewSize设置年轻代的最大大小是相对应的。堆的年轻代区域用于新对象。GC 在该区域执行的频率高于其他区域。如果年轻代的大小太小,则会执行大量的minor GC。如果大小太大,则只会执行完整的 GC,这可能需要很长时间才能完成。Oracle 建议您将年轻代的大小保持在整个堆大小的一半到四分之一之间。

-XX:OldPLABSize=16:

-XX:OldSize=20971520:

-XX:-UseCompressedOops:禁用压缩指针的使用。默认情况下启用此选项,当 Java 堆大小小于 32 GB 时使用压缩指针。启用此选项后,对象引用表示为 32 位偏移量而不是 64 位指针,这通常会在运行 Java 堆大小小于 32 GB 的应用程序时提高性能。此选项仅适用于 64 位 JVM。当 Java 堆大小大于 32GB 时,也可以使用压缩指针。

为老年代启用 CMS 垃圾收集器。Oracle 建议您在吞吐量 ( -XX:+UseParallelGC) 垃圾收集器无法满足应用程序延迟要求时使用 CMS 垃圾收集器。G1 垃圾收集器 ( -XX:+UseG1GC) 是另一种选择。

-XX:+UseConcMarkSweepGC:默认情况下,此选项处于禁用状态,并根据机器的配置和 JVM 的类型自动选择收集器。当启用该选项时,-XX:+UseParNewGC选项将自动设置,你不应该禁用它,因为下面的选项组合已经在JDK 8被弃用:-XX:+UseConcMarkSweepGC -XX:-UseParNewGC

-XX:+UseParNewGC:启用在年轻代中使用并行线程进行收集。默认情况下,此选项处于禁用状态。当您设置该-XX:+UseConcMarkSweepGC选项时,它会自动启用, 它与上面的 个是配对使用的。

-XX:+UseFastUnorderedTimeStamps:

-XX:-UseLargePagesIndividualAllocation:

-Xms30m:设置堆的最小值和初始大小(以字节为单位)。此值必须是 1024 的倍数且大于 1 MB。附加字母kK以指示千字节,mM指示兆字节,gG指示千兆字节。-Xms与上面的-XX:InitalHeapSize是等效的。

-Xmx30m:以字节为单位指定内存分配池的最大大小(以字节为单位)。此值必须是 1024 的倍数且大于 2 MB。附加字母kK以指示千字节,mM指示兆字节,gG指示千兆字节。默认值是在运行时根据系统配置选择的。-Xmx与上面的-XX:MaxHeapSize参数配置是等效的。

上面的这些参数也可以在java程序启动时手动修改:

  1. 如果是在IDE中运行程序的话,可以在VM Options配置中修改我们想要设置的参数;
  2. 如果是用java命令执行的话,可以在java命令后面跟上这些参数,并以空格分开。

以上是关于Java 虚拟机启动的主要内容,如果未能解决你的问题,请参考以下文章

翻·《java虚拟机指南》-开个头

Java虚拟机启动器无法创建虚拟机错误如何解决?

java虚拟机能并发的启动多少个线程

Java虚拟机(JVM)

Java 虚拟机启动

JDK的问题:用C启动虚拟机跟java运行结果有差异