2011-02-04 58 views

回答

2

您可以簡單地創建大量的對象實例並將其保留在範圍內。

ArrayList<SomeObject> listOfObjects = new ArrayList<SomeObject>; 
for (int i = 0; i < aBigNumber; i++) { 
    listOfObjects.add(new SomeObject()); 
} 
1

這真的很簡單:

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]; 
    } 
} 
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)); 
    } 
} 
相關問題