写入套接字期间的Java String垃圾

时间:2015-08-04 10:04:08

标签: java string sockets garbage

Java Mission Control显示写入SocketOutputStream期间生成的垃圾MB

Stack Trace                                          TLABs 'Total TLAB' Size(bytes) Pressure(%)
java.util.Arrays.copyOfRange(char[], int, int)                  37  34,002,872  65.245
  java.lang.String.<init>(char[], int, int)                     37  34,002,872  65.245
    java.lang.String.substring(int)                             20  19,329,920  37.09
     java.net.SocketOutputStream.socketWrite(byte[], int, int)  20  19,329,920  37.09
        java.net.SocketOutputStream.write(byte[], int, int)     20  19,329,920  37.09

看起来这35 MB的垃圾。

我在Ubuntu 12.04上

/ usr / lib / jvm / java-8-oracle / jre / bin / java -version java版“1.8.0_45” Java(TM)SE运行时环境(版本1.8.0_45-b14) Java HotSpot(TM)64位服务器VM(版本25.45-b02,混合模式)

我在这里检查了OpenJDK http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/java/net/SocketOutputStream.java#SocketOutputStream.socketWrite%28byte%5B%5D%2Cint%2Cint%29

但我没有看到任何负责调用substring的相关代码,因此Oracle的JVM可能与此不同。 显然我不能将JMC与OpenJDK进行比较。

任何原因IP地址(我认为)需要以这种方式解析? 有什么方法可以避免它吗?

0 个答案:

没有答案