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

标签 java netty

为什么从 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");

关于java - Netty 日志现在显示 "low-level API for accessing direct buffers reliably",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24458084/

相关文章:

java - 基于 Netty 的非阻塞 REST 框架

java - 向导不重绘/重新验证 jframe

netty - netty 可以可靠地检测 channel 关闭/断开连接吗?

java - jpcap 嗅探数据包

java - 使用 Spring Boot "bootRun"启动的应用程序在包含 Gradle Vaadin 插件时导致 NoClassDefFoundError

elasticsearch - 这个属性“es.set.netty.runtime.available.processors”的目的是什么以及它在elasticsearch中的好处。我应该如何使用它

java - netty 中的 ctx.write() 和 ctx.channel().write() 有什么区别?

netty - Netty 和 JGroups 之间的主要区别是什么?

java - 一次单击 ListView 中的所有按钮

java - 在java中从csv文件中提取字符串