JDK类中java.lang.ref.WeakReference对象的内存泄漏

前端之家收集整理的这篇文章主要介绍了JDK类中java.lang.ref.WeakReference对象的内存泄漏前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
以下简单代码再现了堆中 java.lang.ref.WeakReference对象的增长:
  1. public static void main(String[] args) throws Exception {
  2.  
  3. while (true) {
  4. java.util.logging.Logger.getAnonymousLogger();
  5. Thread.sleep(1);
  6. }
  7. }

以下是几秒间隔内jmap命令的输出

  1. user@t1007:~> jmap -d64 -histo:live 29201|grep WeakReference
  2. 8: 22493 1079664 java.lang.ref.WeakReference
  3. 31: 1 32144 [Ljava.lang.ref.WeakReference;
  4. 106: 17 952
  5.  
  6. com.sun.jmx.mbeanserver.WeakIdentityHashMap$IdentityWeakReference
  7. user@t1007:~> jmap -d64 -histo:live 29201|grep WeakReference
  8. 8: 23191 1113168 java.lang.ref.WeakReference
  9. 31: 1 32144 [Ljava.lang.ref.WeakReference;
  10. 103: 17 952
  11.  
  12. com.sun.jmx.mbeanserver.WeakIdentityHashMap$IdentityWeakReference
  13. user@t1007:~> jmap -d64 -histo:live 29201|grep WeakReference
  14. 8: 23804 1142592 java.lang.ref.WeakReference
  15. 31: 1 32144 [Ljava.lang.ref.WeakReference;
  16. 103: 17 952 com.sun.jmx.mbeanserver.WeakIdentityHashMap$IdentityWeakReference

请注意,jmap命令强制使用FullGC.

  1. JVM settings:
  2. export JVM_OPT="\
  3. -d64 \
  4. -Xms200m -Xmx200m \
  5. -XX:MaxNewSize=64m \
  6. -XX:NewSize=64m \
  7. -XX:+UseParNewGC \
  8. -XX:+UseConcMarkSweepGC \
  9. -XX:MaxTenuringThreshold=10 \
  10. -XX:SurvivorRatio=2 \
  11. -XX:CMSInitiatingOccupancyFraction=60 \
  12. -XX:+UseCMSInitiatingOccupancyOnly \
  13. -XX:+CMSParallelRemarkEnabled \
  14. -XX:+DisableExplicitGC \
  15. -XX:+CMSClassUnloadingEnabled \
  16. -XX:+PrintGCTimeStamps \
  17. -XX:+PrintGCDetails \
  18. -XX:+PrintTenuringDistribution \
  19. -XX:+PrintGCApplicationConcurrentTime \
  20. -XX:+PrintGCApplicationStoppedTime \
  21. -XX:+PrintGCApplicationStoppedTime \
  22. -XX:+PrintClassHistogram \
  23. -XX:+ParallelRefProcEnabled \
  24. -XX:SoftRefLRUPolicyMSPerMB=1 \
  25. -verbose:gc \
  26. -Xloggc:$GCLOGFILE"
  1. java version "1.6.0_18"
  2. Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
  3. Java HotSpot(TM) Server VM (build 16.0-b13,mixed mode)
  4.  
  5. Solaris 10/Sun Fire(TM) T1000

解决方法

已在1.6.0_29: http://www.oracle.com/technetwork/java/javase/6u29-relnotes-507960.html?ssSourceSiteId=ocomen中修复

错误页面本身(http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6942989)上没有提到1.6.0_29,所以我认为在那里发布链接是有用的,所以修复它的事实是可以发现的.

猜你在找的Java相关文章