网络日志现在显示"low-level API for accessing direct buffers reliably"



为什么从netty 4.0.15到4.0.19,我现在在日志中看到"您的平台不提供完整的低级API来可靠地访问直接缓冲区" ?

我不是Android平台,我的JRE没有改变,我使用OSGi。

在如何检测到这一点上,是否有什么改变?

PlatformDependent0似乎已经改变了它检测sun.nio.ch.DirectBuffer是否可用的方式。

    boolean directBufferFreeable = false;
    try {
        Class<?> cls = Class.forName("sun.nio.ch.DirectBuffer", false, getClassLoader(PlatformDependent0.class));
        Method method = cls.getMethod("cleaner");
        if ("sun.misc.Cleaner".equals(method.getReturnType().getName())) {
            directBufferFreeable = true;
        }
    } catch (Throwable t) {
        // We don't have sun.nio.ch.DirectBuffer.cleaner().
    }
    logger.debug("sun.nio.ch.DirectBuffer.cleaner(): {}", directBufferFreeable? "available" : "unavailable");

由于这是一个OSGi应用程序,所以我需要添加"sun.nio"。ch"到ClassLoader。在本例中,我使用felix,并在配置中添加了以下属性:

config.put(FRAMEWORK_SYSTEMPACKAGES_EXTRA, "sun.misc,sun.nio.ch");

最新更新