繁体   English   中英

netty epoll本机在linux(debian)中抛出java.lang.IllegalArgumentException

[英]netty epoll native throw java.lang.IllegalArgumentException in linux(debian)

启动应用程序时,netty引发以下异常

Caused by: java.lang.IllegalArgumentException
    at sun.misc.Unsafe.allocateMemory(Native Method)
    at io.netty.util.internal.PlatformDependent0.allocateMemory(PlatformDependent0.java:627)
    at io.netty.util.internal.PlatformDependent.allocateMemory(PlatformDependent.java:262)
    at io.netty.channel.epoll.IovArray.<init>(IovArray.java:64)
    at io.netty.channel.epoll.EpollEventLoop.<init>(EpollEventLoop.java:62)
    at io.netty.channel.epoll.EpollEventLoopGroup.newChild(EpollEventLoopGroup.java:130)
    at io.netty.channel.epoll.EpollEventLoopGroup.newChild(EpollEventLoopGroup.java:35)
    at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:84)

原因是由另一个包含android-2.3.3.jar的库引起的。 Netty EPOLL本机尝试通过检查功能和类来检测系统。 在PlatformDependent :: isAndroid0()中,由于存在android jar,它将认为自己正在android中运行。

 private static boolean isAndroid0() {
    boolean android;
    try {
        Class.forName("android.app.Application", false, getSystemClassLoader());
        android = true;
 ...

因此,函数hasUnsafe0()将错误地认为没有sun.misc.Unsafe。

private static boolean hasUnsafe0() {
    if(isAndroid()) {
        logger.debug("sun.misc.Unsafe: unavailable (Android)");
        return false;

因此,在调用本机内存分配时会引发异常。 它的参数是负值!!!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM