我用Java的数组玩了一下,我意识到1GB的大字节数组需要4GB的RAM。 那是我的代码(确保你有至少4GB未使用的内存,否则你的PC可能会冻结):
public static void main(String[] args) throws InterruptedException {
Byte[] array = new Byte[1073741823]; // Equals 1GB
System.out.println("Done");
Thread.sleep(10000);
System.out.println("Completely done");
}
那是我的机器:
MacBook Pro(64位;运行OS X 10.9)
Java:Java SE 6(1.6.0_65-b14-462)和Java SE 7(1.7.0_45)。
RAM:16
使用的RAM:大约10GB
当我启动此应用程序时,它使用4GB而不是1.我使用这些参数来启动该程序:-Xmx8g -d64
。
答案 0 :(得分:6)
那是因为Byte是一个对象,需要足够的内存来保存对象引用。你想要原始类型的小写“字节”。