프로그래밍 방식으로 처리 할 수 있습니까? 여기java.lang.OutOfMemory 예외를 예측하는 방법은 무엇입니까?
내가 무엇을 시도했다입니다 :
import java.util.ArrayList;
import java.util.List;
public class TestMemory {
public static void main(String[] args) {
int kb = 1024;
//Getting the runtime reference from system
Runtime runtime = Runtime.getRuntime();
//Print used memory
System.out.println("Used Memory:" + (runtime.totalMemory() - runtime.freeMemory())/kb);
//Print free memory
System.out.println("Free Memory:" + runtime.freeMemory()/kb);
//Print total available memory
System.out.println("Total Memory:" + runtime.totalMemory()/kb);
//Print Maximum available memory
System.out.println("Max Memory:" + runtime.maxMemory()/kb);
List<String> list = new ArrayList<>();
for (int i = 0; i < 10000; i++) {
for (int j = 0; j < 1000; j++) {
list.add("abcdefghij" + i + j);
}
if (i % 1000 == 0) {
try {
Thread.sleep(500);
System.out.println("Free Memory:" + runtime.freeMemory()/kb + " Kb");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
및 출력 :
Used Memory:289
Free Memory:15582
Total Memory:15872
Max Memory:126720
Free Memory:15405 Kb
Free Memory:22820 Kb (long pause, longer than 500ms and then exception)
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Arrays.java:2694)
at java.lang.String.<init>(String.java:203)
at java.lang.StringBuilder.toString(StringBuilder.java:405)
at TestMemory.main(TestMemory.java:32)
그것은 나에게 많은에게 말을하지 않습니다. 나는 "Free Memory"값이 충돌 이전에 감소 할 것으로 기대한다. 사용 가능한 메모리를 확인하고이 예외가 발생하기 전에 메모리 양을 알려주는주기를 작성하는 방법은 무엇입니까?
실제로 무엇을하려고합니까? 그냥 메모리를 채우는 것은 나에게 진짜 유스 케이스처럼 들리지 않는다. –