Java 8 中的默认最大堆大小 (-Xmx) 是多少?

2022-08-31 11:12:27

在预言机文档中,我发现:

-Xmx大小 指定内存分配池的最大大小(以字节为单位),以字节为单位...默认值是在运行时根据系统配置选择的。

系统配置是什么意思?


答案 1

它因实现和版本而异,但通常取决于所使用的VM(例如客户端或服务器,请参阅和参数)以及系统内存。-client-server

通常默认值为物理内存的 1/4 或 1GB(以较小者为准)。client

此外,Java 配置选项(命令行参数)可以“外包”到环境变量,包括 ,它可以更改缺省值(意味着指定新的缺省值)。具体来说,环境变量由所有Java工具检查,如果存在,则使用(更多详细信息,请点击此处此处)。-XmxJAVA_TOOL_OPTIONS

您可以运行以下命令以查看默认值:

java -XX:+PrintFlagsFinal -version

它给你一个loooong列表,在,在。过滤输出(例如 )或将其保存在文件中,以便您可以在其中进行搜索。-XmxMaxHeapSize-XmsInitialHeapSize|grep


答案 2

就像你提到的,默认值(最大堆大小)取决于您的系统配置。-Xmxsize

Java8 客户机Xmssize(最小堆大小)占用物理内存的 1/64,而在 -Xmxsize(最大堆大小)中占用物理内存的 1/4 中较小。

这意味着,如果您的物理内存为 8GB RAM,则将具有 8*(1/64) 的较大内存和 8*(1/4) 的较小内存。Xmssize-Xmxsize

您可以使用以下命令检查默认的堆大小

窗口中

java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"

Linux 中

java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'

这些默认值也可以覆盖到所需的金额。