2016-09-26 71 views
0

当启动应用程序时,下面的异常是由网状网状epoll的原生掷java.lang.IllegalArgumentException异常(Debian的)

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) 

回答

1

引发的原因是其中包含了Android的2.3.3另一个库造成。罐。 Netty EPOLL native尝试通过检查功能&类来检测系统。在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; 

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

+0

请在netty问题跟踪器中打开一个问题。我认为如果我们使用的是Android系统,我们可以做得更好。 –

相关问题