Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add platform compatible implementations for Java11+
- Loading branch information
1 parent
a457519
commit 00c001b
Showing
5 changed files
with
214 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
/* | ||
* 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. | ||
*/ | ||
@SuppressWarnings("javadoc") | ||
module org.apache.datasketches.memory { | ||
requires java.base; | ||
requires java.logging; | ||
requires jdk.unsupported; | ||
|
||
exports org.apache.datasketches.memory; | ||
} |
46 changes: 46 additions & 0 deletions
46
datasketches-memory-java11/src/main/java/org/apache/datasketches/memory/Map.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
/* | ||
* 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.datasketches.memory; | ||
|
||
/** | ||
* Read only interface for a memory mapped file | ||
* | ||
* @author Roman Leventov | ||
* @author Lee Rhodes | ||
* @author Praveenkumar Venkatesan | ||
*/ | ||
public interface Map extends AutoCloseable { | ||
|
||
/** | ||
* @see <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/MappedByteBuffer.html#load--"> | ||
* java/nio/MappedByteBuffer.load</a> | ||
*/ | ||
void load(); | ||
|
||
/** | ||
* @return true if loaded | ||
* | ||
* @see <a href= | ||
* "https://docs.oracle.com/javase/8/docs/api/java/nio/MappedByteBuffer.html#isLoaded--"> java | ||
* /nio/MappedByteBuffer.isLoaded</a> | ||
*/ | ||
boolean isLoaded(); | ||
|
||
} |
50 changes: 50 additions & 0 deletions
50
...es-memory-java11/src/main/java/org/apache/datasketches/memory/internal/MemoryCleaner.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
/* | ||
* 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.datasketches.memory.internal; | ||
|
||
import jdk.internal.ref.Cleaner; | ||
|
||
/** | ||
* Extracts a version-dependent reference to the `jdk.internal.ref.Cleaner` into | ||
* a standalone class. The package name for Cleaner has changed in | ||
* later versions. The appropriate class will be loaded by the class loader | ||
* depending on the Java version that is used. | ||
* For more information, see: https://openjdk.java.net/jeps/238 | ||
*/ | ||
public class MemoryCleaner { | ||
private final Cleaner cleaner; | ||
|
||
/** | ||
* Creates a new `jdk.internal.ref.Cleaner`. | ||
* @param referent the object to be cleaned | ||
* @param deallocator - the cleanup code to be run when the cleaner is invoked. | ||
* return MemoryCleaner | ||
*/ | ||
public MemoryCleaner(final Object referent, final Runnable deallocator) { | ||
cleaner = Cleaner.create(referent, deallocator); | ||
} | ||
|
||
/** | ||
* Runs this cleaner, if it has not been run before. | ||
*/ | ||
public void clean() { | ||
cleaner.clean(); | ||
} | ||
} |
74 changes: 74 additions & 0 deletions
74
...ry-java11/src/main/java/org/apache/datasketches/memory/internal/VirtualMachineMemory.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
/* | ||
* 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.datasketches.memory.internal; | ||
|
||
import java.lang.reflect.InvocationTargetException; | ||
import java.lang.reflect.Method; | ||
|
||
/** | ||
* Extracts a version-dependent reference to the `jdk.internal.misc.VM` into | ||
* a standalone class. The package name for VM has changed in | ||
* later versions. The appropriate class will be loaded by the class loader | ||
* depending on the Java version that is used. | ||
* For more information, see: https://openjdk.java.net/jeps/238 | ||
*/ | ||
public final class VirtualMachineMemory { | ||
|
||
private static final Class<?> VM_CLASS; | ||
private static final Method VM_MAX_DIRECT_MEMORY_METHOD; | ||
private static final Method VM_IS_DIRECT_MEMORY_PAGE_ALIGNED_METHOD; | ||
private static final long maxDBBMemory; | ||
private static final boolean isPageAligned; | ||
|
||
static { | ||
try { | ||
VM_CLASS = Class.forName("jdk.internal.misc.VM"); | ||
VM_MAX_DIRECT_MEMORY_METHOD = VM_CLASS.getDeclaredMethod("maxDirectMemory"); | ||
VM_MAX_DIRECT_MEMORY_METHOD.setAccessible(true); | ||
maxDBBMemory = (long) VM_MAX_DIRECT_MEMORY_METHOD.invoke(null); //static method | ||
|
||
VM_IS_DIRECT_MEMORY_PAGE_ALIGNED_METHOD = | ||
VM_CLASS.getDeclaredMethod("isDirectMemoryPageAligned"); | ||
VM_IS_DIRECT_MEMORY_PAGE_ALIGNED_METHOD.setAccessible(true); | ||
isPageAligned = (boolean) VM_IS_DIRECT_MEMORY_PAGE_ALIGNED_METHOD | ||
.invoke(null); //static method | ||
} catch (final ClassNotFoundException | NoSuchMethodException | IllegalAccessException | ||
| IllegalArgumentException | InvocationTargetException | SecurityException e) { | ||
throw new RuntimeException("Could not acquire jdk.internal.misc.VM: " + e.getClass()); | ||
} | ||
} | ||
|
||
/** | ||
* Returns the maximum amount of allocatable direct buffer memory. | ||
* The directMemory variable is initialized during system initialization. | ||
* @return the maximum amount of allocatable direct buffer memory. | ||
*/ | ||
public static long getMaxDBBMemory() { | ||
return maxDBBMemory; | ||
} | ||
|
||
/** | ||
* Returns true if the direct buffers should be page aligned. | ||
* @return flag that determines whether direct buffers should be page aligned. | ||
*/ | ||
public static boolean getIsPageAligned() { | ||
return isPageAligned; | ||
} | ||
} |