RFR: 8277072: ObjectStreamClass caches keep ClassLoaders alive [v3]
Roman Kennke
rkennke at openjdk.java.net
Tue Nov 30 11:25:48 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
> - [x] tier3
> - [ ] tier4
Roman Kennke has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains six additional commits since the last revision:
- Merge remote-tracking branch 'jdk-plevart/JDK-8277072-peter' into JDK-8277072
- Use ClassValue to solve JDK-8277072
- Use ForceGC instead of System.gc()
- Convert test to testng
- Fix indentation of new testcase
- 8277072: ObjectStreamClass caches keep ClassLoaders alive
-------------
Changes:
- all: https://git.openjdk.java.net/jdk/pull/6375/files
- new: https://git.openjdk.java.net/jdk/pull/6375/files/6f099c9c..2ed745b3
Webrevs:
- full: https://webrevs.openjdk.java.net/?repo=jdk&pr=6375&range=02
- incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=6375&range=01-02
Stats: 943784 lines in 2433 files changed: 495164 ins; 434236 del; 14384 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