|
|
1
8
预测内存不足错误我很惊讶在其他帖子中没有提到这一点,但是你可以使用 ManagementFactory 在Java5/6中获取大量内存使用信息。 |
|
|
2
5
|
|
|
3
3
大多数StackOverflow错误都来自错误的递归。不幸的是,确定递归是否会停止的问题通常是不可判定的(这是CS中的一个核心概念)。但是,在某些情况下,您可能会收到警告,例如,如果您在无参数的情况下递归调用函数,某些IDE会让您知道。 |
|
|
4
2
|
|
|
5
1
通常记忆的使用很难预测。 无限回归的堆栈溢出通常在写/调试周期中出现。 更难发现的是诸如大型保存的集合、缓存等方面的内存问题。正如已经指出的,您可以检查运行时空闲和最大内存,但要小心,因为它们的含义并不明显——“free”在这里表示“free now”,例如,如果您运行完整的gc,您可能会得到更多。不幸的是,如果不运行System.gc(),就无法获得“完全可能的空闲,包括垃圾回收”,这在生产应用程序上不是一件好事(在生产应用程序中,首先可能会有足够大的数据集导致问题),因为整个JVM将突然停止几秒钟请注意,即使System.gc()也不能保证“立即”运行,但我的经验是,每当我使用它时,它都会运行。 通过使用-verbose:gc、-XX:+printgtimestamps和-XX:+PrintGCDetails(更多详细信息)启动java,可以从运行的jvm打印gc活动 here |
|
6
1
你可以做的一件有用的事情就是使用
|
|
|
7
1
这个 MemoryMXBean 如果内存达到某个阈值,则可以发出通知。 |
|
|
8
0
|
|
|
9
0
通过创建一个Throwable对象并查询其getStackTrace()方法,您可以发现很多关于递归深度的信息。但这样做很昂贵。 如果您真的有一个可能引发StackOverflower错误或OutOfMemoryError的方法,为什么不插入try catch块并捕获这些错误呢?它们可以像检查异常一样被捕获和处理。 |
|
|
10
0
要了解当前深度,通常需要:
很难知道它将发生的深度。有几个因素:
运行几次。还可以尝试添加虚拟变量。可以看出,即使相同的代码也可能在不同的深度停止,添加更多的变量会导致代码提前结束。所以是的,这几乎是不可预测的。
对于OutOfMemoryError,有-Xmx选项 |
|
11
0
使用
|
|
|
user29759326 · 如何返回递归函数中的最后一个值? 8 月前 |
|
|
malife89 · 将java中的字符串读取为正确的日期格式 8 月前 |
|
|
Tim · 在java中,有没有更快的方法将字节数组写入文件? 8 月前 |
|
|
rudraraj · java中未声明最终变量 8 月前 |
|
|
Bala Ji · 以下BFS的实施效率如何? 8 月前 |