RFR: 8370044: TraceBytecodes shouldn't break up lines [v3]
duke
duke at openjdk.org
Tue Feb 24 08:21:10 UTC 2026
On Mon, 23 Feb 2026 09:13:45 GMT, Paul Hübner <phubner at openjdk.org> wrote:
>> Hi all,
>>
>> This patch addresses bytecodes being torn/mangled when printing concurrently (i.e., tracing the bytecodes of concurrently executing threads). Taking `invokeinterface` on `foo` as an example, the output could look something like the following two, ranging from mangled but legible to completely illegible:
>>
>> jint[27651] [27395] 696080 64 invokeinterface, 116 <CoherentBytecodeTraceTest$Strategy.foo(I)V>
>>
>>
>> [43267] 696692 64 invokeinterface
>> )
>> [33283] [27395] [27907] 696694 29 fast_agetfield 116 <CoherentBytecodeTraceTest$Strategy.foo(I)V>
>>
>>
>> The solution is to buffer each bytecode print into a `stringStream` before giving it to the tty. This avoids having to take a tty lock. With this solution, the print looks as follows (note: different occurrence so surrounding bytecodes differ):
>>
>> [25347] 685730 61 iconst_1
>> [25091] 685717 64 invokeinterface 190 <CoherentBytecodeTraceTest$Strategy.foo(I)V>
>> [24579] 685732 20 invokestatic 125 <java/util/concurrent/ConcurrentHashMap.spread(I)I>
>> [24579] 685734 23 istore #4
>>
>>
>> I introduce a test case that finds `<CoherentBytecodeTraceTest$Strategy.foo(I)V>` and ensures the bytecode preceding it is correct. This reliably failed every time previously, and does not fail after my change.
>>
>> Parsing the code, I noticed that bytecode printing takes a parameter `bool buffer = true` which internally buffer to a `stringStream` before flushing to the provided `outputStream`. There were numerous places where the calling code was performing buffering itself without passing `buffer = false`, effectively double buffering. This has been addressed.
>>
>> Testing: tiers 1-4. on Linux (x64, AArch64), macOS (x64, AArch64), Windows (x64).
>
> Paul Hübner has updated the pull request incrementally with two additional commits since the last revision:
>
> - David review comments.
> - Johan and Chen review comments.
@Arraying
Your change (at version a7f2eca4dbe75d1f6ebabb15edd850a71911db30) is now ready to be sponsored by a Committer.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/29842#issuecomment-3949969045
More information about the hotspot-dev
mailing list