RFR: 8269957: facilitate alternate impls of NameTable and Name [v5]

Archie Cobbs acobbs at openjdk.org
Fri Aug 25 23:02:53 UTC 2023


> The `Name.Table` class is used by the compiler to hold unique instances of strings as `Name` objects.
> 
> In theory the `Name` superclass supports alternate implementations beyond the two existing implementations (`SharedNameTable` and `UnsharedNameTable`), but its current design presumes that strings are stored as UTF-8 byte arrays, which discourages other approaches.
> 
> The goal of this PR is to refactor things to allow for more flexibility in alternate `Name` implementations.
> 
> As a simple test case of this idea, it should be relatively simple to implement a `Name.Table` that stores `String`s in a hash table. This patch includes such an example in the new class `StringNameTable`, which can be enabled via the `-XDuseStringTable=true` command line flag.  A simple performance test with this class enabled ([JavacNameTable.java.txt](https://github.com/openjdk/jdk/files/11602852/JavacNameTable.java.txt)) shows a 17% speedup.
> 
> Changes:
> * Remove all byte-oriented methods from the `Name` and `Name.Table` API's, except for those that import/export Modified UTF-8.
> * Change the semantics of `Name.subName()` so the offset is a character offset, not a byte offset.
> * Consolidate the common UTF-8 machinery of `SharedNameTable` and `UnsharedNameTable` into a new common superclass `Utf8NameTable`.
> * Rename `Name.lastIndexOf()` -> `Name.lastIndexOfAscii()` to more accurately reflect its expected behavior.
> * Add new `StringNameTable` implementation.

Archie Cobbs has updated the pull request incrementally with two additional commits since the last revision:

 - Fix copyright year.
 - Fix 8000 table size constant which was meant to be 0x8000.

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/13282/files
  - new: https://git.openjdk.org/jdk/pull/13282/files/e386ea3e..193d0666

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=13282&range=04
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=13282&range=03-04

  Stats: 2 lines in 2 files changed: 0 ins; 0 del; 2 mod
  Patch: https://git.openjdk.org/jdk/pull/13282.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/13282/head:pull/13282

PR: https://git.openjdk.org/jdk/pull/13282


More information about the compiler-dev mailing list