jdeps result
org.jrobin.core.RrdNioBackend -> sun.misc.Cleaner JDK internal API (JDK removed internal API)
org.jrobin.core.RrdNioBackend -> sun.nio.ch.DirectBuffer JDK internal API (java.base)
Support Oracle JDK6-9
fix from
http://stackoverflow.com/questions/1854398/how-to-garbage-collect-a-direct-buffer-java
private void unmapFile() {
destroyBuffer(byteBuffer);
}
private static void destroyBuffer(Buffer buffer) {
if (buffer != null && buffer.isDirect()) {
try {
if (!buffer.getClass().getName().equals("java.nio.DirectByteBuffer")) {
Field attField = buffer.getClass().getDeclaredField("att");
attField.setAccessible(true);
buffer = (Buffer) attField.get(buffer);
}
Method cleanerMethod = buffer.getClass().getMethod("cleaner");
cleanerMethod.setAccessible(true);
Object cleaner = cleanerMethod.invoke(buffer);
Method cleanMethod = cleaner.getClass().getMethod("clean");
cleanMethod.setAccessible(true);
cleanMethod.invoke(cleaner);
} catch (Exception e) {
throw new RuntimeException("Could not destroy direct buffer " + buffer, e);
}
}
}
Tested with JDK8, JDK9_b121 require jvm option for JDK9
"-XaddExports:java.base/jdk.internal.ref=ALL-UNNAMED"
Possible solution to support other JDK providers at
https://sourceforge.net/p/tuer/code/HEAD/tree/pre_beta/src/main/java/engine/misc/DeallocationHelper.java
jdeps result
org.jrobin.core.RrdNioBackend -> sun.misc.Cleaner JDK internal API (JDK removed internal API)
org.jrobin.core.RrdNioBackend -> sun.nio.ch.DirectBuffer JDK internal API (java.base)
Support Oracle JDK6-9
fix from
http://stackoverflow.com/questions/1854398/how-to-garbage-collect-a-direct-buffer-java
private void unmapFile() {
destroyBuffer(byteBuffer);
}
}
Tested with JDK8, JDK9_b121 require jvm option for JDK9
"-XaddExports:java.base/jdk.internal.ref=ALL-UNNAMED"
Possible solution to support other JDK providers at
https://sourceforge.net/p/tuer/code/HEAD/tree/pre_beta/src/main/java/engine/misc/DeallocationHelper.java