2016-09-26 66 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系統,我們可以做得更好。 –

相關問題