2010-03-23 104 views
6

下面的简单的代码重新java.lang.ref.WeakReference对象的生长在堆内的对象:内存泄漏JDK类

[email protected]:~> jmap -d64 -histo:live 29201|grep WeakReference 
8: 22493 1079664 java.lang.ref.WeakReference 
31: 1 32144 [Ljava.lang.ref.WeakReference; 
106: 17 952 

com.sun.jmx.mbeanserver.WeakIdentityHashMap$IdentityWeakReference 
[email protected]:~> jmap -d64 -histo:live 29201|grep WeakReference 
8: 23191 1113168 java.lang.ref.WeakReference 
31: 1 32144 [Ljava.lang.ref.WeakReference; 
103: 17 952 

com.sun.jmx.mbeanserver.WeakIdentityHashMap$IdentityWeakReference 
[email protected]:~> jmap -d64 -histo:live 29201|grep WeakReference 
8: 23804 1142592 java.lang.ref.WeakReference 
31: 1 32144 [Ljava.lang.ref.WeakReference; 
103: 17 952 com.sun.jmx.mbeanserver.WeakIdentityHashMap$IdentityWeakReference 

请注意,jmap命令强制FullGC。

JVM settings: 
export JVM_OPT="\ 
-d64 \ 
-Xms200m -Xmx200m \ 
-XX:MaxNewSize=64m \ 
-XX:NewSize=64m \ 
-XX:+UseParNewGC \ 
-XX:+UseConcMarkSweepGC \ 
-XX:MaxTenuringThreshold=10 \ 
-XX:SurvivorRatio=2 \ 
-XX:CMSInitiatingOccupancyFraction=60 \ 
-XX:+UseCMSInitiatingOccupancyOnly \ 
-XX:+CMSParallelRemarkEnabled \ 
-XX:+DisableExplicitGC \ 
-XX:+CMSClassUnloadingEnabled \ 
-XX:+PrintGCTimeStamps \ 
-XX:+PrintGCDetails \ 
-XX:+PrintTenuringDistribution \ 
-XX:+PrintGCApplicationConcurrentTime \ 
-XX:+PrintGCApplicationStoppedTime \ 
-XX:+PrintGCApplicationStoppedTime \ 
-XX:+PrintClassHistogram \ 
-XX:+ParallelRefProcEnabled \ 
-XX:SoftRefLRUPolicyMSPerMB=1 \ 
-verbose:gc \ 
-Xloggc:$GCLOGFILE" 

java version "1.6.0_18" 
Java(TM) SE Runtime Environment (build 1.6.0_18-b07) 
Java HotSpot(TM) Server VM (build 16.0-b13, mixed mode) 

Solaris 10/Sun Fire(TM) T1000 

回答

0

JDK 1.6.0_19和1.6.0_20下确认,不存在下1.6.0_17:

Java版本 “1.6.0_17” 的Java(TM)SE运行时环境(构建1.6.0_17-b04) Java HotSpot™服务器虚拟机(内部版本14.3-b01,混合模式)

参考文献泄漏在java.util.logging.Logger堆积#尽管最有可能改变Lo gManager引起了这一点。

4

我已经在1.6.0_19转载此。

如果您用这些Java参数示例应用程序:

-Xms8m -Xmx8m -XX:MaxPermSize参数=8米

10后 - 10分钟就会产生一个OutOfMemoryError。

我已经申请与Sun的bug报告他们会在适当的时候让我知道它是否被接受。

0

Sun公司已经接受了他们的跟踪这个bug,但由于某种原因,其没有出现在他们的网站上,所以我不能在这里张贴一个链接(还)。现在跟Sun说话问他们发生了什么事。