我的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