java committed used_JVM中MemoryUsage中init,committed,used,max的含义

以下摘抄自JDK1.7

*

*

*

init

*

represents the initial amount of memory (in bytes) that

* the Java virtual machine requests from the operating system

* for memory management during startup. The Java virtual machine

* may request additional memory from the operating system and

* may also release memory to the system over time.

* The value of init may be undefined.

*

*

*

*

used

*

represents the amount of memory currently used (in bytes).

*

*

*

*

committed

*

represents the amount of memory (in bytes) that is

* guaranteed to be available for use by the Java virtual machine.

* The amount of committed memory may change over time (increase

* or decrease). The Java virtual machine may release memory to

* the system and committed could be less than init.

* committed will always be greater than

* or equal to used.

*

*

*

*

max

*

represents the maximum amount of memory (in bytes)

* that can be used for memory management. Its value may be undefined.

* The maximum amount of memory may change over time if defined.

* The amount of used and committed memory will always be less than

* or equal to max if max is defined.

* A memory allocation may fail if it attempts to increase the

* used memory such that used > committed even

* if used <= max would still be true (for example,

* when the system is low on virtual memory).

*

*

*

*

*

* Below is a picture showing an example of a memory pool:

*

*

 
 

* +----------------------------------------------+

* + | +

* + | +

* +----------------------------------------------+

*

* |--------|

* init

* |---------------|

* used

* |---------------------------|

* committed

* |----------------------------------------------|

* max

*

实验:

import java.util.ArrayList;

import java.util.List;

public class VMTest {

public static void main(String[] args) {

List l = new ArrayList();

while(true) {

try {

Thread.sleep(1);

l.add(new Test());

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

class Test {

int[] a = new int[2560];

}相当于每秒钟分配10M内存。

启动参数 -Xmx512m -Xms10m

结果:

init:10485760 略小于xms的10m

max:477233152 略小于xmx的512m

committed和used不停地增大,used始终小于committed,40几秒后达到max

,报java.lang.OutOfMemoryError: Java heap space错误。

结论:init约等于xms的值,max约等于xmx的值。used是已经被使用的内存大小,committed是当前可使用的内存大小(包括已使用的),committed >= used。committed不足时jvm向系统申请,若超过max则发生OutOfMemoryError错误。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值