JDK-6799277 : Memory Leak in com.sun.deploy.cache.MemoryCache (deploy.jar)
  • Type: Bug
  • Component: deploy
  • Sub-Component: webstart
  • Affected Version: 6u10
  • Priority: P3
  • Status: Closed
  • Resolution: Duplicate
  • OS: windows_xp
  • CPU: x86
  • Submitted: 2009-01-29
  • Updated: 2010-04-04
  • Resolved: 2009-02-16
Related Reports
Duplicate :  
Description
FULL PRODUCT VERSION :
java version "1.6.0_10"
Java(TM) SE Runtime Environment (build 1.6.0_10-b33)
Java HotSpot(TM) Client VM (build 11.0-b15, mixed mode, sharing)

ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows XP [Wersja 5.1.2600]

EXTRA RELEVANT SYSTEM CONFIGURATION :
awt.toolkit=sun.awt.windows.WToolkit
deployment.browser.path=C:\Program Files\Internet Explorer\IEXPLORE.EXE
deployment.browser.vm.iexplorer=true
deployment.browser.vm.mozilla=true
deployment.cache.enabled=true
deployment.cache.jarcompression=0
deployment.cache.max.size=-1
deployment.capture.mime.types=false
deployment.console.startup.mode=SHOW
deployment.control.panel.log=false
deployment.javapi.cache.update=false
deployment.javapi.lifecycle.exception=true
deployment.javapi.log.filename=
deployment.javapi.runtime.type=0
deployment.javapi.trace.filename=
deployment.javaws.associations=ASK_USER
deployment.javaws.autodownload=ALWAYS
deployment.javaws.cache.update=false
deployment.javaws.home.jnlp.url=http://java.sun.com/products/javawebstart
deployment.javaws.installURL=http://java.sun.com/products/autodl/j2se
deployment.javaws.logFileName=
deployment.javaws.muffin.max=256
deployment.javaws.shortcut=ASK_IF_HINTED
deployment.javaws.splash.index=C:\Documents and Settings\mwasak\Dane aplikacji\Sun\Java\Deployment\cache\6.0\splash\splash.xml
deployment.javaws.ssv.enabled=true
deployment.javaws.traceFileName=
deployment.javaws.uninstall.shortcut=false
deployment.javaws.update.timeout=1500
deployment.javaws.viewer.bounds=280,98,720,360
deployment.jpi.mode.new=true
deployment.log=true
deployment.max.output.file.size=10
deployment.max.output.files=5
deployment.mime.types.use.default=true
deployment.proxy.bypass.local=false
deployment.proxy.override.hosts=
deployment.proxy.same=false
deployment.proxy.type=3
deployment.repository.askdownloaddialog.show=true
deployment.repository.enabled=true
deployment.security.SSLv2Hello=false
deployment.security.SSLv3=true
deployment.security.TLSv1=true
deployment.security.askgrantdialog.notinca=true
deployment.security.askgrantdialog.show=true
deployment.security.authenticator=true
deployment.security.browser.keystore.use=true
deployment.security.clientauth.keystore.auto=true
deployment.security.expired.warning=true
deployment.security.https.warning.show=false
deployment.security.jsse.hostmismatch.warning=true
deployment.security.notinca.warning=true
deployment.security.pretrust.list=true
deployment.security.sandbox.awtwarningwindow=true
deployment.security.sandbox.jnlp.enhanced=true
deployment.security.trusted.policy=
deployment.security.validation.crl=false
deployment.security.validation.ocsp=false
deployment.system.security.cacerts=C:\Java\jre6\lib\security\cacerts
deployment.system.security.jssecacerts=C:\Java\jre6\lib\security\jssecacerts
deployment.system.security.oldcacerts=C:\Java\jre6\lib\security\cacerts
deployment.system.security.oldjssecacerts=C:\Java\jre6\lib\security\jssecacerts
deployment.system.security.trusted.certs=C:\Java\jre6\lib\security\trusted.certs
deployment.system.security.trusted.clientauthcerts=C:\Java\jre6\lib\security\trusted.clientcerts
deployment.system.security.trusted.jssecerts=C:\Java\jre6\lib\security\trusted.jssecerts
deployment.system.security.trusted.publishers=C:\Java\jre6\lib\security\trusted.publishers
deployment.system.tray.icon=true
deployment.trace=true
deployment.update.mime.types=true
java.specification.name=Java Platform API Specification
java.specification.vendor=Sun Microsystems Inc.
java.specification.version=1.6
java.vendor=Sun Microsystems Inc.
java.vendor.url=http://java.sun.com/
java.vendor.url.bug=http://java.sun.com/cgi-bin/bugreport.cgi
java.version=1.6.0_10
java.vm.info=mixed mode, sharing
java.vm.name=Java HotSpot(TM) Client VM
java.vm.specification.name=Java Virtual Machine Specification
java.vm.specification.vendor=Sun Microsystems Inc.
java.vm.specification.version=1.0
java.vm.vendor=Sun Microsystems Inc.
java.vm.version=11.0-b15

javawebstart.version=javaws-1.6.0_10
jnlpx.home=C:\Java\jre6\bin
jnlpx.jvm=C:\Java\jre6\bin\javaw.exe
jnlpx.remove=false
jnlpx.splashport=4463
line.separator=\r\n
os.arch=x86
os.name=Windows XP
os.version=5.1
path.separator=;
sun.arch.data.model=32
sun.boot.class.path=C:\Java\jre6\lib\resources.jar;C:\Java\jre6\lib\rt.jar;C:\Java\jre6\lib\sunrsasign.jar;C:\Java\jre6\lib\jsse.jar;C:\Java\jre6\lib\jce.jar;C:\Java\jre6\lib\charsets.jar;C:\Java\jre6\classes;C:\Java\jre6\lib\javaws.jar;C:\Java\jre6\lib\deploy.jar
sun.boot.library.path=C:\Java\jre6\bin
sun.cpu.endian=little
sun.cpu.isalist=pentium_pro+mmx pentium_pro pentium+mmx pentium i486 i386 i86
sun.desktop=windows
sun.io.unicode.encoding=UnicodeLittle
sun.java.launcher=SUN_STANDARD
sun.jnu.encoding=Cp1250
sun.management.compiler=HotSpot Client Compiler
sun.os.patch.level=Dodatek Service Pack 3

A DESCRIPTION OF THE PROBLEM :
I have discovered only part of a problem.

I have a Java Web Start app which has OOME after about 30min working - I checked it using jvisualvm.exe and discovered that  during this time there is increase count for class com\sun\deploy\cache\MemoryCache$CachedResourceReference.class from about 7000 to about 225000, because this class has String fields it also triggered increase in instances of String class. My application is using castor and xerces - I see that a lot of CachedResourceReference  (about 90%-95%) has url field with castor-1.2.jar and xercesImpl-2.8.1.jar values.
I don't know what mechanism is adding this instances to com.sun.deploy.cache.MemoryCache but I can see that com.sun.deploy.cache.MemoryCache$LoadedResourceCleanupThread which is responsible for cache cleaning is wake up - but I think that it cant't remove instance from  com.sun.deploy.cache.MemoryCache$LoadedResourceReference.resourceRefs using com.sun.deploy.cache.MemoryCache$LoadedResourceReference.deregisterReference because of resourceRefs is HashSet and CachedResourceReference which is used in cleaning thread as parameter to deregisterReference  don't have hash and equals methods implemented - so CachedResourceReference  still grows because is not removed.


REPRODUCIBILITY :
This bug can be reproduced always.

Comments
EVALUATION Closing as duplicate of 6786318. Please try 6u12 and if it is still reproducible - please reopen and provide more details (e.g. heap dump, ideally testcase).
16-02-2009