多语言展示
当前在线:656今日阅读:195今日分享:41

如何定义 jvm 堆的大小?

如何定义 jvm 堆的大小
工具/原料

jdk1.8

方法/步骤
1

jvm 提供了几个命令行参数, 用于定义分配给不同内存区域的内存大小。

2

启动 jvm 时, 可以使用命令行标志-Xmx 和 size指定最大堆大小。例如, 使用 java -Xmx512m 启动 jvm 创建最大堆大小为512兆字节的 jvm。内存大小的后缀为 g 表示千兆字节, m 表示兆字节, k 表示千字节。需要注意的是, jvm 不会在启动时完整地分配此内存;只有在需要的时候, 它才会增长到这个大小的最大值。在 jvm 扩展其内存分配之前, 它将尝试执行尽可能多的垃圾回收。

3

若要指定分配给 jvm 的初始内存量, 请使用-Xms 参数。它的工作方式与-Xmx 相同。如果您知道您的函数需要一定的内存, 则建议使用此参数, 因为它将在扩展到所需大小之前将应用程序从过短的垃圾回收中保存出来。

4

如果将这两个参数设置为相同的值, jvm 将在启动时要求操作系统进行该完整内存分配, 并且它不会增大。

5

对于初始内存分配, 默认值为计算机上内存的一半, 最多 1 gb。对于最大默认值, 它是计算机物理内存的较小的 1 gb 和四分之一。考虑到这些值在不同的计算机之间可能会有很大的差异, 您应该为生产环境中运行的任何代码显式指定值, 并确保您的代码对这些值执行得满意。

6

与设置初始和最大堆大小类似, 您也有用于设置堆栈大小的 jvm 启动参数。对于大多数正在运行的程序, 应避免设置这些程序。如果您发现自己经常遇到StackOverflowExceptions , 则应检查您的代码, 并将尽可能多的递归方法替换为迭代对应方法。

7

其他相关的 jvm 参数包括-XX:Permsize和 -XX:MaxPermSize 的永久生成。如果您有大量的类或字符串常量, 或者如果您正在使用非 java 语言创建许多动态类定义, 则可能需要设置此设置。

推荐信息