RFR: 8277072: ObjectStreamClass caches keep ClassLoaders alive
Roman Kennke
rkennke at openjdk.java.net
Mon Nov 15 17:19:55 UTC 2021
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
- [ ] tier3
- [ ] tier4
-------------
Commit messages:
- Fix indentation of new testcase
- 8277072: ObjectStreamClass caches keep ClassLoaders alive
Changes: https://git.openjdk.java.net/jdk/pull/6375/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=6375&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8277072
Stats: 112 lines in 2 files changed: 107 ins; 1 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
More information about the core-libs-dev
mailing list