编程语言
首页 > 编程语言> > java – Bizzare线程块创建原始数组

java – Bizzare线程块创建原始数组

作者:互联网

我们最近遇到了生产机器出现大量线程转储的情况.它是树脂网络服务器,它给出了’全线程转储Java HotSpot(TM)64位服务器VM(14.0-b16混合模式):’.

有大量的BLOCKED线程,但它们让我很困惑. IE,一个是这样的:

"resin-8576" daemon prio=10 tid=0x00007f871827b800 nid=0x6b5 waiting for monitor entry [0x00007f864a7e6000]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at java.lang.String.toCharArray(String.java:2725)
        at java.lang.Thread.setName(Thread.java:1051)
        at com.caucho.server.port.TcpConnection.run(TcpConnection.java:605)
        at com.caucho.util.ThreadPool$Item.runTasks(ThreadPool.java:730)
        at com.caucho.util.ThreadPool$Item.run(ThreadPool.java:649)
        at java.lang.Thread.run(Thread.java:619)

那里的代码

char result[] = new char[count];

另一个就像

"resin-8574" daemon prio=10 tid=0x00007f8718277800 nid=0x6b3 waiting for monitor entry [0x00007f864a9e8000]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at java.lang.String.valueOf(String.java:2840)
        at java.lang.Thread.getName(Thread.java:1061)
        at com.caucho.server.port.TcpConnection.run(TcpConnection.java:603)
        at com.caucho.util.ThreadPool$Item.runTasks(ThreadPool.java:730)
        at com.caucho.util.ThreadPool$Item.run(ThreadPool.java:649)
        at java.lang.Thread.run(Thread.java:619)

String的代码在哪里

return new String(data);

那些看似奇怪的地方被封锁了.

任何人都可以提出这些电话会阻塞的原因吗?

谢谢,
-kal

解决方法:

听起来这个方法可能被称为很多并产生大量垃圾.当GC运行这些方法时,分配对象在等待GC时似乎是阻塞的.

我会尝试更新的JVM.例如Java 6更新24(其中包含JVM内部版本19或20),因为您似乎拥有较旧的JVM.

标签:java,thread-safety,deadlock,blocking,resin
来源: https://codeday.me/bug/20190704/1381700.html