RFR: JDK-8266503: [UL] Make Decorations safely copy-able and reduce their size [v3]

Thomas Stuefe stuefe at openjdk.java.net
Fri May 7 06:45:20 UTC 2021


> This patch reduces the size of UL `LogDecorations` by about 85% (from 368 -> 56 bytes on Linux x64). This matters in the context of asynchronous logging in UL where we plan to keep a buffer containing log messages, including decorations, for asynchronous printing.
> 
> As a side effect, it makes the LogDecorations object safe to copy with trivial assignment constructors and operators (which it had not been before).
> 
> As another side effect, the 256-char-for-all-decorators limit has been removed with this patch.
> 
> What the patch does:
> 
> In LogDecorations, we resolve the values of the given decorators ("uptime", "tid" etc) and print them in human-readable format. Before this patch, the class LogDecorations stored the printed decorators in an internal (limited, fixed-sized) buffer. This is inefficient since this takes much more memory than storing the binary data before printing them.
> 
> So this patch separates the decorator value resolving from the printing. It stores the resolved values in binary form and only prints them when needed. Since a decorations object is only printed once this is fine. No need to cache the formatted text.
> 
> *Please Note that this patch includes the fix for JDK-8266536: "Provide a variant of os::iso8601_time which works with arbitrary timestamps" which is in a separate PR (https://github.com/openjdk/jdk/pull/3869) - so please ignore all the iso6801 stuff. It also contains a fix for the broken harfbuzz build.*
> 
> Testing:
> - gtests, manually
> - jtreg runtime/logging, manually
> - SAP nightlies ran fine, but since then the tests changed, will run them again tonight

Thomas Stuefe has updated the pull request incrementally with two additional commits since the last revision:

 - Xins debug check proposal
 - LogTagSet::describe_tagsets can use the stream interface of label and avoid copying

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

Changes:
  - all: https://git.openjdk.java.net/jdk/pull/3874/files
  - new: https://git.openjdk.java.net/jdk/pull/3874/files/3a357557..9bffd4f8

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

  Stats: 10 lines in 3 files changed: 7 ins; 0 del; 3 mod
  Patch: https://git.openjdk.java.net/jdk/pull/3874.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/3874/head:pull/3874

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


More information about the hotspot-runtime-dev mailing list