CPU使用率( “”)

问题描述:

这里是我的代码:CPU使用率( “”)

String[] s = str.split(",") 

但是,由jstack文件,我发现代码的使用率非常高。

java.lang.Thread.State: RUNNABLE 
    at java.util.Arrays.copyOfRange(Arrays.java:3664) 
    at java.lang.String.<init>(String.java:207) 
    at java.lang.String.substring(String.java:1969) 
    at java.lang.String.split(String.java:2353) 
    at java.lang.String.split(String.java:2422) 

为什么代码需要Arrays.copyOfRange?我应该定义String[length]第一?

+0

你看了看代码吗? http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7u40-b43/java/lang/String.java#String.split%28java.lang.String%2Cint%29 –

+4

*“我发现代码的用法非常高。”*相比什么?这真的是你的应用程序的瓶颈吗? – UnholySheep

+0

如果您正在使用Eclipse或Netbean之类的IDE,则可以跳转到String类以查看为什么'split'方法调用Arrays.copyOfRange。 这很正常。 –

为什么代码需要Arrays.copyOfRange

因为split创造了新的String S必填到substring(int beginIndex, int endIndex)其内部调用new String(char value[], int offset, int count),并作为String不变,它提供的chararray的安全拷贝,避免了因为否则受任何外部修改您的然后String实例可能是可变的,这是我们想要避免的。

检查的String(char value[], int offset, int count)的Javadoc:

分配一个新的String包含从 字符数组参数的一个子字。 offset参数是子数组的第一个字符的 的索引,count参数指定子阵列的长度 。 子数组的内容被复制; 字符数组的后续修改不会影响 新创建的字符串。