diff --git a/java/bom/pom.xml b/java/bom/pom.xml
index ce05f25bc6c9e..b1b99e81b4196 100644
--- a/java/bom/pom.xml
+++ b/java/bom/pom.xml
@@ -81,9 +81,9 @@ under the License.
11
- 11
- 11
- 11
+ 22
+ 22
+ 22
diff --git a/java/memory/memory-core/src/test/java/org/apache/arrow/memory/TestFFM.java b/java/memory/memory-core/src/test/java/org/apache/arrow/memory/TestFFM.java
deleted file mode 100644
index 0cd207f2a6fb5..0000000000000
--- a/java/memory/memory-core/src/test/java/org/apache/arrow/memory/TestFFM.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.arrow.memory;
-
-import java.lang.foreign.MemorySegment;
-import java.nio.ByteBuffer;
-import org.apache.arrow.memory.util.MemoryUtil;
-import org.junit.jupiter.api.Test;
-
-public class TestFFM {
-
- @Test
- public void testBufferCopyWithUnsafe() {
- ByteBuffer srcBuffer = ByteBuffer.allocateDirect(10);
- ByteBuffer destBuffer = ByteBuffer.allocateDirect(10);
-
- // Fill source buffer with data
- for (int i = 0; i < 10; i++) {
- srcBuffer.put((byte) i);
- }
-
- // Flip the buffer to prepare for reading
- srcBuffer.flip();
-
- // Get the memory addresses of the buffers
- long srcAddress = MemoryUtil.getByteBufferAddress(srcBuffer);
- long destAddress = MemoryUtil.getByteBufferAddress(destBuffer);
-
- // Copy the data from the source buffer to the destination buffer
- MemoryUtil.copyMemory(srcAddress, destAddress, 10);
- // Verify the copy
- destBuffer.flip();
- while (destBuffer.hasRemaining()) {
- System.out.println(destBuffer.get());
- }
- }
-
- @Test
- public void testBufferCopyWithFFM() {
- // Allocate two ByteBuffers
- ByteBuffer srcBuffer = ByteBuffer.allocateDirect(10);
- ByteBuffer destBuffer = ByteBuffer.allocateDirect(10);
-
- // Fill source buffer with data
- for (int i = 0; i < 10; i++) {
- srcBuffer.put((byte) i);
- }
-
- // Flip the source buffer to prepare for reading
- srcBuffer.flip();
-
- // Wrap the ByteBuffers with MemorySegments
- MemorySegment srcSegment = MemorySegment.ofBuffer(srcBuffer);
- MemorySegment destSegment = MemorySegment.ofBuffer(destBuffer);
-
- // Copy memory from srcSegment to destSegment
- srcSegment.copyFrom(destSegment.asSlice(0, 10));
-
- // Verify the copy
- destBuffer.flip();
- while (destBuffer.hasRemaining()) {
- System.out.println(destBuffer.get());
- }
- }
-}
diff --git a/java/memory/memory-foreign/pom.xml b/java/memory/memory-foreign/pom.xml
new file mode 100644
index 0000000000000..ae38f89b555cd
--- /dev/null
+++ b/java/memory/memory-foreign/pom.xml
@@ -0,0 +1,30 @@
+
+
+
+
+ arrow-memory
+ org.apache.arrow
+ 15.0.0-SNAPSHOT
+
+ 4.0.0
+
+ arrow-memory-foreign
+ Arrow Memory - Foreign
+ Allocator and utils for allocating memory in Arrow based on java.lang.foreign
+
+
+
+ org.apache.arrow
+ arrow-memory-core
+
+
+
\ No newline at end of file
diff --git a/java/pom.xml b/java/pom.xml
index a73453df68fd2..644e40fd289dc 100644
--- a/java/pom.xml
+++ b/java/pom.xml
@@ -117,9 +117,9 @@ under the License.
--add-opens=java.base/java.nio=org.apache.arrow.memory.core,ALL-UNNAMED11
- 11
- 11
- 11
+ 21
+ 21
+ 21
+ jdk22
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+ 22
+ UTF-8
+
+ -XDcompilePolicy=simple
+ -Xplugin:ErrorProne -XepExcludedPaths:.*/(target/generated-sources)/.*
+ -J--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED
+ -J--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED
+ -J--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED
+ -J--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED
+ -J--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED
+ -J--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED
+ -J--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED
+ -J--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
+ -J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED
+ -J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED
+
+
+
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ --add-opens=java.base/java.nio=ALL-UNNAMED
+
+ Foreign
+
+
+
+
+
+