2010-03-23 11 views
6

निम्नलिखित सरल कोड ढेर में java.lang.ref.WeakReference वस्तुओं के विकास reproduces अंदर वस्तुओं :मेमोरी रिसाव 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 कमांड पूर्ण जीसी को मजबूर करता है।

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 के तहत:

जावा संस्करण "1.6.0_17" जावा (टीएम) एसई रनटाइम वातावरण (निर्माण 1.6.0_17-B04) जावा हॉटस्पॉट (टीएम) सर्वर वी एम (, मिश्रित मोड का निर्माण 14.3-B01)

java.util.logging.Logger # बच्चों सरणी में ढेर लीक संदर्भ है, लेकिन सबसे शायद लो में आने वाले बदलाव gManager ने इसका कारण बना दिया।

4

मैंने इसे 1.6.0_19 पर पुन: उत्पन्न किया है।

आप इन जावा तर्क के साथ नमूना आवेदन चलाते हैं:

-Xms8m -Xmx8m -XX: MaxPermSize = 8

10 के बाद - 15 मिनट यह एक OutOfMemoryError का उत्पादन करेगा।

मैंने सूर्य के साथ एक बग रिपोर्ट दायर की है। यदि उन्हें स्वीकार कर लिया गया है तो वे मुझे उचित समय में बताएंगे।

0

सूर्य ने इस बग को अपने ट्रैकर में स्वीकार कर लिया है, लेकिन किसी कारण से यह उनकी वेबसाइट पर दिखाई नहीं दे रहा है, इसलिए मैं यहां एक लिंक पोस्ट नहीं कर सकता (अभी तक)। अभी उनसे पूछने के लिए सूर्य से बात कर रहा था कि क्या हुआ।

5

1.6.0_29 में फिक्स्ड: http://www.oracle.com/technetwork/java/javase/6u29-relnotes-507960.html?ssSourceSiteId=ocomen

1.6.0_29 पर उल्लेख नहीं है बग पेज स्वयं (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6942989), इसलिए मैंने सोचा कि लिंक को पोस्ट करना उपयोगी होगा, इसलिए तथ्य यह तय किया जा सकता है कि यह तय किया जा सकता है।