Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
写入套接字期间的Java字符串垃圾_Java_String_Sockets_Garbage - Fatal编程技术网

写入套接字期间的Java字符串垃圾

写入套接字期间的Java字符串垃圾,java,string,sockets,garbage,Java,String,Sockets,Garbage,Java任务控制显示写入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.<ini

Java任务控制显示写入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
堆栈跟踪TLAB“总TLAB”大小(字节)压力(%)
copyOfRange(char[],int,int)37 34002872 65.245
java.lang.String.(char[],int,int)37 34002872 65.245
java.lang.String.substring(int)20 19329920 37.09
SocketOutputStream.socketWrite(字节[],int,int)20 19329920 37.09
java.net.SocketOutputStream.write(字节[],int,int)20 19329920 37.09
从外观上看,这是35MB的垃圾

我在Ubuntu 12.04上

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

我在这里签入了OpenJDK

但是我没有看到任何相关的代码负责调用子字符串,所以Oracle的JVM在这里可能不同。 显然,我不能将JMC与OpenJDK进行比较

有什么原因需要这样解析IP地址吗?
有什么办法可以避免吗?

您是如何判断解析IP地址的?这是在连接套接字时完成的,而不是在写入期间。Oracle在
socketWrite
中也不做任何字符串操作,所以我想知道您是如何得出stacktrace的。是不是度量本身引入了垃圾?可能一个探测器试图记录流量。Stacktrace是从JavaMissionControl获取的,我只是假设它将是IP+端口解析@比齐克洛普也在想这件事。可能是JMC向代码中注入了一些东西,以获取IP和端口的统计信息,以及传输了多少数据。我将尝试禁用该功能,看看这是否会导致difference@ivenhov当您到达
SocketOutputStream
时,您已经打开了端口,并且正在使用
FileDescriptor
写入流。您认为它将如何解析IP地址?这是在连接套接字时完成的,而不是在写入期间。Oracle在
socketWrite
中也不做任何字符串操作,所以我想知道您是如何得出stacktrace的。是不是度量本身引入了垃圾?可能一个探测器试图记录流量。Stacktrace是从JavaMissionControl获取的,我只是假设它将是IP+端口解析@比齐克洛普也在想这件事。可能是JMC向代码中注入了一些东西,以获取IP和端口的统计信息,以及传输了多少数据。我将尝试禁用该功能,看看这是否会导致difference@ivenhov当您到达
SocketOutputStream
时,您已经打开了端口,并且正在使用
FileDescriptor
写入流。