在哪里可以找到MemoryConsumer.java程序来测试内存消耗?
在哪里可以找到MemoryConsumer.java程序来测试内存消耗?我知道这样的事情已经存在了,因为我在谷歌上看到了这样的事情。例如,这个Oracle站点引用了“consumerheap.java”,但我不知道在哪里可以找到源代码在哪里可以找到MemoryConsumer.java程序来测试内存消耗?,java,jvm-hotspot,Java,Jvm Hotspot,在哪里可以找到MemoryConsumer.java程序来测试内存消耗?我知道这样的事情已经存在了,因为我在谷歌上看到了这样的事情。例如,这个Oracle站点引用了“consumerheap.java”,但我不知道在哪里可以找到源代码 有人知道在哪里找到或如何创建这样的对象吗?您只需创建大量的对象实例并将其保留在范围内即可 ArrayList<SomeObject> listOfObjects = new ArrayList<SomeObject>; for (int
有人知道在哪里找到或如何创建这样的对象吗?您只需创建大量的对象实例并将其保留在范围内即可
ArrayList<SomeObject> listOfObjects = new ArrayList<SomeObject>;
for (int i = 0; i < aBigNumber; i++) {
listOfObjects.add(new SomeObject());
}
ArrayList listOfObjects=新建ArrayList;
for(int i=0;i
我使用了这个ObjectSizer
类,效果很好:
它通过创建大量的对象实例来工作,正如泰勒所建议的那样。这真的很简单:
public class ConsumeHeap {
public static void main(String[] args) {
int[] a = new int[2000000000];
}
}
这将导致在所有32位虚拟机上立即抛出OutOfMemoryError。以下情况应引起所有当代虚拟机的例外,因为它需要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));
}
}
封装测试;
导入java.util.ArrayList;
导入java.util.List;
公开课表演员{
专用静态最终长MB=1024L*1024L;
公共静态长bytesToMegabytes(长字节){
返回字节/兆字节;
}
公共静态void main(字符串[]args){
//我想你会知道如何创建一个对象的人自己。。。
列表=新的ArrayList();
对于(int i=0;i