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]
第一?
答
为什么代码需要
Arrays.copyOfRange
?
因为split
创造了新的String
S必填到substring(int beginIndex, int endIndex)
其内部调用new String(char value[], int offset, int count)
,并作为String
是不变,它提供的char
array
的安全拷贝,避免了因为否则受任何外部修改您的然后String
实例可能是可变的,这是我们想要避免的。
检查的String(char value[], int offset, int count)
的Javadoc:
分配一个新的
String
包含从 字符数组参数的一个子字。 offset参数是子数组的第一个字符的 的索引,count参数指定子阵列的长度 。 子数组的内容被复制; 字符数组的后续修改不会影响 新创建的字符串。
你看了看代码吗? http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7u40-b43/java/lang/String.java#String.split%28java.lang.String%2Cint%29 –
*“我发现代码的用法非常高。”*相比什么?这真的是你的应用程序的瓶颈吗? – UnholySheep
如果您正在使用Eclipse或Netbean之类的IDE,则可以跳转到String类以查看为什么'split'方法调用Arrays.copyOfRange。 这很正常。 –