因为它是jvm heap&gc,它何时发布?或者,它一直持续到流程终止?
我已经检查过:
但是所有答案都很模糊,没有人明确回答,是否有明确的答案?至少对于64位Linux上的Java 8.
有一个仍然支持Java 6的项目.下面的代码位于使用Compiler compliance level 1.6构建的jar文件中
应该从为java 6或更新版本构建的java应用程序中调用该jar文件.它在Java 8中运行良好.
现在使用Java9,我遇到了nio.DirectByteBuffer的问题,我尝试用这种方式解决它,使用反射:
@SuppressWarnings("unchecked")
static void cleanDirectBuffer(sun.nio.ch.DirectBuffer buffer) {
if (JAVA_VERSION < 1.9) {
sun.misc.Cleaner cleaner = buffer.cleaner();
if (cleaner != null) cleaner.clean();
} else {
// For java9 do it the reflection way
@SuppressWarnings("rawtypes")
Class B = buffer.getClass();
// will be a java.nio.DirectBuffer, which is unknown if compiled in 1.6 compliance mode
try {
java.lang.reflect.Method CleanerMethod = B.getMethod("cleaner");
CleanerMethod.setAccessible(true); // fails here !
Object cleaner = CleanerMethod.invoke(buffer);
if (cleaner == null) return;
@SuppressWarnings("rawtypes") …Run Code Online (Sandbox Code Playgroud)