JVM默认堆大小

一、官方文档:

1. Default Heap Size

Unless the initial and maximum heap sizes are specified on the command line, they are calculated based on the amount of memory on the machine.
默认堆大小:
若没有在命令行中指定了初始化和最大的堆大小,则取决于计算机上的的物理内存大小

2. Client JVM Default Initial and Maximum Heap Sizes

The default maximum heap size is half of the physical memory up to a physical memory size of 192 megabytes (MB) and otherwise one fourth of the physical memory up to a physical memory size of 1 gigabyte (GB).
默认最大堆在物理内存192MB以下时是物理内存的一半,并且在物理内存1GB以下时,为其四分之一
For example, if your computer has 128 MB of physical memory, then the maximum heap size is 64 MB, and greater than or equal to 1 GB of physical memory results in a maximum heap size of 256 MB.
例如,计算机物理内存为128MB时,最大堆为64MB,当物理内存大于等于1GB时最大堆都为256MB
The maximum heap size is not actually used by the JVM unless your program creates enough objects to require it. A much smaller amount, called the initial heap size, is allocated during JVM initialization. This amount is at least 8 MB and otherwise 1/64th of physical memory up to a physical memory size of 1 GB.
最大堆实际上并不被JVM经常用到,除非你的程序会创建足够多的对象。有个更小的数字,称为初始化堆大小,会在JVM初始化时分配。初始化堆大小至少为8MB,并且直到物理内存达到1GB时,都为其六十四分之一
The maximum amount of space allocated to the young generation is one third of the total heap size.
Yong区分配的空间最大值为堆大小的三分之一

2.1 客户端的默认堆大小

  • 最大堆大小:物理内存小于192MB时,为物理内存的一半;物理内存大于192MB且小于1GB时,为物理内存的四分之一;大于等于1GB时,都为256MB
  • 初始化堆大小:至少为8MB;物理内存大于512MB且小于1GB时,为物理内存的六十四分之一;大于等于1GB时,都为16MB

3. Server JVM Default Initial and Maximum Heap Sizes

The default initial and maximum heap sizes work similarly on the server JVM as it does on the client JVM, except that the default values can go higher. On 32-bit JVMs, the default maximum heap size can be up to 1 GB if there is 4 GB or more of physical memory. On 64-bit JVMs, the default maximum heap size can be up to 32 GB if there is 128 GB or more of physical memory. You can always set a higher or lower initial and maximum heap by specifying those values directly; see the next section.
服务端JVM默认的初始化堆大小和最大堆大小除了能设定更大的值以外,其分配规律与客户端JVM相同。在32位的JVM中,如果物理内存大于等于4GB,默认最大堆的大小可以达到1GB。在64位的JVM中,如果物理内存大于等于128GB,默认最大堆大小可以达到32GB。你可以直接指定更大或者更小的初始化堆大小和最大堆大小。

3.1 服务器端的默认堆大小

初始化堆大小:与客户端JVM相同
最大堆小大:
  • 32位的JVM上,物理内存小于192MB时,为物理内存的一半;物理内存大于192MB且小于4GB时,为物理内存的四分之一;大于等于4GB时,都为1GB
  • 64位的JVM上,物理内存小于192MB时,为物理内存的一半;物理内存大192MB且小于128GB时,为物理内存的四分之一;大于等于128GB时,都为32GB

二、最大堆大小查看方式

Linux环境下可通过如下命令去查看:
 java -XX:+PrintFlagsFinal -version | grep MaxHeapSize
在程序中可用如下语句打印JVM最大内存
Runtime.getRuntime().maxMemory()

五、总结

其实分配最大堆大小时有点歧义,根据文档,当物理内存位于192MB-384MB这段区间,最大堆大小应该为物理内存四分之一,较之前小于192MB时为物理内存一半,反倒随着物理内存增大,最大堆变小了,所以笔者认为这段区间的最大堆内存应该都为96MB,其他情况类似。
附:官方文档
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Match_h

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值