解决java.lang.ClassNotFoundException: jdk.internal.misc.Unsafe异常

这篇博客介绍了在使用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作为解决方案。

先说一下背景

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

https://github.com/netty/netty/issues/6855

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值