java - .OutOfMemoryError:Java 堆空间
问题描述
我想重复字符串's'并得到一个包含'n'个字符的大字符串,并想在大字符串中找到多少个'a'。我的代码在下面,它给了我“OutOfMemoryError: Java heap space”错误,找不到解决这个问题的方法
String s = "abcab";
long n = 1000000000000l;
int strLength = s.length();
double temp = n / strLength;
long tempTwo = (long) temp + 1;
long countOfAs = 0;
// making large String
StringBuilder sb = new StringBuilder(s);
for (long i = 0; i < tempTwo; i++) {
sb.append(s);
}
//take the sub string which's length is n
String out = sb.substring(0, (int) n);
//Find 'a's in the sub string
char[] stringToCharArray = out.toCharArray();
for (int i = 0; i < n; i++) {
if (stringToCharArray[i] == 'a') {
countOfAs += 1;
}
}
System.out.println(countOfAs + ">>>>");
解决方案
在这里您可以看到如何在 Java 中
增加堆大小:增加 Java 中的堆大小
有更简单的方法来计算字符串中的 a,它只是:
countOfAs = n * 2;
您的代码是错误的,因为第二个 for 循环必须是“i < s.length() * n”,因为您的字符串有多个字符。
如果您的 String 确实是 @Progman 评论的 2 TB 大小,那么您应该考虑一种算法,该算法以几个间隔计算 countOfAs 。
推荐阅读
- r - 如何使用 lattice 包(不是 ggplot2)创建边际直方图散点图?
- kubernetes - 使用 Terraform 创建 GKE 集群和命名空间
- python-3.x - 如何获取变量的原始值?
- fortran - 需要帮助:Fortran 无限循环
- python - 从ajax中提取数据
- flutter - Flutter setState()不适用于GridView中的小部件
- azure-devops - AzureDevops 中的累积流程图 - 按区域路径
- javascript - 如何在 JavaScript 中访问 JSON 数组
- mysql - MySQL insert or update with nested query
- python - 如何直接从 python 脚本修改 Windows 10 路径变量