在哪里可以找到MemoryConsumer.java程序来测试内存消耗?我知道这样的事情已经存在,因为我看到谷歌通过这种方式引用了这些内容。例如,此Oracle站点引用“ConsumeHeap.java”,但我不知道在哪里可以找到该源代码。
有谁知道在哪里找到或如何制作这样的东西?
答案 0 :(得分:2)
您可以简单地创建大量对象实例并将其保留在范围内。
ArrayList<SomeObject> listOfObjects = new ArrayList<SomeObject>;
for (int i = 0; i < aBigNumber; i++) {
listOfObjects.add(new SomeObject());
}
答案 1 :(得分:2)
我已经使用了这个ObjectSizer
类,效果很好:
http://www.javapractices.com/topic/TopicAction.do?Id=83
它的工作原理是创建大量的对象实例,如Tyler所建议。
答案 2 :(得分:1)
这真的非常简单:
public class ConsumeHeap {
public static void main(String[] args) {
int[] a = new int[2000000000];
}
}
这应该导致在所有32位VM上立即抛出OutOfMemoryError。以下内容应该引发所有当代虚拟机的异常,因为它需要16 * 10 ^ 18字节的内存:
public class ConsumeHeap {
public static void main(String[] args) {
int[][] a = new int[2000000000][2000000000];
}
}
答案 3 :(得分:0)
通常,如果此操作具有较长的运行时间或较高的内存消耗,则操作被视为广泛的操作。 程序的总使用/可用内存可以通过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));
}
}