代码jit

时不时地查看一些代码,并认为它不可能是错误的。 一旦排除了简单的程序员搞砸代码/代码中的敌对行为(确保您阅读Java Puzzlers或类似内容)或并发性问题(阅读Java并发性或继续学习Heniz博士的出色课程 ),您应该坐下来花几天时间然后开始考虑JDK是否确实可以帮助您。 在我从事Java程序员的18多年中,我还没有见过如此狂野的家伙,这让我有些惊讶。

如果在大型Swing应用程序中针对JDK 8运行,则最终可能会看到很多次以下异常。 (除非您在日志记录代码中忘记了我在上一个博客中获得的教训,在这种情况下,您可能会看到很多ArrayOfOutBoundsException)

Caused by: java.lang.NullPointerException at javax.swing.text.GlyphView.getBreakSpot(GlyphView.java:799) at javax.swing.text.GlyphView.getBreakWeight(GlyphView.java:724) at javax.swing.text.FlowView$LogicalView.getPreferredSpan(FlowView.java:733) at javax.swing.text.FlowView.calculateMinorAxisRequirements(FlowView.java:233) at javax.swing.text.ParagraphView.calculateMinorAxisRequirements(ParagraphView.java:717) at javax.swing.text.BoxView.checkRequests(BoxView.java:935) at javax.swing.text.BoxView.getMinimumSpan(BoxView.java:568) at javax.swing.text.BoxView.calculateMinorAxisRequirements(BoxView.java:903) at javax.swing.text.BoxView.checkRequests(BoxView.java:935) at javax.swing.text.BoxView.setSpanOnAxis(BoxView.java:343) at javax.swing.text.BoxView.layout(BoxView.java:708) at javax.swing.text.BoxView.setSize(BoxView.java:397) ...

此错误特别隐蔽,因为它需要大约十分钟才能显示出来,有时甚至根本不需要。 如果您查看该类的代码,则所讨论的行以“ startsFrom = break”开头,仅访问两个局部变量,这两个变量先前已在该方法中进行了引用。

Segment s = getText(pstart, pend); s.first(); BreakIterator breaker = getBreaker(); breaker.setText(s); // Backward search should start from end+1 unless there's NO end+1 int startFrom = end + (pend > end ? 1 : 0); for (;;) { startFrom = breaker.preceding(s.offset + (startFrom - pstart))   + (pstart - s.offset); if (startFrom > start) { // The break spot is within the view bs[ix++] = startFrom; } else { break; } }

排除JIT错误的最直接方法是仅禁用该单一方法的编译,下面是一个示例; 但是您可以在命令行Java工具的文档中找到更多信息。

javaThing -XX:CompileCommand=exclude,javax/swing/text/GlyphView,getBreakSpot

添加此参数后,问题就消失了。 –由于我们已通过代码或并发问题排除了敌方行动,因此我们可以确定这是JIT问题。 现在,作为此问题的日志记录的一部分,我输出了该单一方法的诊断信息,并发现直到第五次方法被JITted时问题才出现。

javaThing -XX:CompileCommand=print,javax/swing/text/GlyphView,getBreakSpot

这是上面命令显示的一些诊断输出:

Compiled method (c2)  914078 33142       4       javax.swing.text.GlyphView::getBreakSpot (247 bytes)total in heap  [0x00002aaab0749e10,0x00002aaab0750fe0] = 29136relocation     [0x00002aaab0749f38,0x00002aaab074a1e8] = 688constants      [0x00002aaab074a200,0x00002aaab074a2a0] = 160main code      [0x00002aaab074a2a0,0x00002aaab074cde0] = 11072stub code      [0x00002aaab074cde0,0x00002aaab074ce40] = 96oops           [0x00002aaab074ce40,0x00002aaab074ce58] = 24metadata       [0x00002aaab074ce58,0x00002aaab074d058] = 512scopes data    [0x00002aaab074d058,0x00002aaab074ea20] = 6600scopes pcs     [0x00002aaab074ea20,0x00002aaab0750c50] = 8752dependencies   [0x00002aaab0750c50,0x00002aaab0750c80] = 48handler table  [0x00002aaab0750c80,0x00002aaab0750e90] = 528nul chk table  [0x00002aaab0750e90,0x00002aaab0750fe0] = 336
OopMapSet contains 113 OopMaps
#0
OopMap{[8]=Oop [32]=Oop [40]=Oop off=892}
#1
OopMap{[32]=Oop [40]=Oop off=960}
#2
OopMap{[32]=Oop [40]=Oop off=980}
#3
OopMap{[32]=Oop [40]=Oop [48]=Oop off=1048}
#4
OopMap{[32]=Oop [40]=Oop [48]=Oop off=1084}
#5
OopMap{[0]=Oop [24]=Oop [48]=Oop [56]=Oop [80]=Oop off=2500}
#6
OopMap{rbx=Oop rdi=Oop [32]=Oop [40]=Oop [112]=Oop off=2533}
#7
OopMap{rbx=Oop rdi=Oop r14=Oop [32]=Oop [112]=Oop off=3081}
#8
OopMap{rbx=Oop rdi=Oop r14=Oop [32]=Oop [40]=Oop [112]=Oop off=3190}
#9
OopMap{[8]=Oop [32]=Oop [40]=Oop off=4408}
#10
OopMap{[32]=Oop [40]=Oop [48]=Oop off=4640}
#11
OopMap{rbp=Oop [16]=Oop [24]=Oop [40]=Oop [64]=Oop off=5232}
#12
OopMap{rbp=Oop [0]=NarrowOop [32]=Oop off=5364}
#13
OopMap{[32]=Oop [40]=Oop [48]=Oop off=5408}
#14
OopMap{rbp=Oop [32]=Oop [40]=Oop [48]=Oop off=5436}
#15
OopMap{rbp=Oop [32]=Oop [40]=Oop [48]=Oop off=5468}
#16
OopMap{rbp=Oop [32]=Oop [40]=Oop [48]=Oop off=5524}
#17
OopMap{rbp=Oop [32]=Oop [40]=Oop [48]=Oop [88]=Oop off=5552}
#18
OopMap{[32]=Oop [40]=Oop [48]=Oop [64]=Oop [72]=Derived_oop_[64] [112]=Oop off=5608}
#19
OopMap{[8]=Oop [32]=Oop off=5680}
#20
OopMap{rbp=Oop off=5720}
#21
OopMap{rbp=Oop off=5752}
#22
OopMap{rbp=Oop [24]=NarrowOop [28]=NarrowOop [32]=Oop [40]=Oop [48]=Oop [56]=Oop [64]=Oop [88]=Oop off=5812}
#23
OopMap{rbp=Oop [16]=Oop [24]=Oop [40]=Oop [64]=Oop [88]=Oop off=5960}
#24
OopMap{[0]=Oop [24]=Oop [48]=Oop [56]=Oop [72]=Oop [88]=NarrowOop off=6056}
#25
OopMap{[40]=Oop off=6088}
#26
OopMap{[0]=Oop off=6120}
#27
OopMap{[8]=Oop [24]=Oop [56]=Oop [72]=Oop [112]=Oop off=6216}
#28
OopMap{[0]=Oop [32]=NarrowOop [40]=Oop off=6284}
#29
OopMap{rbp=Oop [16]=Oop [40]=Oop [64]=Oop [112]=Oop off=6384}
#30
OopMap{[0]=Oop off=6412}
#31
OopMap{[0]=Oop [16]=Oop [32]=NarrowOop [40]=Oop [48]=Oop off=6488}
#32
OopMap{rbp=Oop [16]=Oop [40]=Oop [48]=Oop off=6560}
#33
OopMap{[32]=Oop [40]=Oop [48]=Oop [64]=Oop [112]=Oop off=6608}
#34
OopMap{[8]=Oop [28]=NarrowOop [32]=Oop [40]=Oop [48]=Oop off=6768}
#35
OopMap{rbp=NarrowOop [0]=Oop [16]=Oop [32]=Oop [40]=NarrowOop off=6860}
#36
OopMap{[0]=Oop [16]=Oop [32]=NarrowOop [40]=Oop [48]=Oop off=6988}
#37
OopMap{rbp=Oop [32]=Oop off=7024}
#38
OopMap{rbp=NarrowOop [0]=Oop [24]=Oop [32]=Oop off=7260}
#39
OopMap{rbp=NarrowOop [0]=Oop [24]=Oop [32]=Oop off=7344}
#40
OopMap{rbp=Oop [16]=Oop [24]=Oop [40]=Oop [60]=NarrowOop [64]=Oop off=7452}
#41
OopMap{rbp=NarrowOop [32]=Oop off=7476}
#42
OopMap{rbp=NarrowOop [0]=Oop off=7524}
#43
OopMap{[32]=Oop [40]=Oop [48]=Oop off=7588}
#44
OopMap{[32]=Oop [40]=Oop [48]=Oop off=7616}
#45
OopMap{[32]=Oop [40]=Oop [48]=Oop off=7632}
#46
OopMap{rbp=NarrowOop [32]=Oop off=7676}
#47
OopMap{rbp=NarrowOop [0]=Oop off=7724}
#48
OopMap{[0]=Oop [16]=Oop [28]=NarrowOop [40]=Oop [48]=Oop [56]=NarrowOop [64]=Oop off=7868}
#49
OopMap{[8]=Oop [28]=NarrowOop [32]=Oop [40]=Oop [48]=Oop [56]=Oop off=7916}
#50
OopMap{rbp=Oop [16]=Oop [24]=NarrowOop off=8016}
#51
OopMap{rbp=Oop [16]=Oop [28]=NarrowOop off=8080}
#52
OopMap{rbp=NarrowOop [0]=Oop [24]=Oop [32]=Oop off=8152}
#53
OopMap{rbp=Oop [8]=NarrowOop off=8212}
#54
OopMap{rbp=NarrowOop [32]=Oop off=8236}
#55
OopMap{rbp=Oop [16]=NarrowOop off=8272}
#56
OopMap{rbp=NarrowOop [0]=Oop off=8320}
#57
OopMap{rbp=Oop [12]=NarrowOop off=8360}
#58
OopMap{rbp=NarrowOop [32]=Oop off=8400}
#59
OopMap{rbp=Oop [12]=NarrowOop off=8460}
#60
OopMap{rbp=NarrowOop [0]=Oop off=8508}
#61
OopMap{rbp=Oop [24]=NarrowOop [40]=Oop off=8572}
#62
OopMap{rbp=Oop off=8600}
#63
OopMap{rbp=Oop [8]=Oop [28]=NarrowOop off=8640}
#64
OopMap{rbp=Oop [8]=Oop [20]=NarrowOop [112]=Oop off=8704}
#65
OopMap{rbp=Oop [16]=Oop [24]=Oop [48]=Oop off=8788}
#66
OopMap{rbp=Oop [16]=Oop [24]=Oop [40]=Oop [64]=Oop off=8912}
#67
OopMap{rbp=Oop [16]=Oop [24]=Oop [40]=Oop [64]=Oop off=9036}
#68
OopMap{rbp=Oop [16]=Oop [24]=Oop [40]=Oop [64]=Oop off=9160}
#69
OopMap{rbp=Oop [16]=Oop [24]=Oop [40]=Oop [64]=Oop off=9284}
#70
OopMap{rbp=Oop [16]=Oop [24]=Oop [40]=Oop [64]=Oop off=9408}
#71
OopMap{rbp=Oop [16]=Oop [24]=Oop [40]=Oop [64]=Oop off=9532}
#72
OopMap{off=9556}
#73
OopMap{off=9580}
#74
OopMap{off=9604}
#75
OopMap{[112]=Oop off=9628}
#76
OopMap{rbp=Oop [8]=Oop [24]=Oop [32]=NarrowOop off=9696}
#77
OopMap{rbp=Oop [8]=Oop [24]=NarrowOop off=9760}
#78
OopMap{off=9784}
#79
OopMap{off=9812}
#80
OopMap{off=9836}
#81
OopMap{off=9860}
#82
OopMap{off=9884}
#83
OopMap{off=9908}
#84
OopMap{off=9932}
#85
OopMap{off=9956}
#86
OopMap{off=9980}
#87
OopMap{off=10004}
#88
OopMap{off=10028}
#89
OopMap{rbp=Oop [16]=Oop [28]=NarrowOop off=10092}
#90
OopMap{rbp=Oop [16]=Oop [24]=Oop [48]=Oop off=10176}
#91
OopMap{off=10200}
#92
OopMap{off=10224}
#93
OopMap{off=10248}
#94
OopMap{off=10272}
#95
OopMap{off=10296}
#96
OopMap{off=10320}
#97
OopMap{off=10344}
#98
OopMap{off=10368}
#99
OopMap{off=10392}
#100
OopMap{off=10416}
#101
OopMap{off=10440}
#102
OopMap{off=10464}
#103
OopMap{off=10488}
#104
OopMap{off=10512}
#105
OopMap{off=10536}
#106
OopMap{off=10560}
#107
OopMap{off=10584}
#108
OopMap{off=10608}
#109
OopMap{off=10632}
#110
OopMap{off=10656}
#111
OopMap{off=10680}
#112
OopMap{off=11028}
java.lang.NullPointerExceptionat javax.swing.text.GlyphView.getBreakSpot(GlyphView.java:799)at javax.swing.text.GlyphView.getBreakWeight(GlyphView.java:724)at javax.swing.text.html.InlineView.getBreakWeight(InlineView.java:150)at javax.swing.text.FlowView$LogicalView.getPreferredSpan(FlowView.java:733)at javax.swing.text.FlowView.calculateMinorAxisRequirements(FlowView.java:233)at javax.swing.text.ParagraphView.calculateMinorAxisRequirements(ParagraphView.java:717)at javax.swing.text.html.ParagraphView.calculateMinorAxisRequirements(ParagraphView.java:157)at javax.swing.text.BoxView.checkRequests(BoxView.java:935)at javax.swing.text.BoxView.getMinimumSpan(BoxView.java:568)at javax.swing.text.html.ParagraphView.getMinimumSpan(ParagraphView.java:270)at javax.swing.text.BoxView.calculateMinorAxisRequirements(BoxView.java:903)

现在,我仍在与JDK团队合作以解决此问题。 但是我确实觉得我已经找到了一套有用的工具,可以提供一些证据来证明JIT编译器正在造成我的麻烦。 更重要的是,我有一种解决方法,因此可以运行测试,直到解决为止。

翻译自: https://www.javacodegeeks.com/2014/11/but-thats-impossible-or-finding-out-that-the-jit-has-broken-your-code.html

代码jit

代码jit_但这是不可能的,或者无法发现JIT破坏了您的代码。相关推荐

  1. 但这是不可能的,或者无法发现JIT破坏了您的代码。

    时不时地查看一些代码,并认为它不可能是错误的. 一旦您排除了简单的程序员搞砸代码/代码中的敌对行为(确保您阅读Java Puzzlers或类似内容)或并发问题(阅读Java Concurrency或继 ...

  2. 代码逻辑是分方法写好 还是在一个方法写好_这一团糟的代码,真的是我写的吗?...

    阿里妹导读:你有没有遇到过这种情况:过几周或者几个月之后,再看到自己写的代码,感觉一团糟,不禁怀疑人生?我们每天都与代码打交道,但当被问道什么是好的代码时,很多人可能会先愣一下,然后给出的回答要么比较 ...

  3. Apollo代码学习(六)—模型预测控制(MPC)_follow轻尘的博客-CSDN博客_mpc代码

    Apollo代码学习(六)-模型预测控制(MPC)_follow轻尘的博客-CSDN博客_mpc代码

  4. 微信翻译生日快乐的代码_微信「隐藏彩蛋」,你发现了没?

    高考加油 愿所有的好运与你相伴,愿在考场的你超常发挥! 这两天就是一年一度的高考的日子,虽特殊,但依旧是一个奋斗的夏季. 相信大家平常使用微信无非就是聊聊天.打打电话什么的,也有部分小小的彩蛋功能被大 ...

  5. 用java写ods系统_基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(TableGo v7.0.0版)...

    TableGo是基于数据库的代码自动生成工具,低代码编程技术的实现,可以零代码自动生成SpringBoot项目工程.生成JavaBean.生成前后端分离的CRUD代码.生成MyBaits的Mapper ...

  6. git 怎么拉取线上代码到本地进行合并_android studio如何使用git提交、拉取、合并代码的操作...

    我们在实际做项目开发时,一般都需要多人协同开发,这就产生了代码管控的需求,一些版本控制的工具就应运而生了.现在常用的一种是Git,另外还有些svn等,本人感觉git工具比较好用,这篇文章也只讲述git ...

  7. idea 查询项目代码行数_程序员的福利,四个技巧,让OneNote支持代码高亮

    点击蓝字 关注我们 写在前面 对于程序员来说,代码高亮是最基本的需求. 印象笔记.有道云笔记.为知笔记都提供了相应的功能. 而OneNote,沿袭了微软"术业有专攻"的理念,并没有 ...

  8. 代码逻辑分析_致C++完美主义者:使用Visual Studio新工具分析你的代码

    官宣IntelliSense Code Linter for C++ 在Visual Studio 2019 v16.6 Preview 2中,我们高兴的宣布一项针对C++开发者的新功能:Intell ...

  9. java生成iso9660工具_基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(TableGo v7.0.0版)...

    TableGo_20210212 v7.0.0 正式版发布,此次版本更新如下: 1.新增对DB2数据库的支持 2.新增按字段生成文件,支持把字段.JSON.XML数据转换成任何代码 3.新增大量新的自 ...

最新文章

  1. 张和平:益生菌、肠道菌群与健康 |《科学通报》专辑
  2. 江苏省计算机学会科学技术奖,孙国梓
  3. c++ template笔记(2)模板类
  4. java之IO流(一)
  5. Python 的字符串转int
  6. 典型PC系统各操作指令执行时间
  7. 深入浅出学Hive:Hive参数
  8. 【qduoj - 312】寻找唯一的萌妹(卡时)
  9. shiro 拦截未登录的ajax_Shiro是如何拦截未登录请求的(二)
  10. 自定义View控件(2—手写实例代码)
  11. 技术动态 | 知识可视化,连接和探究知识之间的联系!
  12. 如何构建AI驱动型智能服务?
  13. 数据:昨日BTC和ETH期货持仓均减少约三成,波动率创3月以来新高
  14. Directionally Localized Anti-Aliasing
  15. liunx grep sed
  16. Atitit 图像指纹识别匹配sift算法 atlks总结
  17. mysql 关闭严格_mysql关闭严格模式
  18. Dijkstra最短路径
  19. Qt 内嵌浏览器几种办法
  20. android apk旋转,系统的屏幕旋转弱爆了!超强屏幕旋转控制APP

热门文章

  1. P1352-没有上司的舞会【树形dp】
  2. codeforces855 C. Helga Hufflepuff‘s Cup(树形dp)
  3. codeforces1451 D. Circle Game
  4. 泰勒及洛朗展开学习笔记
  5. 纪中C组模拟赛总结(2019.7.6)
  6. 【多重背包】太空电梯(jzoj 1286)
  7. 一些来自STL的好东西
  8. 11、mysql数据表中数据的查询(3)
  9. JavaFX UI控件教程(二十一)之Tooltip
  10. JavaFX UI控件教程(九)之Text Field