当前位置: 首页 > 知识库问答 >
问题:

编写整数平方根程序时出现Java堆空间错误

邹杰
2023-03-14

我试图找出整数的平方根,但如果整数值太大,例如2147395599。然后下面的程序给出了这个异常。

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at com.aakash.BinarySearch.SquareRoot.mySqrt(SquareRoot.java:12)
    at com.aakash.BinarySearch.SquareRoot.main(SquareRoot.java:8)

Process finished with exit code 1

平方根程序

package com.aakash.BinarySearch;

import java.util.Arrays;

public class SquareRoot {

    public static void main(String[] args) {
            int ans = mySqrt(2147395599);
        System.out.println(ans);
    }
    public static int mySqrt(int x) {
        int[] arrayUpton = new int[x];
        int start =0;
        int end = arrayUpton.length-1;
        int mid =  start + (start-end)/2;

        for (int index = start; index <= end; index++) {
            arrayUpton[index]=index+1;
        }

        for (int index = start; index < end; index++) {
            if(arrayUpton[index]*arrayUpton[index]==x){
                return arrayUpton[index];
            } else if (arrayUpton[index]*arrayUpton[index]>x) {
                return arrayUpton[index-1];
            }
        }
        return 0;
    }

}

共有1个答案

禹正阳
2023-03-14

您正在尝试分配一个包含近2^31个整数的数组。这将占用8GB,对于您的JVM堆来说(显然)太大了。(它很可能对您的计算机来说太大了。)

但你真正的问题是你的算法。

你不需要分配一个巨大的数组来计算整数平方根。即使通过搜索所有(正)int值来实现。

考虑一下:您的代码仔细地将每个数组元素设置为比数组下标大一的数字。然后它从数组中检索值以使用它们。但是如果你知道,arrayUpton[i]包含i1。。。你不需要取回它。只需将1添加到i中,而不是从数组中获取(相同)值。

此外:

  • 你的算法没有实现二进制搜索。我甚至不相信它会起作用
  • 我建议你用谷歌搜索一下,看看是否能找到更好的算法
 类似资料:
  • 当项目由cordova构建时,我得到了Java堆空间错误。该错误是在我将AdmobFree和SocialSharing Plugings安装到项目中时开始的。 我尝试使用cmd命令增加堆空间,但这对我没有帮助。项目看起来编译成功,但我无法在Android Studio上运行。我希望你能帮助我。问候 科尔多瓦构建android检查JavaJDK和Android SDK版本ANDROID_SDK_RO

  • 我试图将整个文件作为字符串对象加载到内存中。但是在应用程序结束后,我的内存不会被释放回垃圾收集器。我知道在内存中读取整个文件是不好的,但是我必须将数据发送到另一个类,有人能帮助我如何做这只是一个流,而不是将整个代码加载到内存中,如果没有,有人能说我现在的代码有什么问题吗

  • 在Ubuntu中,当我运行hadoop示例时: 在日志中,我得到的错误为: 信息映射。JobClient:任务Id:尝试\u 201303251213\u 0012\u m\u000000 \u 2,状态:失败错误:Java堆空间13/03/25 15:03:43信息映射。JobClient:任务Id:trunt\u 201303251213\u 0012\u m\00000 1\u 2,状态:F

  • 已尝试将MAVEN_OPTS设置为: 有什么线索可以解决吗?

  • 我正在尝试使用scala执行小计算。Im使用datastax-4.6。我有6个节点,每个16gb RAM和8核。当我尝试执行scala程序时,它会显示以下错误。 错误ActorSystemImpl:线程[sparkDriver-akka.actor.default-dispatcher-17]关闭ActorSystem[sparkDriver]java时出现未捕获的致命错误。lang.OutOfM

  • 我正在Android Studio中开发一个Android应用程序,今天当我按下“运行”按钮时,它突然无法编译。错误如下: 错误:任务': app: pack ageInstantRunResourcesDebug'执行失败。Java堆空间 我试着清理并重建这个项目,但没有成功。