0

I need to write code that moves a point in a grid, by adding or subtracting a number. The code works while the parameter n is 5 digits and print the correct answers. When I make it bigger (and still inside the integers interval), it gives me the heap space error.

This is the code.

import java.util.*;
import java.awt.Point;

public class Particles {

    public static void main(String[] args) {
        runSimulation(11234234, 132423, 50);
    }

    public static void runSimulation(int n, int s, int t) {

        // tre punkt objekter dannes
        Point P1 = new Point();
        Point P2 = new Point();
        Point P3 = new Point();

        System.out.println("n=" + n + " s=" + s + " t=" + t);

        // n x n griddet, repræsenteres ved et to dimensionelt array
        int grid[][] = new int[n][n];

        // punkter tildeles til at starte en tilfældig placering i griddet
        P1.x = new Random().nextInt(grid.length);
        P1.y = new Random().nextInt(grid.length);

        P2.x = new Random().nextInt(grid.length);
        P2.y = new Random().nextInt(grid.length);

        P3.x = new Random().nextInt(grid.length);
        P3.y = new Random().nextInt(grid.length);

        System.out.println("move " + 1 + ", positions P1=" + "[" + P1.x + ";" + P1.y + "]" + " P2="
                + "[" + P2.x + ";" + P2.y + "]" + " P3=" + "[" + P3.x + ";" + P3.y + "]");

        // for løkken udfører bevægelserne baseret på argumentet t for metoden
        for (int i = 2; i <= t; i++) {
            Random random = new Random();

            int range = random.nextInt((s + 1) + s) - s;

            P1.x += range;
            P1.y += range;

            P2.x += range;
            P2.y += range;

            P3.x += range;
            P3.y += range;
            
            // if sætninger for at gøre rede for at flytte en partikel ind i den nærmeste plads i griddet, hvis partiklen er uden for griddet.

            if (P1.x > n-1) {

                P1.x = n-1;

            }
            if (P1.x < 0) {
                P1.x = 0;

            }
            if (P2.x > n-1) {

                P2.x = n-1;
            }
            if (P2.x < 0) {
                P2.x = 0;

            }
            if (P3.x > n-1) {

                P3.x = n-1;
            }
            if (P3.x < 0) {
                P3.x = 0;

            }
            if (P1.y > n-1) {

                P1.y = n-1;

            }
            if (P1.y < 0) {
                P1.y = 0;

            }
            if (P2.y > n-1) {

                P2.y = n-1;
            }
            if (P2.y < 0) {
                P2.y = 0;

            }
            if (P3.y > n-1) {

                P3.y = n-1;
            }
            if (P3.y < 0) {
                P3.y = 0;

            }

            System.out.println("move " + i + ", positions P1=" + "[" + P1.x + ";" + P1.y + "]" + " P2="
                    + "[" + P2.x + ";" + P2.y + "]" + " P3=" + "[" + P3.x + ";" + P3.y + "]");
        }

    }
}

And the error I get is this

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at testpackingheat.Particles.runSimulation(Particles.java:22)
    at testpackingheat.Particles.main(Particles.java:9)

This comes from when the grid size is too big, and I have tried allocating more RAM and run it, but the same error comes out.

Mark Rotteveel
  • 100,966
  • 191
  • 140
  • 197
  • 2
    You'd need 500+TB of memory to fit a 2D int array of 11234234 * 11234234 (or 11234234 * 11234234 * 4 = 504,832,054,267,024 bytes), ignoring overhead of the arrays itself. – Mark Rotteveel Oct 13 '22 at 11:44

0 Answers0