代码jit_但这是不可能的,或者无法发现JIT破坏了您的代码。
代码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破坏了您的代码。的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 简单的灯笼制作方法 简单的灯笼怎么制作
- 下一篇: u3d ab包 循环依赖_为什么要保持软