1

我正在运行一个应用程序,该应用程序具有 4 gigs 的最大堆大小-Xms4096m -Xmx4096m -Xmn1024m,GC 配置为-XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=50,GC 间隔为Dsun.rmi.dgc.server.gcInterval=43200000 -Dsun.rmi.dgc.client.gcInterval=43200000

突然,我的应用程序出现内存不足异常,我在同一场合进行了线程转储和堆转储。在分析线程转储时,由于为 hashMap 和 arrayList 创建了一些值,线程被卡住了。ByteArrayOutStream 在其中一个线程中创建了锁。

在 Eclipse 内存分析器工具中的 Analyzing Heap dump 中,它清楚地表明 bytearray 对象已经占用了将近 1 Gigs 的 Heap。从 GCViewer 显示它在几分之一秒内有一个峰值。我不知道为什么突然字节数组对象使用了 1 Gigs 的空间。有人可以帮我缩小罪魁祸首。

-- 应用服务器 - Weblogic 12c

4

1 回答 1

1

在 Eclipse 内存分析器工具中的 Analyzing Heap dump 中,它清楚地表明 bytearray 对象已经占用了将近 1 Gigs 的 Heap。

使用 MAT 的 GC 根特性的最短路径来查看哪些引用保留了该字节数组。

于 2016-10-12T07:57:44.230 回答