RFR: 8301403: Eliminate memory allocations in JVMFlag::printFlags during signal handling [v7]
Gerard Ziemski
gziemski at openjdk.org
Thu Jul 25 17:19:08 UTC 2024
> Allocating memory while handling an error should be avoided, however `JVMFlag::printFlags()` is used by crash log and it allocates memory to print flags sorted (using qsort).
>
> We avoid memory allocation by using a simple in place algorithm that uses JVMFlag 1 bit of unused data from its private `Flags` enum data member. It is O(n^2) algorithm, compared to O(n*log(n)) for qsort, however, it's called while handling an error log, so the speed here is not paramount. Also, I measured the real impact on a simple test case and I actually observed performance improvement of about x2.5 faster (2,885,973ns in place ordered printing vs 7,389,456ns for qsort). This is because we ended up having to qsort all flags when only a fraction of them actually end up being printed.
>
> Running MACH5 tests...
Gerard Ziemski 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 eight additional commits since the last revision:
- Merge remote-tracking branch 'upstream/master' into JDK-8301403
- move include
- use local stack storage for the sorting indicies
- can not use new
- switch to CHeapBitMap
- remove unused header
- change name from max to best
- do not presort to avoid memory allocation
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/20202/files
- new: https://git.openjdk.org/jdk/pull/20202/files/1954fa89..20444667
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=20202&range=06
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=20202&range=05-06
Stats: 12922 lines in 368 files changed: 9114 ins; 2112 del; 1696 mod
Patch: https://git.openjdk.org/jdk/pull/20202.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/20202/head:pull/20202
PR: https://git.openjdk.org/jdk/pull/20202
More information about the hotspot-runtime-dev
mailing list