为什么只有在Java7中,线程才会卡在基于空格的breakiterator中?

为什么只有在Java7中,线程才会卡在基于空格的breakiterator中?,java,Java,应用程序(Samurai)中的某些操作在Java7(1.7.0_45_x64)中运行非常慢,但在1.6.0_34 32位中运行良好 等待时,此线程似乎在以下位置循环: "AWT-EventQueue-0" prio=6 tid=0x000000001234d000 nid=0x253c runnable [0x000000001431c000] java.lang.Thread.State: RUNNABLE at javax.swing.text.WhitespaceBasedB

应用程序(Samurai)中的某些操作在Java7(1.7.0_45_x64)中运行非常慢,但在1.6.0_34 32位中运行良好

等待时,此线程似乎在以下位置循环:

"AWT-EventQueue-0" prio=6 tid=0x000000001234d000 nid=0x253c runnable [0x000000001431c000]
   java.lang.Thread.State: RUNNABLE
    at javax.swing.text.WhitespaceBasedBreakIterator.setText(WhitespaceBasedBreakIterator.java:67)
    at javax.swing.text.GlyphView.getBreakSpot(GlyphView.java:794)
    at javax.swing.text.GlyphView.getMinimumSpan(GlyphView.java:551)
    at javax.swing.text.ParagraphView.calculateMinorAxisRequirements(ParagraphView.java:731)
    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)
    at javax.swing.text.html.BlockView.calculateMinorAxisRequirements(BlockView.java:146)
    at javax.swing.text.BoxView.checkRequests(BoxView.java:935)
    at javax.swing.text.BoxView.getMinimumSpan(BoxView.java:568)
    at javax.swing.text.html.BlockView.getMinimumSpan(BlockView.java:378)
    at javax.swing.text.BoxView.calculateMinorAxisRequirements(BoxView.java:903)
    at javax.swing.text.html.BlockView.calculateMinorAxisRequirements(BlockView.java:146)
    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)
    at javax.swing.plaf.basic.BasicTextUI$RootView.setSize(BasicTextUI.java:1714)
    at javax.swing.plaf.basic.BasicTextUI.getPreferredSize(BasicTextUI.java:912)
    at javax.swing.JComponent.getPreferredSize(JComponent.java:1660)
    at javax.swing.JEditorPane.getPreferredSize(JEditorPane.java:1332)
    at javax.swing.ScrollPaneLayout.layoutContainer(ScrollPaneLayout.java:790)
    at java.awt.Container.layout(Container.java:1503)
    at java.awt.Container.doLayout(Container.java:1492)
    at java.awt.Container.validateTree(Container.java:1688)
    at java.awt.Container.validate(Container.java:1623)
    - locked <0x0000000701400770> (a java.awt.Component$AWTTreeLock)
    at javax.swing.RepaintManager$2.run(RepaintManager.java:691)
    at javax.swing.RepaintManager$2.run(RepaintManager.java:689)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at javax.swing.RepaintManager.validateInvalidComponents(RepaintManager.java:688)
    at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1676)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:694)
    at java.awt.EventQueue$3.run(EventQueue.java:692)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
“AWT-EventQueue-0”优先级=6 tid=0x000000001234d000 nid=0x253c可运行[0x000000001431c000]
java.lang.Thread.State:可运行
位于javax.swing.text.WhitespaceBasedBreakIterator.setText(WhitespaceBasedBreakIterator.java:67)
位于javax.swing.text.GlyphView.getBreakSpot(GlyphView.java:794)
位于javax.swing.text.GlyphView.getMinimumSpan(GlyphView.java:551)
位于javax.swing.text.ParagraphView.calculateMinorAxisRequirements(ParagraphView.java:731)
在javax.swing.text.html.ParagraphView.calculateMinorAxisRequirements(ParagraphView.java:157)中
在javax.swing.text.BoxView.checkRequests(BoxView.java:935)中
在javax.swing.text.BoxView.getMinimumSpan(BoxView.java:568)中
在javax.swing.text.html.ParagraphView.getMinimumSpan(ParagraphView.java:270)
位于javax.swing.text.BoxView.calculateMinorAxisRequirements(BoxView.java:903)
位于javax.swing.text.html.BlockView.calculateMinorAxisRequirements(BlockView.java:146)
在javax.swing.text.BoxView.checkRequests(BoxView.java:935)中
在javax.swing.text.BoxView.getMinimumSpan(BoxView.java:568)中
位于javax.swing.text.html.BlockView.getMinimumSpan(BlockView.java:378)
位于javax.swing.text.BoxView.calculateMinorAxisRequirements(BoxView.java:903)
位于javax.swing.text.html.BlockView.calculateMinorAxisRequirements(BlockView.java:146)
在javax.swing.text.BoxView.checkRequests(BoxView.java:935)中
在javax.swing.text.BoxView.setSpanOnAxis(BoxView.java:343)中
在javax.swing.text.BoxView.layout(BoxView.java:708)中
位于javax.swing.text.BoxView.setSize(BoxView.java:397)
位于javax.swing.plaf.basic.BasicTextUI$RootView.setSize(BasicTextUI.java:1714)
位于javax.swing.plaf.basic.BasicTextUI.getPreferredSize(BasicTextUI.java:912)
位于javax.swing.JComponent.getPreferredSize(JComponent.java:1660)
位于javax.swing.JEditorPane.getPreferredSize(JEditorPane.java:1332)
位于javax.swing.ScrollPaneLayout.layoutContainer(ScrollPaneLayout.java:790)
位于java.awt.Container.layout(Container.java:1503)
位于java.awt.Container.doLayout(Container.java:1492)
位于java.awt.Container.validateTree(Container.java:1688)
位于java.awt.Container.validate(Container.java:1623)
-锁定(java.awt.Component$AWTTreeLock)
在javax.swing.repaitmanager$2.run(repaitmanager.java:691)
在javax.swing.repaitmanager$2.run(repaitmanager.java:689)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
位于javax.swing.repaitmanager.validateInvalidComponents(repaitmanager.java:688)
在javax.swing.repaitmanager$ProcessingRunnable.run(repaitmanager.java:1676)
在java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)中
位于java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
在java.awt.EventQueue.access$200(EventQueue.java:103)
位于java.awt.EventQueue$3.run(EventQueue.java:694)
在java.awt.EventQueue$3.run(EventQueue.java:692)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
位于java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
位于java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
在java.awt.EventDispatchThread.PumpeEventsforFilter(EventDispatchThread.java:161)
位于java.awt.EventDispatchThread.PumpeEventsforHierarchy(EventDispatchThread.java:150)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
在java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

让我猜猜看:
JEditorPane
中有一行巨大的未中断的文本,这可能是一个原因(显示一个巨大的线程转储)。但我的问题是,为什么在Java7中速度要慢得多(几分钟而不是大约1秒),您没有提供足够的信息。该方法的代码在不同版本之间根本没有更改。基本上,您只是猜测两次运行之间的关键区别在于Java的版本。相同的代码,不同的jvm,它会崩溃。您建议我提供哪些缺失的信息?我可以确认这是Java 7中的
BoxView#layout()
回归。因此,最好避免使用Java 6(或更早版本)
JEditorPane
所做的任何事情。所有这些东西在Java7中都会非常有效(通常是几秒钟与几分钟的差别)。