我们的生产系统陷入了无限循环的full gc和内存下降,仅在2分钟内就从8 GB降至1 MB。
在获取堆转储后,它告诉我有一个java.lang.Object数组([Ljava.lang.Object),其中包含数百万个具有相同字符串的java.lang.String对象,占用了99%的堆。
但是它没有告诉我哪个类引用了这个数组,以便我可以在代码中修复它。
我使用JDK 6上的jmap工具进行了堆转储,并使用了JProfiler、NetBeans、SAP Memory Analyzer和IBM Memory Analyzer,但这些工具都没有告诉我是什么原因导致了这个巨大的对象数组?像是哪个类引用了它或包含了它。
我需要使用不同的配置获取不同的转储来获取这些信息吗?还是有其他任何方法可以帮助我找到导致这个问题的罪犯类...这将会非常有帮助。
在获取堆转储后,它告诉我有一个java.lang.Object数组([Ljava.lang.Object),其中包含数百万个具有相同字符串的java.lang.String对象,占用了99%的堆。
但是它没有告诉我哪个类引用了这个数组,以便我可以在代码中修复它。
我使用JDK 6上的jmap工具进行了堆转储,并使用了JProfiler、NetBeans、SAP Memory Analyzer和IBM Memory Analyzer,但这些工具都没有告诉我是什么原因导致了这个巨大的对象数组?像是哪个类引用了它或包含了它。
我需要使用不同的配置获取不同的转储来获取这些信息吗?还是有其他任何方法可以帮助我找到导致这个问题的罪犯类...这将会非常有帮助。