> The caches in ObjectStreamClass basically map WeakReference<Class> to > SoftReference<ObjectStreamClass>, where the ObjectStreamClass also references > the same Class. That means that the cache entry, and thus the class and its > class-loader, will not get reclaimed, unless the GC determines that memory > pressure is very high. > > However, this seems bogus, because that unnecessarily keeps ClassLoaders and > all its classes alive much longer than necessary: as soon as a ClassLoader > (and all its classes) become unreachable, there is no point in retaining the > stuff in OSC's caches. > > The proposed change is to use WeakReference instead of SoftReference for the > values in caches. > > Testing: > - [x] tier1 > - [x] tier2 > - [x] tier3 > - [ ] tier4
Roman Kennke has updated the pull request incrementally with one additional commit since the last revision: Fix cast; add testcase to cover memory pressure ------------- Changes: - all: https://git.openjdk.java.net/jdk/pull/6375/files - new: https://git.openjdk.java.net/jdk/pull/6375/files/57428e0f..e6e34cea Webrevs: - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=6375&range=06 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=6375&range=05-06 Stats: 22 lines in 2 files changed: 18 ins; 0 del; 4 mod Patch: https://git.openjdk.java.net/jdk/pull/6375.diff Fetch: git fetch https://git.openjdk.java.net/jdk pull/6375/head:pull/6375 PR: https://git.openjdk.java.net/jdk/pull/6375