This is an automated email from the ASF dual-hosted git repository.
gortiz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git
The following commit(s) were added to refs/heads/master by this push:
new 3d4905ac8ef Reduce reflection overhead of
ByteBufferUtil::newDirectByteBuffer (#15878)
3d4905ac8ef is described below
commit 3d4905ac8ef48aa9043d0166506a2ea6776d5505
Author: Dino Occhialini <[email protected]>
AuthorDate: Tue Jun 17 01:35:40 2025 -0700
Reduce reflection overhead of ByteBufferUtil::newDirectByteBuffer (#15878)
---
.../pinot/segment/spi/memory/ByteBufferUtil.java | 35 +++++++++++++++-------
1 file changed, 24 insertions(+), 11 deletions(-)
diff --git
a/pinot-segment-spi/src/main/java/org/apache/pinot/segment/spi/memory/ByteBufferUtil.java
b/pinot-segment-spi/src/main/java/org/apache/pinot/segment/spi/memory/ByteBufferUtil.java
index 6e9bbe420a6..39d579c11d3 100644
---
a/pinot-segment-spi/src/main/java/org/apache/pinot/segment/spi/memory/ByteBufferUtil.java
+++
b/pinot-segment-spi/src/main/java/org/apache/pinot/segment/spi/memory/ByteBufferUtil.java
@@ -19,6 +19,9 @@
package org.apache.pinot.segment.spi.memory;
import com.google.common.collect.Lists;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
import java.lang.reflect.Constructor;
import java.nio.ByteBuffer;
import java.util.List;
@@ -42,11 +45,14 @@ public class ByteBufferUtil {
Constructor<? extends ByteBuffer> dbbCC =
(Constructor<? extends ByteBuffer>)
Class.forName("java.nio.DirectByteBuffer")
.getDeclaredConstructor(Long.TYPE, Integer.TYPE, Object.class,
memorySegmentProxyClass);
+ dbbCC.setAccessible(true);
+ MethodHandle dbbCCMh = MethodHandles.lookup()
+ .unreflectConstructor(dbbCC)
+ .asType(MethodType.methodType(ByteBuffer.class, long.class,
int.class, Object.class, Object.class));
return (addr, size, att) -> {
- dbbCC.setAccessible(true);
try {
- return dbbCC.newInstance(Long.valueOf(addr),
Integer.valueOf(size), att, null);
- } catch (Exception e) {
+ return (ByteBuffer) dbbCCMh.invokeExact(addr, size, att, (Object)
null);
+ } catch (Throwable e) {
throw new IllegalStateException("Failed to create
DirectByteBuffer", e);
}
};
@@ -56,11 +62,14 @@ public class ByteBufferUtil {
Constructor<? extends ByteBuffer> dbbCC =
(Constructor<? extends ByteBuffer>)
Class.forName("java.nio.DirectByteBuffer")
.getDeclaredConstructor(Long.TYPE, Integer.TYPE, Object.class);
+ dbbCC.setAccessible(true);
+ MethodHandle dbbCCMh = MethodHandles.lookup()
+ .unreflectConstructor(dbbCC)
+ .asType(MethodType.methodType(ByteBuffer.class, long.class,
int.class, Object.class));
return (addr, size, att) -> {
- dbbCC.setAccessible(true);
try {
- return dbbCC.newInstance(Long.valueOf(addr),
Integer.valueOf(size), att);
- } catch (Exception e) {
+ return (ByteBuffer) dbbCCMh.invokeExact(addr, size, att);
+ } catch (Throwable e) {
throw new IllegalStateException("Failed to create
DirectByteBuffer", e);
}
};
@@ -70,11 +79,14 @@ public class ByteBufferUtil {
Constructor<? extends ByteBuffer> dbbCC =
(Constructor<? extends ByteBuffer>)
Class.forName("java.nio.DirectByteBuffer")
.getDeclaredConstructor(Long.TYPE, Integer.TYPE);
+ dbbCC.setAccessible(true);
+ MethodHandle dbbCCMh = MethodHandles.lookup()
+ .unreflectConstructor(dbbCC)
+ .asType(MethodType.methodType(ByteBuffer.class, long.class,
int.class));
return (addr, size, att) -> {
- dbbCC.setAccessible(true);
try {
- return dbbCC.newInstance(Long.valueOf(addr),
Integer.valueOf(size));
- } catch (Exception e) {
+ return (ByteBuffer) dbbCCMh.invokeExact(addr, size);
+ } catch (Throwable e) {
throw new IllegalStateException("Failed to create
DirectByteBuffer", e);
}
};
@@ -90,7 +102,7 @@ public class ByteBufferUtil {
for (CreatorSupplier supplier : _SUPPLIERS) {
try {
creator = supplier.createCreator();
- } catch (ClassNotFoundException | NoSuchMethodException e) {
+ } catch (ClassNotFoundException | NoSuchMethodException |
IllegalAccessException e) {
if (firstException == null) {
firstException = e;
}
@@ -108,7 +120,8 @@ public class ByteBufferUtil {
}
private interface CreatorSupplier {
- ByteBufferCreator createCreator() throws ClassNotFoundException,
NoSuchMethodException;
+ ByteBufferCreator createCreator()
+ throws ClassNotFoundException, NoSuchMethodException,
IllegalAccessException;
}
private interface ByteBufferCreator {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]