Java可运行线程卡在本机方法中,长时间消耗高CPU

Java可运行线程卡在本机方法中,长时间消耗高CPU,java,cpu,native-code,Java,Cpu,Native Code,嗨,我有一个例子,一堆相同的线程在执行本机方法时处于可运行状态,并且在其中停留了很长时间(超过一个小时) 我就是搞不懂这是怎么回事?一小时后,线程终止 您可以添加FakeBarChartEntry的代码吗?您或您正在使用的东西似乎编写了一个使用反射的equals()方法。这是一个非常糟糕的主意。在一个方法中包含大量线程并不意味着存在多线程问题(特别是当所有线程都报告为可运行时)。这种情况可能就是经常调用该方法。在堆栈跟踪中,我看到了类似“图表数据”(可能有很多项)的内容,这是一种排序操作,它调用

嗨,我有一个例子,一堆相同的线程在执行本机方法时处于可运行状态,并且在其中停留了很长时间(超过一个小时)


我就是搞不懂这是怎么回事?一小时后,线程终止

您可以添加
FakeBarChartEntry
的代码吗?您或您正在使用的东西似乎编写了一个使用反射的
equals()
方法。这是一个非常糟糕的主意。在一个方法中包含大量线程并不意味着存在多线程问题(特别是当所有线程都报告为
可运行时)。这种情况可能就是经常调用该方法。在堆栈跟踪中,我看到了类似“图表数据”(可能有很多项)的内容,这是一种排序操作,它调用类似于
ArrayList.indexOf
的方法,该方法调用基于反射的
equals
实现。这听起来像是一个性能噩梦的完美配方,包括操作确实需要数小时才能完成的可能性。
"http-bio-8080-exec-806" daemon prio=10 tid=0x00007fd4b0174800 nid=0x7e09 runnable [0x00007fd84a141000]
   java.lang.Thread.State: RUNNABLE
    at java.lang.Class.getSuperclass(Native Method)

"http-bio-8080-exec-795" daemon prio=10 tid=0x00007fce6c007800 nid=0x7e01 runnable [0x00007fd3f037a000]
   java.lang.Thread.State: RUNNABLE
    at java.lang.Class.getSuperclass(Native Method)

"http-bio-8080-exec-802" daemon prio=10 tid=0x00007fd67c11a000 nid=0x7dff runnable [0x00007fd4723b1000]
   java.lang.Thread.State: RUNNABLE
    at java.lang.Class.getSuperclass(Native Method)

"http-bio-8080-exec-800" daemon prio=10 tid=0x00007fd67c2a8000 nid=0x7dfe runnable [0x00007fd7f2dfe000]
   java.lang.Thread.State: RUNNABLE
    at java.lang.Class.getSuperclass(Native Method)

"http-bio-8080-exec-783" daemon prio=10 tid=0x00007fcd68001800 nid=0x7699 runnable [0x00007fd2b05fd000]
   java.lang.Thread.State: RUNNABLE
    at java.lang.Class.getSuperclass(Native Method)

"http-bio-8080-exec-612" daemon prio=10 tid=0x00007fd53001b000 nid=0x55a9 runnable [0x00007fd5013cf000]
   java.lang.Thread.State: RUNNABLE 
    at java.lang.Class.getSuperclass(Native Method)
    at org.apache.commons.lang.builder.EqualsBuilder.reflectionEquals(EqualsBuilder.java:286)
    at org.apache.commons.lang.builder.EqualsBuilder.reflectionEquals(EqualsBuilder.java:124)
    at com.tngtech.jira.plugins.gadget.data.FakeBarChartEntry.equals(FakeBarChartEntry.java:44)
    at java.util.ArrayList.indexOf(Unknown Source)
    at java.util.ArrayList.contains(Unknown Source)
    at com.tngtech.jira.plugins.gadget.data.BarChartDataSorter.currentIsPriorToBuffer(BarChartDataSorter.java:121)
    at com.tngtech.jira.plugins.gadget.data.BarChartDataSorter.sortEntriesAndFillGaps(BarChartDataSorter.java:98)
    at com.tngtech.jira.plugins.gadget.data.BarChartDataSorter.sortAndEnrichChartData(BarChartDataSorter.java:27)
    at com.tngtech.jira.plugins.gadget.data.BarChartDataCollector.collectChartData(BarChartDataCollector.java:54)
    at com.tngtech.jira.plugins.gadget.BarChartGadget.createRestClass(BarChartGadget.java:111)
    at com.tngtech.jira.plugins.gadget.BarChartGadget.getVersionsForProject(BarChartGadget.java:85)
    at com.tngtech.jira.plugins.gadget.BarChartGadget.getVersionsForProject(BarChartGadget.java:67)