gpt4 book ai didi

java - String.split() 的内存问题

转载 作者:搜寻专家 更新时间:2023-11-01 00:51:51 24 4
gpt4 key购买 nike

我的程序目前存在内存问题,在检查应用程序时,我们发现 String.split() 方法使用了大量内存。我试过使用 StreamTokenizer,但这似乎让事情变得更加复杂。

有没有比 String.split() 方法使用更少内存的更好的方法将长的 Strings 拆分成小的 Strings

最佳答案

split 的任何实际使用都不太可能“消耗大量内存”。您的输入必须很大(很多很多兆字节),并且您的结果会分成数百万部分,这样才能引起注意。

下面是一些代码,它创建一个包含大约 180 万个字符的随机字符串,并将其拆分为超过 100 万个字符串,并输出使用的内存和花费的时间。

如您所见,它并不多:仅 350 毫秒就消耗了 61Mb。

public static void main(String[] args) throws Exception {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 99999; i++) {
sb.append(Math.random());
}
long begin = System.currentTimeMillis();
String string = sb.toString();
sb = null;
System.gc();
long startFreeMem = Runtime.getRuntime().freeMemory();
String[] strings = string.split("(?=[0-5])");
long endFreeMem = Runtime.getRuntime().freeMemory();
long execution = System.currentTimeMillis() - begin;

System.out.println("input length = " + string.length() + "\nnumber of strings after split = " + strings.length + "\nmemory consumed due to split = "
+ (startFreeMem - endFreeMem) + "\nexecution time = " + execution + "ms");
}

输出(在相当典型的 Windows 机器上运行):

input length = 1827035
number of strings after split = 1072788
memory consumed due to split = 71740240
execution time = 351ms

有趣的是,没有 System.gc() 使用的内存大约是 1/3:

memory consumed due to split = 29582328

关于java - String.split() 的内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11883788/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com