JVM启动参数-Xmx的默认值是多少?

你也可以在程序里试试打印 Runtime.getRuntime().maxMemory() 的值 看看是多少

官网说明: https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/parallel.html#default_heap_size

 

默认堆大小

除非在命令行中指定了初始和最大堆大小,否则将根据计算机上的内存量计算它们。

客户端JVM默认初始和最大堆大小

默认的最大堆大小是物理内存的一半,直到物理内存大小为192兆字节(MB),否则为物理内存的四分之一,物理内存大小为1千兆字节(GB)。

例如,如果您的计算机具有128 MB的物理内存,则最大堆大小为64 MB,并且大于或等于1 GB的物理内存会导致最大堆大小为256 MB。

除非程序创建足够的对象来要求它,否则JVM实际上不会使用最大堆大小。在JVM初始化期间分配一个小得多的数量,称为初始堆大小。此数量至少为8 MB,否则为物理内存的1/64,最大物理内存大小为1 GB。

分配给年轻代的最大空间量是总堆大小的三分之一。

服务器JVM默认初始和最大堆大小

要用 java -server <类名> 来启动你的程序 ..

默认的初始和最大堆大小在服务器JVM上的工作方式与在客户端JVM上的大小相同,只是默认值可以更高。在32位JVM上,如果有4 GB或更多的物理内存,则默认的最大堆大小可以高达1 GB。在64位JVM上,如果存在128 GB或更多物理内存,则默认最大堆大小最多可为32 GB。您可以通过直接指定这些值来设置更高或更低的初始和最大堆; 见下一节。

指定初始和最大堆大小

您可以使用标志-Xms(初始堆大小)和-Xmx(最大堆大小)指定初始和最大堆大小。如果您知道应用程序需要多少堆才能正常工作,则可以设置-Xms-Xmx使用相同的值。如果没有,JVM将首先使用初始堆大小,然后增加Java堆,直到它在堆使用和性能之间找到平衡。

其他参数和选项可能会影响这些默认值。要验证默认值,请使用该-XX:+PrintFlagsFinal选项并MaxHeapSize在输出中查找。例如,在Linux或Solaris上,您可以运行以下命令:

java -XX:+ PrintFlagsFinal <GC options> -version | grep MaxHeapSize

 

过多的GC时间和OutOfMemoryError

OutOfMemoryError如果在垃圾收集(GC)中花费了太多时间,那么并行收集器会抛出:如果在垃圾收集中花费了超过98%的总时间并且回收了不到2%的堆,则OutOfMemoryError抛出a。此功能旨在防止应用程序长时间运行,同时由于堆太小而很少或没有进度。如有必要,可以通过向-XX:-UseGCOverheadLimit命令行添加选项来禁用此功能。

posted on   小石头小祖宗  阅读(177)  评论(0编辑  收藏  举报  

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示