java - 内存不足错误 : Java heap space when trying to read 5 ints into an array

标签 java out-of-memory

<分区>

我正在练习 Java 新鲜面试编码示例。 我正在尝试编写一个程序来查找 1N 之间的重复数字,其中 N 由用户与数字本身一起给出。 这是代码:

import java.io.DataInputStream;
import java.io.IOException;

public class DuplicateNumbers {

    public static void main(String[] args) throws IOException {
        DataInputStream in = new DataInputStream(System.in);

        System.out.println(" Enter the number of numbers ");

        int a = in.readInt();
        int[] num = new int[a];
        System.out.println(" Enter the ints one by one ");
        for (int b = 0; b < a; b++) {
            System.out.println(" Enter no "+(b+1));
            num[b]=in.readInt();
        }
        int c = 0;
        for (int d = 0; d < a; d++) {
            int f = 0;
            c = num[d];
            for (int e=0; e<a; e++) {
                if (c==num[e]) {
                    f++;
                }
            }

            if(f > 1)
                System.out.println(" Duplicate number "+c);
        }
    }

}

但我在 Eclipse Neon 中遇到以下错误:

Enter the number of numbers 
5

Exception in thread "main" java.lang.OutOfMemoryError: 
Java heap space at DuplicateNumbers.main(DuplicateNumbers.java:14)

怎么了?为什么JVM堆空间错误? 代码编译并运行良好。

最佳答案

DataInputStream 适用于二进制而非文本。当您输入 4 个字节时,它会变成一个 32 位的 int 值,例如5,\n,\n,\n 大约是 9 亿,这就是它在创建数组时提示内存不足的原因。您可以通过单步执行调试器中的代码来检查这一点。

你需要的是文本输入,试试用

Scanner in = new Scanner(System.in);
System.out.println("Enter the number of numbers");
int a = in.nextInt();
in.nextLine(); // discard the rest of the line.

关于java - 内存不足错误 : Java heap space when trying to read 5 ints into an array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42091674/

相关文章:

android - 如何在 imageview android 中显示大尺寸位图?

Java OutOfMemoryError 奇怪的行为

java - 在 OutOfMemoryException 之前转储 Java 堆?

Java Spring RequestParam 为 null

java - 具有不同系统属性值的多个 Maven 插件执行

java - Java接口(interface)有什么真正的意义吗?

java - 在 intellij 上运行测试抛出 OutOfMemoryError

android - Android 内存不足字符串

java - 如何从 maven SNAPSHOT 存储库下载 SNAPSHOT 版本?

java - 使用 FileChannel 和 ByteArrays 读取 ASCII 文件