我的Java程序突然退出,沒有任何異常拋出或程序正常完成時出現問題。Java虛擬機突然退出沒有明顯的原因
我正在寫一個程序來解決Project Euler的14th problem。這是我的了:
private static final int INITIAL_CACHE_SIZE = 30000;
private static Map<Long, Integer> cache = new HashMap<Long, Integer>(INITIAL_CACHE_SIZE);
public void main(String... args) {
long number = 0;
int maxSize = 0;
for (long i = 1; i <= TARGET; i++) {
int size = size(i);
if (size > maxSize) {
maxSize = size;
number = i;
}
}
}
private static int size(long i) {
if (i == 1L) {
return 1;
}
final int size = size(process(i)) + 1;
return size;
}
private static long process(long n) {
return n % 2 == 0 ? n/2 : 3*n + 1;
}
這運行正常,並且使用的1 000 000
的目標,我想通過增加高速緩存優化時,約5秒鐘正確完成,所以我改變了大小的方法是:
private static int size(long i) {
if (i == 1L) {
return 1;
}
if (cache.containsKey(i)) {
return cache.get(i);
}
final int size = size(process(i)) + 1;
cache.put(i, size);
return size;
}
現在,當我運行它,它只是停止(進程退出)當我每一次555144.相同的號碼。沒有異常,錯誤,Java VM崩潰或任何事情被拋出。
更改緩存的大小似乎不具有任何效力,要麼,怎麼可能緩存 出臺導致這個錯誤?
如果我執行高速緩存的大小是不只是初步的,但永久性像這樣:
if (i < CACHE_SIZE) {
cache.put(i, size);
}
的錯誤不再出現。 編輯:當我將緩存大小設置爲2M時,該錯誤再次開始顯示。
任何人都可以重現這一點,甚至可以提供一個建議,爲什麼會發生?
你在運行什麼操作系統? – 2009-08-27 21:14:21
我在Windows Vista Business和JDK 1.6.0_03上運行 – Jorn 2009-08-27 21:16:40
您可能想要嘗試更新jdk並查看是否獲得相同的行爲。他們現在正在更新16到1.6。 – digitaljoel 2009-08-27 21:26:32