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,混合模式)
但我没有看到任何负责调用substring的相关代码,因此Oracle的JVM可能与此不同。 显然我不能将JMC与OpenJDK进行比较。
任何原因IP地址(我认为)需要以这种方式解析? 有什么方法可以避免它吗?