-1
我有一個內存不足的素性測試例程,我想查找它正在嗅探的值,但無法打印出來了!相關的代碼片段:需要在拋出內存錯誤後打印出Catch語句中的值
try{
// truncate left to right
for(int xTruncation = 1; xTruncation < lenValue; xTruncation++){
integerValue[0]--;
long value = Arithmetic.integerToLong10(integerValue);
if(! Numbers.primeIs(value)) continue NextPermutation; // the number is not prime
}
integerValue[0] = lenValue; // restore length
// truncate right to left
for(int xTruncation = 1; xTruncation < lenValue; xTruncation++){
Arithmetic.integerReduce(integerValue, 1);
long value = Arithmetic.integerToLong10(integerValue);
if(! Numbers.primeIs(value)) continue NextPermutation; // the number is not prime
}
} catch(Throwable t) {
System.out.println("last value: " + nValue);
}
這裏是輸出:
23
37
73
313
317
373
797
3137
3797
739397
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at cra.common.Numbers_jsc.factor(Numbers.java:153)
at cra.common.Numbers_jsc.primeIs(Numbers.java:78)
at Euler50.Euler_37(Euler50.java:803)
at Euler50.main(Euler50.java:15)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
的的System.out.println catch子句中不會被調用。 如何打印出有問題的值?
看起來您的循環可以組合起來,而且您也不會在繼續之後顯示標籤引導您到達的位置。 – Makoto
究竟是如何運行異常處理程序代碼?根據定義,你的內存不足,所以沒有更多的內存來處理處理程序需要的任何分配(用於構建異常字符串,回溯等的臨時變量)。 –
拋出的異常究竟在哪裏? Numbers.java:153也許是捕獲的內部線? (我認爲這幾乎是這種情況發生的唯一可能的方式。) –