先说一下背景
1.netty-all用的版本4.1.11.Final
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.12.Final</version>
</dependency>
2.jdk版本1.8.0_151
3.操作系统win10
报错日志如下
19-10-11.14:49:55.916 [JSF-CLI-CONN-com.jd.jsf.service.RegistryService-4-T-1] DEBUG PlatformDependent0 - jdk.internal.misc.Unsafe.allocateUninitializedArray(int): unavailable
java.lang.ClassNotFoundException: jdk.internal.misc.Unsafe
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at io.netty.util.internal.PlatformDependent0$6.run(PlatformDependent0.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at io.netty.util.internal.PlatformDependent0.<clinit>(PlatformDependent0.java:288)
at io.netty.util.internal.PlatformDependent.getSystemClassLoader(PlatformDependent.java:895)
at io.netty.util.internal.PlatformDependent.isAndroid0(PlatformDependent.java:919)
at io.netty.util.internal.PlatformDependent.<clinit>(PlatformDependent.java:70)
at io.netty.util.ConstantPool.<init>(ConstantPool.java:32)
at io.netty.util.Signal$1.<init>(Signal.java:27)
at io.netty.util.Signal.<clinit>(Signal.java:27)
at io.netty.util.concurrent.DefaultPromise.<clinit>(DefaultPromise.java:43)
at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:36)
at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:58)
at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:47)
at io.netty.channel.MultithreadEventLoopGroup.<init>(MultithreadEventLoopGroup.java:59)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:77)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:72)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:59)
at com.jd.jsf.gd.transport.ClientTransportConfig.initEventLoop(ClientTransportConfig.java:181)
at com.jd.jsf.gd.transport.ClientTransportConfig.getEventLoopGroup(ClientTransportConfig.java:166)
at com.jd.jsf.gd.transport.ClientTransportFactory.BuildChannel(ClientTransportFactory.java:203)
at com.jd.jsf.gd.transport.ClientTransportFactory.instanceTransport(ClientTransportFactory.java:177)
at com.jd.jsf.gd.transport.ClientTransportFactory.initTransport(ClientTransportFactory.java:153)
at com.jd.jsf.gd.transport.ClientTransportFactory.getClientTransport(ClientTransportFactory.java:78)
at com.jd.jsf.gd.client.Client$1.run(Client.java:411)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
报错日志看明显,是找不到UnSafe类
从上面日志第一行去看,这个类PlatformDependent0的UnSafe属性有问题,通过定位发现该类是netty-all这个jar包的,进入这个类看,发现其UnSafe类是sun.misc包下面的,该包是jdk1.8,可是为啥为报错找不到jdk.internal.misc包下面的。。。(这个问题至今没找到原因。。如果有人知道可以回复一下)

google了一下,找到的解决方案升级netty-all到4.1.12.Final
这篇博客介绍了在使用Netty 4.1.11.Final版本和JDK 1.8.0_151时遇到的ClassNotFoundException问题,具体是针对jdk.internal.misc.Unsafe类。作者分析了错误日志,发现Netty的PlatformDependent0类引用了sun.misc.Unsafe,但在运行时寻找的是jdk.internal.misc包下的类。尽管原因未明,但通过Google搜索找到了将Netty版本升级到4.1.12.Final作为解决方案。

8680

被折叠的 条评论
为什么被折叠?



