首页 > 解决方案 > .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 中
增加堆大小:增加 Java 中的堆大小

有更简单的方法来计算字符串中的 a,它只是:
countOfAs = n * 2;

您的代码是错误的,因为第二个 for 循环必须是“i < s.length() * n”,因为您的字符串有多个字符。

如果您的 String 确实是 @Progman 评论的 2 TB 大小,那么您应该考虑一种算法,该算法以几个间隔计算 countOfAs 。


推荐阅读