ho 3 file.
1. un file di prodotti (codice prodotto, descrizione, prezzo)
2.un file di magazzini (codice magazzino, indirizzo ecc)
3.un file di giacenze (codice prodotto, cod magazzino e quantità)
devo scrivere un programma che dato un codice prodotto restituisce l'elenco dei magazzini che lo contengono.

il punto è che mi dà un errore che non mi era mai uscito prima ossia:
exeption in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2760)
at java.util.Arrays.copyOf(Arrays.java:2734)
at java.util.ArrayList.ensureCapacity(ArrayList.java: 167)
at java.util.ArrayList.add(ArrayList.java:351)
at Azienda2.<init>(Azienda2.java:22)
at Tester.main(Tester.java:26)

le classi sono queste:
CLASSE PRODOTTO:
codice:
import java.io.PrintStream;
import java.util.Scanner;


public class Prodotto {
	private String codiceProdotto;
	private String descrizione;
	private double prezzo;
	
	public Prodotto(String aCodiceProdotto, String aDescrizione, double aPrezzo) {
		this.codiceProdotto=aCodiceProdotto;
		this.descrizione=aDescrizione;
		this.prezzo=aPrezzo;
	}

	public String getCodiceProdotto() {
		return codiceProdotto;
	}
	
	public String getDescrizione() {
		return descrizione;
	}
	
	public double getPrezzo() {
		return prezzo;
	}
	
	public void setPrezzo(double aPrezzo) {
		prezzo=aPrezzo;
	}
	
	public String toString() {
		return "Codice prodotto: " + codiceProdotto + "\n"
		+ "Descrizione: " + descrizione + "\n" 
		 +" Prezzo: " + prezzo;
	}
	
	public void print (PrintStream ps) {
		ps.println(codiceProdotto);
		ps.println(descrizione);
		ps.println(prezzo);
	}
	
	public static Prodotto read (Scanner s) {
		if(!s.hasNext())
			return null;
		String codiceProdotto=s.nextLine();
		
		if(!s.hasNext())
			return null;
		String descrizione=s.nextLine();
		
		if(!s.hasNext())
			return null;
		double prezzo=Double.parseDouble(s.nextLine());
		
		Prodotto p= new Prodotto (codiceProdotto, descrizione, prezzo);
		return p;
		
		
	}
	
}

CLASSE MAGAZZINO:

codice:
import java.io.PrintStream;
import java.util.Scanner;


public class Magazzino {
	private String codiceMagazzino;
	private String indirizzo;
	private String città;
    private String nazione;
    private int telefono;
    private int fax;
    
    public Magazzino(String aCodiceMagazzino, String aIndirizzo, String aCittà, String aNazione, int aTelefono, int aFax) {
    	this.codiceMagazzino=aCodiceMagazzino;
    	this.indirizzo=aIndirizzo;
    	this.città=aCittà;
    	this.nazione=aNazione;
    	this.telefono=aTelefono;
    	this.fax=aFax;
    }
    
    public String getCodiceMagazzino() {
    	return codiceMagazzino;
    }
    
    public String getIndirizzo() {
    	return indirizzo;
    }
    
    public String getCittà() {
    	return città;
    }
    
    public String getNazione() {
    	return nazione;
    }
    
    public int getTelefono() {
    	return telefono;
    }
    
    public int getFax () {
    	return fax;
    }
    
    public String toString() {
    	return "Codice magazzino: " + codiceMagazzino + "\n" +
    	"Indirizzo: " + indirizzo + "\n" +
    	"Città: " + città + "\n" + 
    	"Nazione: " + nazione +"\n" +
    	"Telefono: " + telefono + "\n" + 
    	"Fax: " + fax;
    }
    
    public void print (PrintStream ps) {
    	ps.println(codiceMagazzino);
    	ps.println(indirizzo);
    	ps.println(città);
    	ps.println (nazione);
    	ps.println(telefono);
    	ps.println(fax);
    }
    
    public static Magazzino read (Scanner s2) {
    	if(s2.hasNext())
    		return null;
    	String codiceMagazzino=s2.nextLine();
    	
    	if(s2.hasNext())
    		return null;
    	String indirizzo=s2.nextLine();
    	
    	if(s2.hasNext())
    		return null;
    	String città=s2.nextLine();
    	
    	if(s2.hasNext())
    		return null;
    	String nazione=s2.nextLine();
    	
    	if(s2.hasNextInt())
    		return null;
    	int telefono=s2.nextInt();
    	
    	if(s2.hasNextInt())
    		return null;
    	int fax=s2.nextInt();
    	
    	Magazzino m=new Magazzino (codiceMagazzino, indirizzo, città, nazione, telefono, fax);
    	return m;
    	
    }
}

CLASSE GIACENZA:

codice:
import java.io.PrintStream;
import java.util.Scanner;


public class Giacenza {
	private String codiceProdotto;
	private String codiceMagazzino;
	private int quantità;

	public Giacenza (String aCodiceProdotto, String aCodiceMagazzino, int aQuantità) {
		this.codiceProdotto=aCodiceProdotto;
		this.codiceMagazzino=aCodiceMagazzino;
	}


	public String getCodiceProdotto() {
		return codiceProdotto;
	}
	
	public String getCodiceMagazzino() {
		return codiceMagazzino;
	}
	
	public int getQuantità() {
		return quantità;
	}
	
	public void setQuantità(int aQuantità) {
		quantità=aQuantità;
	}
	
	public String toString() {
		return "Codice prodotto: " +codiceProdotto + "\n" + 
		"Codice magazzino: " +codiceMagazzino + "\n" +
		"Quantità: " + quantità;
	}
	
	public void print (PrintStream ps) {
		ps.println(codiceProdotto);
		ps.println(codiceMagazzino);
		ps.println(quantità);
	}
	
	public static Giacenza read (Scanner s3) {
		if(s3.hasNext())
			return null;
		String codiceProdotto=s3.nextLine();
		
		if(s3.hasNext())
			return null;
		String codiceMagazzino=s3.nextLine();
		
		if(s3.hasNextInt())
			return null;
		int quantità=s3.nextInt();
		
		Giacenza g=new Giacenza (codiceProdotto, codiceMagazzino, quantità);
		return g;
	}
}

CLASSE AZIENDA:
codice:
import java.util.ArrayList;
import java.util.Scanner;


public class Azienda2 {
	private ArrayList <Prodotto> prodotti;
	private ArrayList <Magazzino> magazzini;
	private ArrayList <Giacenza> giacenze;
	
	public Azienda2(Scanner s, Scanner s2, Scanner s3) {
		prodotti= new ArrayList <Prodotto>();
		magazzini=new ArrayList <Magazzino>();
		giacenze=new ArrayList <Giacenza>();
		
		while(s.hasNext()) {
			Prodotto p = Prodotto.read(s);
			prodotti.add(p);
		}
		
		while(s2.hasNext()) {
			Magazzino m=Magazzino.read(s2);
			magazzini.add(m);
		}
		
		while(s3.hasNext()) {
			Giacenza g=Giacenza.read(s3);
			giacenze.add(g);
		}
		
	}
	
	public void stampaArchivio() {
		for(Prodotto p: prodotti)
			System.out.println(p);
	}
	
	public void elencoMagazzini(String aCodiceProdotto){
		for(Giacenza g: giacenze){
			if(aCodiceProdotto.equalsIgnoreCase(g.getCodiceProdotto()))
			for(Prodotto p: prodotti)
				if(g.getCodiceProdotto().equalsIgnoreCase(p.getCodiceProdotto()))
			for(Magazzino m: magazzini)
		if(g.getCodiceMagazzino()==m.getCodiceMagazzino())
			System.out.println(m); 
			
	} }
	
	

}

E INFINE IL TESTER:

codice:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner;


public class Tester {

	public static void main(String[] args) throws FileNotFoundException {
		
		String percorso="/Users/alinagnerre/Desktop/ProdottoFile.txt";
		File f=new File(percorso);
		FileReader fr=new FileReader(f);
		Scanner s=new Scanner (fr);
		
		String percorso2="/Users/alinagnerre/Desktop/MagazzinoFile.txt";
		File f2=new File (percorso2);
		FileReader fr2=new FileReader(f2);
		Scanner s2=new Scanner (fr2);
		
		String percorso3="/Users/alinagnerre/Desktop/GiacenzaFile.txt";
		File f3=new File (percorso3);
		FileReader fr3=new FileReader(f3);
		Scanner s3=new Scanner (fr3);
		
		Azienda2 azienda2=new Azienda2 (s, s2, s3);
		
		azienda2.stampaArchivio();
		azienda2.elencoMagazzini("1x");
		
		

	}

}

SE POTETE SPIEGARMI DOVE HO SBAGLIATO?? GRAZIEEEEE