在oracle文档中我发现:
-Xmxsize指定内存分配池的最大大小(以字节为单位),以字节为单位...默认值是在运行时根据系统配置选择的.
这是什么系统配置是什么意思?
icz*_*cza 123
它在实现和版本上有所不同,但通常取决于所使用的VM(例如客户端或服务器,参见-client和-server参数)以及系统内存.
它的默认值通常是物理内存的1/4或1GB(以较小者为准).
Java配置选项(命令行参数)也可以"外包"到环境变量,包括-Xmx,可以更改默认值(意味着指定新的默认值).具体来说,JAVA_TOOL_OPTIONS环境变量由所有Java工具检查并在存在时使用(此处和此处有更多详细信息).
您可以运行以下命令来查看默认值:
java -XX:+PrintFlagsFinal -version
Run Code Online (Sandbox Code Playgroud)
它给你一个loooong列表,-Xmxin MaxHeapSize,-Xmsin in InitialHeapSize.过滤您的输出(例如|grep在Linux上)或将其保存在文件中,以便您可以搜索它.
Sar*_*dra 31
与您提到的一样,默认值-Xmxsize(Maximum HeapSize)取决于您的系统配置.
对于Xmssize(最小HeapSize),Java8需要物理内存的1/6大小,而物理内存的-Xmxsize1/4大小(最大HeapSize).
这意味着如果你有一个8GB RAM的物理内存,你将获得Xmssize8*(1/6)的较大值和-Xmxsize8*(1/4)的较小值.
您可以使用检查默认的HeapSize
在Windows中:
java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"
Run Code Online (Sandbox Code Playgroud)
在Linux中:
java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'
Run Code Online (Sandbox Code Playgroud)
这些默认值也可以覆盖到您想要的数量.
小智 13
令人惊讶的是,这个问题没有明确的记录答案.也许另一个数据点可以为寻找答案的其他人提供价值.在运行CentOS(6.8,7.3)和Java 8(构建1.8.0_60-b27,64位服务器)的系统上:
默认内存是物理内存的1/4,不受1GB的限制.
此外,-XX:+PrintFlagsFinal打印到STDERR所以命令以确定上面其他人提供的当前默认内存应调整到以下内容:
java -XX:+PrintFlagsFinal 2>&1 | grep MaxHeapSize
Run Code Online (Sandbox Code Playgroud)
在具有64GB物理RAM的系统上返回以下内容:
uintx MaxHeapSize := 16873684992 {product}
Run Code Online (Sandbox Code Playgroud)
在我的 Ubuntu VM 上,总 RAM 为 1048 MB,java -XX:+PrintFlagsFinal -version | grep HeapSize打印出 : uintx MaxHeapSize := 266338304,大约为 266MB,是我总 RAM 的 1/4。
截至2019 年 5 月 8 日:
JVM 堆大小取决于系统配置,这意味着:
a) 客户端 jvm 与服务器 jvm
b) 32 位与 64 位。
链接:
1)从J2SE5.0更新:https://docs.oracle.com/javase/6/docs/technotes/guides/vm/gc-ergonomics.html
2)简要回答:https://docs.oracle.com/ javase/8/docs/technotes/guides/vm/gctuning/ergonomics.html
3)详细答案:https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/parallel.html# default_heap_size
4)客户端与服务器:https://www.javacodegeeks.com/2011/07/jvm-options-client-vs-server.html
摘要:( 从上面的链接很难理解。所以在这里总结一下)
1) Client jvm 的默认最大堆大小为 256mb(有一个例外,请从上面的链接中读取)。
2) 32 位服务器 jvm 的默认最大堆大小为 1gb,64 位服务器 jvm 的默认最大堆大小为 32gb(这里也有例外。请从链接中阅读)。
因此,默认最大 jvm 堆大小为:256mb或1gb或32gb ,具体取决于上面的 VM。