RFR: 8081833: Clean up JVMFlag getter/setter code [v3]

Ioi Lam iklam at openjdk.java.net
Tue Sep 22 06:08:05 UTC 2020


> This is a follow to [JDK-8243208 Clean up JVMFlag implementation](https://bugs.openjdk.java.net/browse/JDK-8243208).
> 
> I try to use templates and inheritance (and a bit of macros) to get rid of the large amount of duplicated code in the
> JVMFlag getters/setters.
> Stefan Karlsson and I have tried this several times already, but I think the current attempt probably has the least
> amount of hacks and most functionality:
> - Type safety is enforced up to the point of loading/storing `JVMFlag::_addr`, without any unchecked typecasts.
> - Runtime type checking is implemented by the `JVM_FLAG_TYPE(t)` macro (see jvmFlagAccess.hpp), by passing along an
>   integer (`JVMFlag::TYPE_int`, etc). This is more efficient than previous attempts that passed along a function pointer
>   (see http://cr.openjdk.java.net/~stefank/8081833/webrev.04/)
> - The old `JVMFlag::xxxAtPut` functions were undocumented. There are actually two groups that have different usage. I
>   added documentation in jvmFlagAccess.hpp to explain this.
> - I got rid of the `JVMFlagEx` class and moved the code into `JVMFlag`. This is possible with C++11 which allows forward
>   declaration of `enum JVMFlagsEnum : int;`
> - I changed `JVMFlag::_type` from a string into an enum. I am surprised this had lasted for over 20 years.
> - I also changed `JVMFlag` from a struct into a class and made some fields private. I probably will do more cleanup in a
>   separate RFE.
> 
> Please start with jvmFlagAccess.hpp, jvmFlagAccess.hpp and then globals_extension.hpp.
> 
> Probably not everyone is in love with the `JVM_FLAG_TYPE(t)` macro. I'll be happy to try out alternatives.

Ioi Lam 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 three additional commits since the last
revision:

 - Merge branch 'master' into 8081833-clean-up-jvmflag-get-set
 - Updated according to feedback from Gerard and Coleen
 - 8081833: Clean up JVMFlag getter/setter code

-------------

Changes:
  - all: https://git.openjdk.java.net/jdk/pull/163/files
  - new: https://git.openjdk.java.net/jdk/pull/163/files/696a9412..2d9d16a1

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=163&range=02
 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=163&range=01-02

  Stats: 9075 lines in 349 files changed: 5276 ins; 2932 del; 867 mod
  Patch: https://git.openjdk.java.net/jdk/pull/163.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/163/head:pull/163

PR: https://git.openjdk.java.net/jdk/pull/163


More information about the hotspot-dev mailing list