zu Beginn der main: Heap space ermitteln und hochsetzen

Status
Nicht offen für weitere Antworten.

tomstue

Mitglied
Hallo zusammen

Wir haben ein rechenintensives Programm, und würde daher gerne den Heap-Space des Rechners voll ausnutzen und so hoch wie möglich setzen. Das diese Grenze von PC zu PC verschieden ist, ist doch richtig oder? und somit muss erst die individuelle Grenze des PC's ermittelt werden bevor man sie setzt...

Wißt ihr wie man dies in Java zu Beginn der main realisieren kann?

mfg

Tom
 
M

maki

Gast
Gar nicht.

Man setzt den Xms und Xmx Parameter beim start der VM.
 

Verjigorm

Top Contributor
Wieso sagen immer alle, das würde nicht gehen?

Man kann doch eine jar starten, die den Arbeitsspeicher ermittelt und mit diesen Daten das eigentliche Programm als neuen Prozess mit den ermittelten Übergabeparametern starten
 
M

maki

Gast
Verjigorm hat gesagt.:
Wieso sagen immer alle, das würde nicht gehen?
Weil es auch nciht geht.

Verjigorm hat gesagt.:
Man kann doch eine jar starten, die den Arbeitsspeicher ermittelt und mit diesen Daten das eigentliche Programm als neuen Prozess mit den ermittelten Übergabeparametern starten
Damit startet man ja eine neue VM ;)
Also kein widerspruch zu meiner Aussage.

maki ist nicht alle
Ach...
 

tomstue

Mitglied
Also ich habe jetzt folgendes gemacht:

System.gc();

String userdir = System.getProperty("user.dir");
String cmd = "java -Xmx1024m -jar \""+userdir+"\\MeineAnwendung.jar\"";
try {
Runtime.getRuntime().exec(cmd);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

long totalMemory = Runtime.getRuntime().totalMemory();
long freeMemory = Runtime.getRuntime().freeMemory();

System.out.println("free Memory: "+ freeMemory);
System.out.println("total Memory: " + totalMemory);
System.out.println("totalMemory - freeMemory: " + (totalMemory-freeMemory));



als Ausgabe kommt aber leider:

free Memory: 4949648
total Memory: 5177344
totalMemory - freeMemory: 227696

umgerechnet sind 227696Bytes aber 0.217148MB und nicht 1024 wie oben angegeben.

Was habe ich falsch gemacht?
 
S

SlaterB

Gast
wozu das Runtime.getRuntime().exec(cmd);?

zum Testen kannst du das doch direkt in die Konsole eintippen,
denn der Speicher wird, wie Uns maki bereits sagt, nur in dem neu geöffneten Programm erhöht, nicht im aktuellen Programm,

sieht so aus als stände der Memory-Code im Programm, welches Runtime.getRuntime().exec() ausführt

--------

freeMemory und totalMemory geben eh nur Auskunft über den aktuell genutzen Speicher,

Runtime.getRuntime().maxMemory()
heißt das Zauberwort
 

tomstue

Mitglied
Also ich gebe es nicht in die commando-zeile ein weil es ja automatisch im programm ablaufen soll.

Wenn ich also die Lösung von Andre nehme und sage

Code:
public static void main(String[] args) {		
		System.out.println("totalMemory:" + Runtime.getRuntime().totalMemory());
		System.out.println("freeMemory: " + Runtime.getRuntime().freeMemory());
		System.out.println("MaxMemory: " + Runtime.getRuntime().maxMemory());
		
		System.gc();
		// TODO Auto-generated method stub
		String userdir = System.getProperty("user.dir");
		String cmd = "java -Xmx1024m -jar \""+userdir+"\\MeineAnwendung.jar\"";
		try {
			Runtime.getRuntime().exec(cmd);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.exit(0);
	}

dann soll ja die Anwendung neu gestartet werden. Mein Prob ist

a) das sich bei meiner Ausgabe nichts verändert, auch wenn ich 2mal hintereinander die main ausführe

b) Andre sagt die Anwendung startet nach "System.exit(0)" neu - aber wenn meine main neu gestartet werden würde, würde doch alles erneut ausgeführt oder verstehe ich das falsch? Wenn die main neu ausgeführt werden würde, wäre ich dann nicht in einer endlos-Schleife?
 

tomstue

Mitglied
leider besteht mein Problem noch - unter dem link sind leider die einzelheiten nicht erläutert. Wie müßte mein code denn aussehen, damit es funktioniert?
 
S

SlaterB

Gast
die Endlosschleife kannst du mit einem Argument 'hör auf' abstellen,
zum Rest arbeite mal mit meinem Testprogramm:

Code:
package test;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Test {

	public static void main(String[] args) throws Exception {
		System.out.println("args: " + Arrays.toString(args));
		System.out.println("totalMemory:" + Runtime.getRuntime().totalMemory());
		System.out.println("freeMemory: " + Runtime.getRuntime().freeMemory());
		System.out.println("MaxMemory: " + Runtime.getRuntime().maxMemory());

		System.gc();
		String userdir = System.getProperty("user.dir");
		System.out.println(userdir);
		String cmd = "java -Xmx1024m test.Test tubido";
		if (args.length < 1) {
			System.out.println("rekursion");
			Process p = Runtime.getRuntime().exec(cmd);
			Thread.sleep(200);
			BufferedReader in = new BufferedReader(new InputStreamReader(p
					.getInputStream()));
			BufferedReader err = new BufferedReader(new InputStreamReader(p
					.getErrorStream()));
			String line = null;
			while ((line = in.readLine()) != null) {
				System.out.println("line: " + line);
			}
			while ((line = err.readLine()) != null) {
				System.out.println("err: " + line);
			}
		}

		System.out.println("ende");
	}
}

--------

Ausgabe:
args: []
totalMemory:643072
freeMemory: 0
MaxMemory: 9223372036854775807 [interessant unter Ubuntu von Eclipse aus gestartet]
/home/slater/workspace/Test [Test ist auch Name des Projektes]
rekursion
line: args: [tubido]
line: totalMemory:7864320
line: freeMemory: 7642680
line: MaxMemory: 1034027008
line: /home/slater/workspace/Test
line: ende
ende
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G UUencoding bring Fehlermeldung: No beginn line / Missing 'end' line Allgemeine Java-Themen 0
P Fehler: Hauptklasse Main konnte nicht gefunden oder geladen werden Ursache: java.lang.ClassNotFoundException: Main Allgemeine Java-Themen 24
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
Calli11 Was muss ich hier in die Main schreiben, damit das Programm ausgeführt wird? Allgemeine Java-Themen 4
Encera Zweite Main-Methode zuschalten Allgemeine Java-Themen 18
Splayfer Problem: no main manifest attribute Allgemeine Java-Themen 3
M Keine weitere Eingabe in der Main möglich. Eventueller Ansatz über while. Allgemeine Java-Themen 8
F Konstante an main - Argumenten initialisieren Allgemeine Java-Themen 1
S Exception in thread "main" java.lang.NullPointerException at FamilienApp.main(FamilienApp.java:15) Allgemeine Java-Themen 1
F Was ist der Dateityp meines Parameters für die Main Methode. Allgemeine Java-Themen 6
E HILFE !! Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils Allgemeine Java-Themen 4
B Übernommene Variablen(werte) aus der Main-Klasse ändern? Allgemeine Java-Themen 9
W Warum muss void main() public sein? Allgemeine Java-Themen 3
G Programm, das nach abgearbeiteter main Methode weiterläuft Allgemeine Java-Themen 72
javaerd Binomialkoeffizient ausrechnen, Exception in thread "main" java.lang.StackOverflowError Allgemeine Java-Themen 6
L sortiertes Array im main aufrufen klappt nicht. Allgemeine Java-Themen 3
Tort-E Manifest Main-Class Allgemeine Java-Themen 8
J Exception in thread "main" java.lang.NoClassDefFoundError Allgemeine Java-Themen 4
A main-class Not found Allgemeine Java-Themen 3
A Konstrukt ohne Main für Xml-Parser Allgemeine Java-Themen 1
P JDK installieren Error: Could not find or load main class HelloWorld.java Allgemeine Java-Themen 3
I JFrame Icon in Main übergeben Allgemeine Java-Themen 1
Phash Can't find Main Class Allgemeine Java-Themen 4
X Could not find the main class programm will exit (textdokument) Allgemeine Java-Themen 3
127.0.0.1 Subversion neues SVN Projekt, keine Main gefunden ?! Allgemeine Java-Themen 7
S Could not find the main class Allgemeine Java-Themen 7
B Mal wieder "Could not find the main class" Allgemeine Java-Themen 3
C Could not find the main class. Allgemeine Java-Themen 15
I Main wird nicht gefunden Allgemeine Java-Themen 3
B Threads Main Thread warten auf abgebrochen Task warten lassen Allgemeine Java-Themen 25
A Could not find main class: start Allgemeine Java-Themen 5
S main() class finden Allgemeine Java-Themen 7
hdi Could not find main class? Allgemeine Java-Themen 8
B Cannot find main-claas... Allgemeine Java-Themen 21
G jar Datei findet Main Class nicht... Allgemeine Java-Themen 2
P Java Editor Could not find the main class GUI. Programm will exit. Allgemeine Java-Themen 3
E Programm von Main Methode starten Allgemeine Java-Themen 9
BattleMaster246 Could not find the Main class Allgemeine Java-Themen 30
reibi Main-Class in Jarfile Allgemeine Java-Themen 3
G Hauptthread anhalten / Unterschied zwischen Main-Thread und dialogelement-Thread Allgemeine Java-Themen 2
badfish Inerhalb der [void main] auf ein Objekt der [protected void] zugreifen Allgemeine Java-Themen 13
N Probleme mit .jar 'Could not find main class' Allgemeine Java-Themen 3
N Exception in thread "main" java.lang.UnsatisfiedLinkError: no lwjgl in java.library.p Allgemeine Java-Themen 4
J Main-Thread soll auf alleKinder Threads warten Allgemeine Java-Themen 5
B Main Thread Status abrufen Allgemeine Java-Themen 4
N import com.sun.tools.javac.Main; Allgemeine Java-Themen 1
V main(...) aus Klasse in PDF starten? Allgemeine Java-Themen 3
B UML: Main classe verschwindet nach code generierung nicht?! Allgemeine Java-Themen 4
I Signatur von Main-Methoden? Allgemeine Java-Themen 29
J Applet in JAR packen - was muss in main() stehen? Allgemeine Java-Themen 12
E beim Ende der main() das Programm nicht beenden Allgemeine Java-Themen 3
J Unicode: cmd parameter (main args); exec params; filenames Allgemeine Java-Themen 2
V Mehrere main() in jar, wie starten? Allgemeine Java-Themen 4
J Methode nicht ausführbar in main Allgemeine Java-Themen 7
P Kann .jar nicht ausführen - main class not found Allgemeine Java-Themen 6
B Jar File und die Main Klassen Allgemeine Java-Themen 3
M zwei main-Methoden Allgemeine Java-Themen 7
L static main - Spezifikation? Allgemeine Java-Themen 7
N Main-Klasse wird beim Aufruf des JARs nicht gefunden Allgemeine Java-Themen 8
J Exception in thread "main" java.lang.OutOfMemoryEr Allgemeine Java-Themen 26
G [JDK 6u2] - JAR Failed to load Main-Class manifest attribute Allgemeine Java-Themen 6
P Zugriff von Klasse 2 auf Klasse 1 (die main methode hat) Allgemeine Java-Themen 5
G Programm ohne Main Allgemeine Java-Themen 10
M Parameter an main übergeben aber wie? Allgemeine Java-Themen 4
J jar-Datei enthält keine Main-Class Allgemeine Java-Themen 22
C Mehrere main-Klassen in JAR Allgemeine Java-Themen 2
S Exception in Thread "main" java.lang.NoClassDef. b Allgemeine Java-Themen 2
G "Could not find the main class. Program will exit" Allgemeine Java-Themen 20
A Warum gibts die Main und was sollte drin stehen? Allgemeine Java-Themen 31
B Exception in thread "main" java.lang.NoClassDefFou Allgemeine Java-Themen 12
S Programmlogik, wo ist die Main? Allgemeine Java-Themen 9
C Mehrere main-Methoden in einer jar Allgemeine Java-Themen 7
J Warum heißt es eig. "public static void main" ? Allgemeine Java-Themen 4
G DBzugriff funktioniert nach 'Build Main Project' nicht mehr Allgemeine Java-Themen 2
P Exception in thread "main" java.lang.NoClassDefFou Allgemeine Java-Themen 3
P Exception in thread "main" java.lang.NoClassDefFou Allgemeine Java-Themen 15
P Exception in thread "main" java.lang.NoClassDefFou Allgemeine Java-Themen 3
S wie übergebe ich eine Variable aus einer Methode an main() ? Allgemeine Java-Themen 16
B Exception in thread "main" java.lang.OutOfMemoryEr Allgemeine Java-Themen 5
S Exception in thread "main" java.lang.StringIndexOu Allgemeine Java-Themen 9
R Ausführen von *.JAR || "Could not find main class" Allgemeine Java-Themen 7
I "Could not find the main class. Program will exit" Allgemeine Java-Themen 6
L boolean aus der main übergeben? Allgemeine Java-Themen 12
H jar-file in anderem main programm ausführen Allgemeine Java-Themen 2
M Klassenname in main-Methode ausgeben? Allgemeine Java-Themen 29
G Exception in thread "main" :? Allgemeine Java-Themen 5
E Exception in Thread "main" java.lang.NoClassDefFou Allgemeine Java-Themen 5
B Could not find the main class Allgemeine Java-Themen 2
A Was haltet ihr von einer standardisierten Main Klasse? Allgemeine Java-Themen 4
E Klasse dynamisch über main-Methode aufrufen Allgemeine Java-Themen 9
E Wie Java Heap Space vergrößern? Allgemeine Java-Themen 3
A Heap-Sort Allgemeine Java-Themen 2
L Java OutOfMemoryError Java heap space Allgemeine Java-Themen 3
H Änderung im maximalen heap space unter Windows 7 ?! Allgemeine Java-Themen 5
N Mögliches heap space lokalisieren Allgemeine Java-Themen 11
D Grundsätzliche Fragen zum Heap Space Allgemeine Java-Themen 12
D Datentypen Cache Images Heap Space Error Allgemeine Java-Themen 7
Thallius Wie mache ich eine Java App mit Icon startbar die mehr Heap Speicher braucht? Allgemeine Java-Themen 3
T jstat Heap(Size/Usage) PermGen(Size/Used) vs JVisual VM Allgemeine Java-Themen 2
H Frage wegen Heap-Speicher Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben