On Fri, 6 Dec 2024 16:30:47 GMT, Quan Anh Mai <qa...@openjdk.org> wrote:
> Hi, > > This patch improves the performance of a typical `Arena::allocate` in several > ways: > > - Delay the creation of the NativeMemorySegmentImpl. This avoids the merge of > the instance with the one obtained from the call in the uncommon path, > increasing the chance the object being scalar replaced. > - Split the allocation of over-aligned memory to a slow-path method. > - Align the memory to 8 bytes, allowing faster zeroing. > - Use a dedicated method to zero the just-allocated native memory, reduce > code size and make it more straightforward. > - Make `VM.pageAlignDirectMemory` a `Boolean` instead of a `boolean` so that > `false` value can be constant folded. > > Please take a look and leave your reviews, thanks a lot. src/java.base/share/classes/jdk/internal/foreign/ArenaImpl.java line 53: > 51: Utils.checkAllocationSizeAndAlign(byteSize, byteAlignment); > 52: long address = SegmentFactories.allocateNative(byteSize, > byteAlignment, session, shouldReserveMemory, false); > 53: return new NativeMemorySegmentImpl(address, byteSize, false, > session); Could you move this constructor call (and the one below) to `allocateNative`? All segment construction calls are currently in `SegmentFactories` as a measure to avoid bootstrap cycles, which we had problems with in the past. src/java.base/share/classes/jdk/internal/foreign/SegmentFactories.java line 213: > 211: > 212: @DontInline > 213: private static long allocateNativeOveraligned(long byteSize, long > byteAlignment, MemorySessionImpl sessionImpl, This would always make the session escape in the case of over aligned allocation. Maybe it's possible to move the call to `addCleanupIfFail` to `allocateNative` instead? (that seems to be the only use of `sessionImpl` here). test/micro/org/openjdk/bench/java/lang/foreign/AllocTest.java line 87: > 85: } > 86: > 87: public static class CallocArena implements Arena { The following changes seem to be here to support 32-bit platforms? Could you please do that in a separate PR? ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/22610#discussion_r1873822362 PR Review Comment: https://git.openjdk.org/jdk/pull/22610#discussion_r1873826657 PR Review Comment: https://git.openjdk.org/jdk/pull/22610#discussion_r1873831139