Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 查找JVM中分配的原因_Java_Memory Management_Jvm - Fatal编程技术网

Java 查找JVM中分配的原因

Java 查找JVM中分配的原因,java,memory-management,jvm,Java,Memory Management,Jvm,最近,我在JVM中遇到了一个内存分配问题 根据GC日志和jvisulvm,我的应用程序正在创建一个数组 ... 15.587: [GC (Allocation Failure) [PSYoungGen: 8387648K->192K(8388096K)] 8413385K->25945K(16776704K), 0.0004254 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 15.592: [GC (Allocation Fa

最近,我在JVM中遇到了一个内存分配问题

根据GC日志和jvisulvm,我的应用程序正在创建一个数组

...
15.587: [GC (Allocation Failure) [PSYoungGen: 8387648K->192K(8388096K)] 8413385K->25945K(16776704K), 0.0004254 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
15.592: [GC (Allocation Failure) [PSYoungGen: 8387776K->192K(8388096K)] 8413529K->26001K(16776704K), 0.0003679 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
15.596: [GC (Allocation Failure) [PSYoungGen: 8387776K->96K(8388096K)] 8413585K->25929K(16776704K), 0.0004090 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
15.602: [GC (Allocation Failure) [PSYoungGen: 8387680K->128K(8388096K)] 8413513K->25993K(16776704K), 0.0004101 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
15.606: [GC (Allocation Failure) [PSYoungGen: 8387712K->128K(8388096K)] 8413577K->26025K(16776704K), 0.0003756 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
15.611: [GC (Allocation Failure) [PSYoungGen: 8387712K->160K(8388096K)] 8413609K->26097K(16776704K), 0.0003965 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
15.626: [GC (Allocation Failure) [PSYoungGen: 8387744K->128K(8388096K)] 8413681K->26105K(16776704K), 0.0004195 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
...

我在整个代码库中搜索了“newint[]”,只找到了两个分配,我很确定它们只运行了一次。这让我相信数组是在某个库或JRE中分配的


如何找到这些分配的根目录?

如果探查器没有为发生泄漏/分配的代码路径,请获取新的探查器。总是第一步。通过第一行,它应该能够告诉您分配
int
数组的所有代码路径。@Qix我能够得到堆转储,但由于某种原因,它只有7MB大。我相信探查器在进行转储并因此销毁int数组之前正在运行GC。这并不重要,获取分配这些int数组的代码路径(堆栈跟踪)是至关重要的。如果VisualVM不为您这样做,我会感到惊讶。在这种情况下,堆转储对您没有多大帮助;这是一个明显的内存泄漏。@Qix如果代码是用
int[]
完成的,这只是一个内存泄漏。如果代码仍在使用它,这不是泄漏,只是需要比可用内存更多的内存,在这种情况下,添加内存或更改算法是答案,而不是搜索泄漏。@Andrease好像您看到了奇怪的内存使用模式,而这是您不希望从代码中看到的(正如OP所指定的),始终将其视为泄漏进行调查,直到证明存在其他泄漏。很好的经验法则。