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

Thomas Stuefe stuefe at openjdk.java.net
Thu May 6 06:24:58 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.

Additionally, patch adds gtests

*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

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

Commit messages:
 - start
 - cherry-picked JDK-8266536
 - harfbuzz-buildfix

Changes: https://git.openjdk.java.net/jdk/pull/3874/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=3874&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8266503
  Stats: 153 lines in 8 files changed: 57 ins; 36 del; 60 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