我在哪裏可以找到一個MemoryConsumer.java程序來測試內存消耗?我知道這樣的事情已經存在,因爲我通過谷歌看到了這樣的事情。例如,這個Oracle站點引用「ConsumeHeap.java」,但我不知道在哪裏可以找到該源代碼。我在哪裏可以找到一個MemoryConsumer.java程序來測試內存消耗?
有誰知道在哪裏可以找到或如何創建這樣的事情?
我在哪裏可以找到一個MemoryConsumer.java程序來測試內存消耗?我知道這樣的事情已經存在,因爲我通過谷歌看到了這樣的事情。例如,這個Oracle站點引用「ConsumeHeap.java」,但我不知道在哪裏可以找到該源代碼。我在哪裏可以找到一個MemoryConsumer.java程序來測試內存消耗?
有誰知道在哪裏可以找到或如何創建這樣的事情?
您可以簡單地創建大量的對象實例並將其保留在範圍內。
ArrayList<SomeObject> listOfObjects = new ArrayList<SomeObject>;
for (int i = 0; i < aBigNumber; i++) {
listOfObjects.add(new SomeObject());
}
我用這個ObjectSizer
類,效果良好:
http://www.javapractices.com/topic/TopicAction.do?Id=83
它通過創建對象實例的鉅額資金,通過泰勒的建議。
這真的很簡單:
public class ConsumeHeap {
public static void main(String[] args) {
int[] a = new int[2000000000];
}
}
這應該導致立即OutOfMemoryError異常被拋出在所有32位虛擬機。以下應挑起當代所有的虛擬機除外,因爲它需要16個的記憶* 10^18個字節:
public class ConsumeHeap {
public static void main(String[] args) {
int[][] a = new int[2000000000][2000000000];
}
}
在一般操作被認爲是豐富的,如果這個操作有很長的運行時間或高內存消費。 程序中使用/釋放的內存總量可以通過java.lang.Runtime.getRuntime()在程序中獲得。
運行時有幾種與內存相關的方法。以下編碼示例演示了它的用法。
package test;
import java.util.ArrayList;
import java.util.List;
public class PerformanceTest {
private static final long MEGABYTE = 1024L * 1024L;
public static long bytesToMegabytes(long bytes) {
return bytes/MEGABYTE;
}
public static void main(String[] args) {
// I assume you will know how to create a object Person yourself...
List<Person> list = new ArrayList<Person>();
for (int i = 0; i <= 100000; i++) {
list.add(new Person("Jim", "Knopf"));
}
// Get the Java runtime
Runtime runtime = Runtime.getRuntime();
// Run the garbage collector
runtime.gc();
// Calculate the used memory
long memory = runtime.totalMemory() - runtime.freeMemory();
System.out.println("Used memory is bytes: " + memory);
System.out.println("Used memory is megabytes: "
+ bytesToMegabytes(memory));
}
}