java 消耗内存_java – 不能消耗整个内存

我正在尝试编写一个应该占用特定大小内存的程序.我想知道的一个问题是,当堆中实际存在空闲空间时,我将获得outOfMemory异常.

这是代码:

import java.util.Vector;

import java.lang.*;

public class MemoryEater1 {

public static void main(String[] args) {

try {

long mb = Long.valueOf(args[0]);

Vector v = new Vector();

Runtime rt = Runtime.getRuntime();

while (true) {

if (v.size() > 0) {

if (((long) v.size())*100 < mb) {

System.out.println("total memory: " + rt.totalMemory()/1024/1024);

System.out.println("max memory: " + rt.maxMemory()/1024/1024);

System.out.println("free memory: " + rt.freeMemory()/1024/1024);

System.out.println("Trying to add 100 mb");

//100mb

byte b[] = new byte[104857600];

v.add(b);

}

} else {

//100mb

byte b[] = new byte[104857600];

v.add(b);

System.out.println("Added 100 mb");

}

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

启动它的命令:

java -Xmx4096m MemoryEater1 3000

并输出:

total memory: 2867

max memory: 3641

free memory: 59

Trying to add 100 mb

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

at MemoryEater1.main(MemoryEater1.java:18)

那么最大内存和总内存之间的差异是774mb,这应该足以消耗100mb以上,但仍然存在错误,甚至机器资源足够:

[user@machine ~]$free -m

total used free shared buffers cached

Mem: 15950 3447 12502 0 210 2389

-/+ buffers/cache: 847 15102

Swap: 4031 1759218603 8941

为什么会这样?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值