升级到JDK9的一个BUG,你了解吗
概述
前几天在一个群里看到一个朋友发了一个demo,你了解吗说是升级JDK的bug,昨天在JVM的你了解吗一个群里又有朋友发了,觉得挺有意思,升级分享给大家,你了解吗希望大家升级JDK的升级版本的时候注意下是否存在这样的代码,如果存在记得立马改过来。你了解吗

输出比较有意思,升级在JDK9以前,你了解吗只输出一个evaluated,升级但是你了解吗JDK9以后的版本却会输出两个evaluated,大家可以测试一下。升级
猜想
看到这个现象,你了解吗大家都开始猜测了
首先,升级到底是你了解吗编译期问题还是运行时问题?这个好验证,我们用JDK8编译的class分别跑在JDK8和JDK10上,看是不是也有类似的服务器租用现象。
其次,如果是编译期问题,那到底差异在哪里,从结论看,用JDK10编译的字节码,test方法肯定能执行两次。
大家验证下来发现***种情况没发生类似的问题了,那基本确定是第二种情况,那接下来简单分析下。
简单分析
验证字节码,我们都是通过javap去看的,javap -verbose JavacEvalBug,两个版本下我们分别看到下面的字节码
JDK8编译的字节码

其实基本相当于如下的逻辑

JDK10编译的字节码

粗看已经比较明了了,在JDK10编译的字节码里我们确实看到执行了两次test方法,那就和结论比较匹配了。
这个Bug已经有人汇报给Oracle了,https://bugs.openjdk.java.net/browse/JDK-8204322,大家可以关注下进度,亿华云点击原文可以进入BUG链接。
思维发散
上面其实都是涉及到了字符串拼接,JDK9以前用的是StringBuilder来拼接的,而JDK9开始使用了invokeDynamic指令,可以动态指定要调用的方法,而不是一开始就编译好的,这个展开来讲就比较长了,有兴趣的可以网上找点资料了解一下,我有时间也可以专门写篇相关的文章,只是感觉对这块有比较大兴趣或者有兴趣一直读下去的的估计不会太多。
改下Demo让你再惊喜一下
如果上面的Demo改一下,把数组变成int数组

此时你再试试?
【本文是专栏作者李嘉鹏的原创文章,转载请通过微信公众号(你假笨,id:lovestblog)联系作者本人获取授权】
戳这里,看该作者更多好文
b2b供应网相关文章
电脑显示实时时钟错误的原因及解决方法(探究电脑实时时钟错误的根源,解决问题从根源出发)
摘要:电脑作为现代人们生活中必不可少的工具之一,其准确的时间显示对于日常生活和工作至关重要。然而,有时我们会遇到电脑显示实时时钟错误的问题,导致时间不准确。本文将深入探究电脑实时时钟错误...2025-11-05- 摘要:在现代快节奏的生活中,学习一种乐器可能变得困难和耗时。然而,借助电脑钢琴教程,学习钢琴变得更加容易和灵活。这种新兴的学习方法可以帮助您以更轻松的方式学习钢琴,并且我们还会推荐一些优...2025-11-05
电脑修复账户密码错误的方法(解决账户密码错误问题的实用技巧)
摘要:在日常使用电脑的过程中,我们经常会遇到账户密码错误的情况。无论是因为自己忘记密码还是账户被他人篡改,这都给我们的工作和生活带来了很多不便。本文将介绍一些修复电脑账户密码错误的实用方...2025-11-05集成显卡Broadwell的性能和优势分析(揭秘Broadwell集成显卡的性能表现和最新技术特点)
摘要:在现代计算机系统中,显卡的性能对于图形处理和游戏体验起着至关重要的作用。而集成显卡作为一种常见的显卡解决方案,近年来在技术和性能上得到了显著的提升。本文将以集成显卡Broadwel...2025-11-05Ryzen5(探索Ryzen5的高性能特点及其在市场上的竞争力)
摘要:自从AMD推出Ryzen5系列处理器以来,它以其卓越的性能和出色的价格性价比,在市场上赢得了广泛的赞誉。本文将深入探讨Ryzen5系列处理器的各项特点,包括强大的性能表现、超高效能...2025-11-05电脑启动时程序错误的解决方法(如何应对电脑启动时程序错误的常见问题和解决技巧)
摘要:在使用电脑的过程中,有时会遇到电脑启动时出现程序错误的情况。这些程序错误可能导致电脑无法正常启动,给我们的工作和生活带来不便。本文将详细介绍如何应对电脑启动时的程序错误,提供常见问...2025-11-05

最新评论