在四川省住房和城乡建设厅网站上查,群晖wordpress去除端口,沈阳做个网站成本,长沙网站建设招聘时不时地查看一些代码#xff0c;并认为它不可能是错误的。 一旦您排除了简单的程序员搞砸代码/代码中的敌对行为#xff08;确保您阅读Java Puzzlers或类似内容#xff09;或并发问题#xff08;阅读Java Concurrency或继续学习Heniz博士的出色课程 #xff09;#xff… 时不时地查看一些代码并认为它不可能是错误的。 一旦您排除了简单的程序员搞砸代码/代码中的敌对行为确保您阅读Java Puzzlers或类似内容或并发问题阅读Java Concurrency或继续学习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 end1 unless theres NO end1 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:CompileCommandexclude,javax/swing/text/GlyphView,getBreakSpot 添加此参数后问题就消失了。 –由于我们已通过代码或并发问题排除了敌方行动因此我们可以更加确定这是JIT问题。 现在作为此错误记录的一部分我输出了该单一方法的诊断信息并发现直到第五次方法被JITted时问题才出现。 javaThing -XX:CompileCommandprint,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 off892}
#1
OopMap{[32]Oop [40]Oop off960}
#2
OopMap{[32]Oop [40]Oop off980}
#3
OopMap{[32]Oop [40]Oop [48]Oop off1048}
#4
OopMap{[32]Oop [40]Oop [48]Oop off1084}
#5
OopMap{[0]Oop [24]Oop [48]Oop [56]Oop [80]Oop off2500}
#6
OopMap{rbxOop rdiOop [32]Oop [40]Oop [112]Oop off2533}
#7
OopMap{rbxOop rdiOop r14Oop [32]Oop [112]Oop off3081}
#8
OopMap{rbxOop rdiOop r14Oop [32]Oop [40]Oop [112]Oop off3190}
#9
OopMap{[8]Oop [32]Oop [40]Oop off4408}
#10
OopMap{[32]Oop [40]Oop [48]Oop off4640}
#11
OopMap{rbpOop [16]Oop [24]Oop [40]Oop [64]Oop off5232}
#12
OopMap{rbpOop [0]NarrowOop [32]Oop off5364}
#13
OopMap{[32]Oop [40]Oop [48]Oop off5408}
#14
OopMap{rbpOop [32]Oop [40]Oop [48]Oop off5436}
#15
OopMap{rbpOop [32]Oop [40]Oop [48]Oop off5468}
#16
OopMap{rbpOop [32]Oop [40]Oop [48]Oop off5524}
#17
OopMap{rbpOop [32]Oop [40]Oop [48]Oop [88]Oop off5552}
#18
OopMap{[32]Oop [40]Oop [48]Oop [64]Oop [72]Derived_oop_[64] [112]Oop off5608}
#19
OopMap{[8]Oop [32]Oop off5680}
#20
OopMap{rbpOop off5720}
#21
OopMap{rbpOop off5752}
#22
OopMap{rbpOop [24]NarrowOop [28]NarrowOop [32]Oop [40]Oop [48]Oop [56]Oop [64]Oop [88]Oop off5812}
#23
OopMap{rbpOop [16]Oop [24]Oop [40]Oop [64]Oop [88]Oop off5960}
#24
OopMap{[0]Oop [24]Oop [48]Oop [56]Oop [72]Oop [88]NarrowOop off6056}
#25
OopMap{[40]Oop off6088}
#26
OopMap{[0]Oop off6120}
#27
OopMap{[8]Oop [24]Oop [56]Oop [72]Oop [112]Oop off6216}
#28
OopMap{[0]Oop [32]NarrowOop [40]Oop off6284}
#29
OopMap{rbpOop [16]Oop [40]Oop [64]Oop [112]Oop off6384}
#30
OopMap{[0]Oop off6412}
#31
OopMap{[0]Oop [16]Oop [32]NarrowOop [40]Oop [48]Oop off6488}
#32
OopMap{rbpOop [16]Oop [40]Oop [48]Oop off6560}
#33
OopMap{[32]Oop [40]Oop [48]Oop [64]Oop [112]Oop off6608}
#34
OopMap{[8]Oop [28]NarrowOop [32]Oop [40]Oop [48]Oop off6768}
#35
OopMap{rbpNarrowOop [0]Oop [16]Oop [32]Oop [40]NarrowOop off6860}
#36
OopMap{[0]Oop [16]Oop [32]NarrowOop [40]Oop [48]Oop off6988}
#37
OopMap{rbpOop [32]Oop off7024}
#38
OopMap{rbpNarrowOop [0]Oop [24]Oop [32]Oop off7260}
#39
OopMap{rbpNarrowOop [0]Oop [24]Oop [32]Oop off7344}
#40
OopMap{rbpOop [16]Oop [24]Oop [40]Oop [60]NarrowOop [64]Oop off7452}
#41
OopMap{rbpNarrowOop [32]Oop off7476}
#42
OopMap{rbpNarrowOop [0]Oop off7524}
#43
OopMap{[32]Oop [40]Oop [48]Oop off7588}
#44
OopMap{[32]Oop [40]Oop [48]Oop off7616}
#45
OopMap{[32]Oop [40]Oop [48]Oop off7632}
#46
OopMap{rbpNarrowOop [32]Oop off7676}
#47
OopMap{rbpNarrowOop [0]Oop off7724}
#48
OopMap{[0]Oop [16]Oop [28]NarrowOop [40]Oop [48]Oop [56]NarrowOop [64]Oop off7868}
#49
OopMap{[8]Oop [28]NarrowOop [32]Oop [40]Oop [48]Oop [56]Oop off7916}
#50
OopMap{rbpOop [16]Oop [24]NarrowOop off8016}
#51
OopMap{rbpOop [16]Oop [28]NarrowOop off8080}
#52
OopMap{rbpNarrowOop [0]Oop [24]Oop [32]Oop off8152}
#53
OopMap{rbpOop [8]NarrowOop off8212}
#54
OopMap{rbpNarrowOop [32]Oop off8236}
#55
OopMap{rbpOop [16]NarrowOop off8272}
#56
OopMap{rbpNarrowOop [0]Oop off8320}
#57
OopMap{rbpOop [12]NarrowOop off8360}
#58
OopMap{rbpNarrowOop [32]Oop off8400}
#59
OopMap{rbpOop [12]NarrowOop off8460}
#60
OopMap{rbpNarrowOop [0]Oop off8508}
#61
OopMap{rbpOop [24]NarrowOop [40]Oop off8572}
#62
OopMap{rbpOop off8600}
#63
OopMap{rbpOop [8]Oop [28]NarrowOop off8640}
#64
OopMap{rbpOop [8]Oop [20]NarrowOop [112]Oop off8704}
#65
OopMap{rbpOop [16]Oop [24]Oop [48]Oop off8788}
#66
OopMap{rbpOop [16]Oop [24]Oop [40]Oop [64]Oop off8912}
#67
OopMap{rbpOop [16]Oop [24]Oop [40]Oop [64]Oop off9036}
#68
OopMap{rbpOop [16]Oop [24]Oop [40]Oop [64]Oop off9160}
#69
OopMap{rbpOop [16]Oop [24]Oop [40]Oop [64]Oop off9284}
#70
OopMap{rbpOop [16]Oop [24]Oop [40]Oop [64]Oop off9408}
#71
OopMap{rbpOop [16]Oop [24]Oop [40]Oop [64]Oop off9532}
#72
OopMap{off9556}
#73
OopMap{off9580}
#74
OopMap{off9604}
#75
OopMap{[112]Oop off9628}
#76
OopMap{rbpOop [8]Oop [24]Oop [32]NarrowOop off9696}
#77
OopMap{rbpOop [8]Oop [24]NarrowOop off9760}
#78
OopMap{off9784}
#79
OopMap{off9812}
#80
OopMap{off9836}
#81
OopMap{off9860}
#82
OopMap{off9884}
#83
OopMap{off9908}
#84
OopMap{off9932}
#85
OopMap{off9956}
#86
OopMap{off9980}
#87
OopMap{off10004}
#88
OopMap{off10028}
#89
OopMap{rbpOop [16]Oop [28]NarrowOop off10092}
#90
OopMap{rbpOop [16]Oop [24]Oop [48]Oop off10176}
#91
OopMap{off10200}
#92
OopMap{off10224}
#93
OopMap{off10248}
#94
OopMap{off10272}
#95
OopMap{off10296}
#96
OopMap{off10320}
#97
OopMap{off10344}
#98
OopMap{off10368}
#99
OopMap{off10392}
#100
OopMap{off10416}
#101
OopMap{off10440}
#102
OopMap{off10464}
#103
OopMap{off10488}
#104
OopMap{off10512}
#105
OopMap{off10536}
#106
OopMap{off10560}
#107
OopMap{off10584}
#108
OopMap{off10608}
#109
OopMap{off10632}
#110
OopMap{off10656}
#111
OopMap{off10680}
#112
OopMap{off11028}
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