2010-03-23 69 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說話問他們發生了什麼事。