我在使用 Java 的生产中经常遇到一些完整的 GC 问题,我怀疑内存是由网络库分配的,用于缓冲 TCP 请求结果。
当内存使用率很高(大约 8GB)时,我已经转储了 Java 堆。我试图用eclipse MAT分析.HPROF文件,文件大约8GB。
但是在 Eclipse MAT 中,总堆大小约为 200 MB,所以我找不到哪些对象占用了 8GB 堆内存。
由于 eclipse MAT 没有显示完整的堆转储内容,我不知道如何找到应用程序占用这么多内存的原因。
我在使用 Java 的生产中经常遇到一些完整的 GC 问题,我怀疑内存是由网络库分配的,用于缓冲 TCP 请求结果。
当内存使用率很高(大约 8GB)时,我已经转储了 Java 堆。我试图用eclipse MAT分析.HPROF文件,文件大约8GB。
但是在 Eclipse MAT 中,总堆大小约为 200 MB,所以我找不到哪些对象占用了 8GB 堆内存。
由于 eclipse MAT 没有显示完整的堆转储内容,我不知道如何找到应用程序占用这么多内存的原因。
如果你使用MAT内存分析器打开hprof转储,可能是堆的其余部分是无法访问的对象,MAT默认隐藏,见 https://stackoverflow.com/a/20405267/3484881