RFR: 8367656: Refactor Constantpool's operand array into two [v4]
Johan Sjölen
jsjolen at openjdk.org
Wed Sep 17 07:26:34 UTC 2025
> Hi,
>
> This is a refactoring of the way that we store the Bootstrap method attribute in the ConstantPool class. We used to have a single `Array<u2>` which was divided into a section of `u4` offsets and a section which was the actual data. In this refactoring we make this split more clear, by actually allocating an `Array<u4>` to store the offsets in and an `Array<u2>` to store the data in. These arrays are then put into a `BSMAttributeEntries` class, which allows us to separate out the API from that of the rest of the `ConstantPool`.
>
> We had multiple instances of the code knowing the layout of the operands array and using this to do 'clever' ways of copying and inserting data into it. See `ConstantPool::copy_operands` and `ConstantPool::resize_operands`. I felt like we could do things in a simpler way, so I added the `start_/end_extension` protocol and added the `InsertionIterator` for this. See `ClassFileParser::parse_classfile_bootstrap_methods_attribute` for how this works. I put several relevant definitions into the inline file in hopes of encouraging the compiler to optimize these appropriately.
>
> For the Java SA code, I had to add a `U4Array` class. I also had to fix the vmstructs definitions, etc.
>
> On the whole, while this code is a bit less terse, I think it's a good API improvement and the underlying implementation of splitting up the operands array is also an improvement.
>
> Testing: Oracle Tier1-Tier5 has been run succesfully multiple times. Before integration, I will merge with master and run these tiers again.
Johan Sjölen has updated the pull request incrementally with two additional commits since the last revision:
- Update src/hotspot/share/prims/jvmtiRedefineClasses.hpp
Co-authored-by: David Holmes <62092539+dholmes-ora at users.noreply.github.com>
- Update src/hotspot/share/oops/constantPool.cpp
Co-authored-by: David Holmes <62092539+dholmes-ora at users.noreply.github.com>
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/27198/files
- new: https://git.openjdk.org/jdk/pull/27198/files/ddf8e8f6..0e292522
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=27198&range=03
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=27198&range=02-03
Stats: 3 lines in 2 files changed: 0 ins; 0 del; 3 mod
Patch: https://git.openjdk.org/jdk/pull/27198.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/27198/head:pull/27198
PR: https://git.openjdk.org/jdk/pull/27198
More information about the serviceability-dev
mailing list