Arraygröße von 9^9 ?

Status
Nicht offen für weitere Antworten.
C

Chris19842

Gast
Hi !

ich möchte alle zahlen von 1 bis 9^9 in ein Array speichern, leider bekomme ich eine ´n outofmemoryerror...
offenbar gibt es nicht so große arrays ???

Weiß einer Rat ?

Vielen Dank!
Chris
 
C

Chris19842

Gast
Code:
	private static int[] nummern = new int[387420489];
	private static  int count = 0;
	
	public static void main(String[] args) {
		for (int a = 1; a< 10;a++)
			for (int b = 1; b< 10;b++)
				for (int c= 1; c< 10;c++)
					for (int d = 1; d< 10;d++)
						for (int e = 1; e< 10;e++)
							for (int f = 1; f< 10;f++)
								for (int g = 1; g< 10;g++)
									for (int h = 1; h< 10;h++)
										for (int i = 1; i< 10;i++){
											nummern[count]=(a*100000000 + b*10000000 + c*1000000 + d*100000 + e*10000 + f*1000 + g*100+ h*10 + i);
											//System.out.println(a*100000000 + b*10000000 + c*1000000 + d*100000 + e*10000 + f*1000 + g*100+ h*10 + i);
											count++;
											 
										}
		
		
											
			
		
	}
 
S

SlaterB

Gast
für dieses kühne Unterfangen brauchst du wohl

387.420.489 * 4 Byte oder so,
also 1.6 GB Hauptspeicher?

ob du soviel Speicher hast musst du wissen,
wie man den dem Java-Program zuweist steht z.B. hier
http://www.java-forum.org/de/viewtopic.php?t=53334

Tipp: fange wenigstens zum testen mal klein an, bis 5^5 oder so ;)
 

EgonOlsen

Bekanntes Mitglied
Natürlich geht das, aber das sind eben auch mal ganz locker 387420489 Zahlen...*4 wenn du sie als int speichern willst, das macht ca. 1.5GB für das Array. Wenn du der VM genug Speicher gibst, dann geht das schon. Fragt sich nur, ob das die beste Lösung ist. Wieso willst du die alle speichern? Du kennst sie doch schon!?
 

P3AC3MAK3R

Top Contributor
Ich hatte beim Überfliegen Deines Beitrages vorhin wohl "*" (mal) statt "^" (hoch) gelesen.

Bei der Datenmenge ist es schon nachvollziehbar, wenn der Speicher nicht ausreicht.

Was hast Du denn eigentlich mit dem befüllten Array vor?
 
S

SlaterB

Gast
wie wärs übrigens Code-technisch mit

Code:
for (int a = 1; a <= nummern.length; a++) {
   nummern[a-1] = a; 
}
;)
 

mikachu

Top Contributor
btw, mit deinem code erhälst du nicht die zahlen von 1 bis 9^9, sondern 111111111 bis 9^9 ;)
und die ganzen zehnerpotenzen fallen auch raus

btw, es sind knapp 400000000 integer variablen, welche du speichern willst...
ein integer belegt 4Byte.
4 * 400M sind ca 16Mrd... Byte -> ungefähr 16GB...

per default sind der jvm ich glaube 64MB (Xms) initialspeicher und 128MB (Xmx) als maximum festgelegt...

das klappt nie und nimmer ;)
 
S

SlaterB

Gast
tztz, dass es nur 1.6 GB sind steht doch schon zweimal im Thread..

> und die ganzen zehnerpotenzen fallen auch raus

auch 1011111111 usw, alle Nullen ;)
 

Saxony

Top Contributor
Hiho,

irgendwie versteh ich die Aufgabe net.
Der Wert eines Feldes ist doch zu jedem Zeitpunkt berechenbar.

Wieso muss ich da alles im Speicher halten?

Oder willst du nen Mapping-Array wie man es zum Beispiel damals mit Cosinus und Sinus Berechnungen gemacht hat um das Programm zu beschleunigen ?

Alternativ kannste ja nen data_file machen, wo de alle 387.420.489 Ergebnisse reinschreibst und bei Bedarf von dort DAS ENTSPRECHENDE (oft nur eins !) ausliest.

Mit etwas Programmier-"Glück" brauchste das data_file auch net per Hand schreiben. :D

Übrigens dürfte dann hier das Raussuchen des Wertes wesentlich länger dauern als die direkte vor Ort Berechnung.

bye Saxony
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Arraygröße anpassen Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben