Maximal verfügbarer Hauptspeicher? Ab wann wird ausgelagert?

Status
Nicht offen für weitere Antworten.

Matrim

Mitglied
Hallo,

wie kann ich feststellen, wieviel Hauptspeicher meinem Programm zur Verfügung steht, also zB wieviel Speicher ich für Arrays zur Verfügung habe?

Wichtig ist es, für mich zu wissen, ab welchen Wert dann ausgelagert wird, ab diesem Moment sollte ja die Performance deutlich sinken.

Kann man diesen Schwellwert künstlich senken, um so leichter Performanceaussagen treffen zu können?

Mat.
 
B

bygones

Gast
deinem java programm stehen per default 64MB zur Verfügung... willst du mehr MB nutzen musst du die Option -Xmx bzw. -Xms mit der gewünschten MB Zahl angeben (zb. 128M)
 
S

stev.glasow

Gast
Matrim hat gesagt.:
Wichtig ist es, für mich zu wissen, ab welchen Wert dann ausgelagert wird, ab diesem Moment sollte ja die Performance deutlich sinken.
Ab wann ausgelagert wird entscheidet doch das Betriebssystem, da kannst du als Entwickler gar nichts machen.
 

Grizzly

Top Contributor
stevg hat gesagt.:
Matrim hat gesagt.:
Wichtig ist es, für mich zu wissen, ab welchen Wert dann ausgelagert wird, ab diesem Moment sollte ja die Performance deutlich sinken.
Ab wann ausgelagert wird entscheidet doch das Betriebssystem, da kannst du als Entwickler gar nichts machen.

Jepp, und vor allem verfolgen verschiedene Betriebssysteme beim Auslagern verschiedene Philosophien: Die einen lagern einen Teil des Speichers aus, sobald dieser nicht benutzt wird. Andere Systeme lagern erst aus, wenn der gesamte Hauptspeicher belegt ist und weiterer Speicher von Programmen angefordert wird. Ist also Systemabhängig.

Vor allem lagert ja Java nicht selber aus. Den Speicherwert mit den Optionen zu erhöhen legt ja nur den maximalen Speicher für das Programm fest.
 

Matrim

Mitglied
Okay,

danke für die Informationen soweit.
Falls ich also meinem Javaprogramm mehr Speicher zur Verfügung stelle, als ich Hauptspeicher habe, wird es dann gfs automatisch auslagern (Betriebssystem)?

Wie kann ich nun aber intern abfragen, wieviel HAUPTspeicher ich zur Verfügung habe.

Das Szenerario, dass ich vor Augen habe, ist, dass ich meinem Programm vieeeeeel Speicher erlaube (also auch ausgelagerten), ich aber intern wissen möchte, wie der Schwellwert ist.

Danke, Mat.
 

Grizzly

Top Contributor
Matrim hat gesagt.:
[...]
Falls ich also meinem Javaprogramm mehr Speicher zur Verfügung stelle, als ich Hauptspeicher habe, wird es dann gfs automatisch auslagern (Betriebssystem)?
[...]

Gegebenenfalls? In dem Fall sogar mit 100%er Wahrscheinlichkeit. :)

Matrim hat gesagt.:
[...]Wie kann ich nun aber intern abfragen, wieviel HAUPTspeicher ich zur Verfügung habe.[...]

Hm, so ohne weiteres gar nicht. Sollte aber eigentlich auch nicht interessant sein. Wenn der Rechner zu wenig Speicher hat, wird das der Benutzer ganz schnell merken ;) .

Matrim hat gesagt.:
[...]Das Szenerario, dass ich vor Augen habe, ist, dass ich meinem Programm vieeeeeel Speicher erlaube (also auch ausgelagerten), ich aber intern wissen möchte, wie der Schwellwert ist.

Danke, Mat.

Du kannst ja mal soviel erlauben, wie Du maximal brauchst. Dann musst Du halt den Benutzer irgendwo (auf Deiner Webseite, im Handbuch, bei der Installation) darauf hinweisen, dass Dein Programm mindestens so und so viel Speicher braucht.

Auf die Auslagerungstechnik des Betriebssystems hast Du eh keinen Einfluss. Läuft die Sache bspw. auf einem Server, der seine Daten über ein SAN liest und schreibt, kannst Du ja sowieso kein Aussagen mehr machen. Oder einer hat Win98 auf einem USB Stick und arbeitet so. Mit so einem Stick dauert das Ein- und Auslagerung der Speicherseiten natürlich ewig.

Über solche Sachen würde ich mir keine Gedanken machen, einfach den maximalen Speicherverbrauch per Kommandozeilen-Parameter an die Java VM übergeben und den Benutzer auf die Mindestanforderungen hinweisen.
 

Matrim

Mitglied
Über solche Sachen würde ich mir keine Gedanken machen, einfach den maximalen Speicherverbrauch per Kommandozeilen-Parameter an die Java VM übergeben und den Benutzer auf die Mindestanforderungen hinweisen.

Na aber doch =)
Ich würde es gern wissen, da ich einen Performancetest machen möchte.
Dazu möchte ich dann auch eventuell den Speicher selbst eingrenzen (in dem ich entsprechend gro0e Arrays bastle).

Aber als Hauptpunkt brauche ich dafür die Angabe, wieviel Hauptspeicher ich noch zur Verfügung habe.

Gruß,
Mat.
 

Sky

Top Contributor
Vielleicht hilft Dir ja sowas hier:

Code:
    System.out.println("free :" + Runtime.getRuntime().freeMemory());
    System.out.println("total:" + Runtime.getRuntime().totalMemory());
    System.out.println("max  :" + Runtime.getRuntime().maxMemory());

Bin mir zwar nicht ganz so sicher, ob Du damit weiter kommst, aber gucks Dir einfach mal an.
 

Matrim

Mitglied
sky80 hat gesagt.:
Vielleicht hilft Dir ja sowas hier:

Code:
    System.out.println("free :" + Runtime.getRuntime().freeMemory());
    System.out.println("total:" + Runtime.getRuntime().totalMemory());
    System.out.println("max  :" + Runtime.getRuntime().maxMemory());

Bin mir zwar nicht ganz so sicher, ob Du damit weiter kommst, aber gucks Dir einfach mal an.

Danke, das werd ich machen :)
 

Grizzly

Top Contributor
Das dürfte eigentlich nix bringen.
API Beschreibung hat gesagt.:
long freeMemory()
Returns the amount of free memory in the Java Virtual Machine.
API Beschreibung hat gesagt.:
long maxMemory()
Returns the maximum amount of memory that the Java virtual machine will attempt to use.
API Beschreibung hat gesagt.:
long totalMemory()
Returns the total amount of memory in the Java virtual machine.
Sprich hier handelt es sich um Speicherangaben über die Java VM und nicht um den Hauptspeicher, den maximalen Speicher (also Hauptspeicher + Auslagerungsdatei) oder wann oder wieviel ausgelagert wird.

Hieran könntest Du allerhöchstens grob sehen, wie gross Dein Array werden darf.
 

Matrim

Mitglied
Grizzly hat gesagt.:
Das dürfte eigentlich nix bringen.
Sprich hier handelt es sich um Speicherangaben über die Java VM und nicht um den Hauptspeicher, den maximalen Speicher (also Hauptspeicher + Auslagerungsdatei) oder wann oder wieviel ausgelagert wird.

Hieran könntest Du allerhöchstens grob sehen, wie gross Dein Array werden darf.

*nick* Das hab ich auch erkannt.
Also hab ich immer noch keine Antwort auf meine Fragen *seufz*

Trotzdem danke.
 

helium

Mitglied
Die Frage lässt sich ja auch nicht beantworten, da niemand weiß, wieviel HAUPTspeicher deinem Programm noch zur verfügung steht. Vielleicht 16MB und zwei Minuten später 512MB und weitere zwei Minuten später 64MB. Das entscheidet das Betriebsystem ganz spontan. Das ist davon abhängig, was sonst noch so läuft, was die anderen Programme/Prozesse gereade so an speicher verbrauchen, wie aktiv die Prozesse momentan sind, und was weiß ich nicht alles.
 

Matrim

Mitglied
Okay,

so betrachtet macht es Sinn.

Dann eine andere Frage :D

Man kann nicht zufällig eingrenzen, wieviel das Programm im Hauptspeicher belegen darf, bevor es auslagert?

Ich denke mal nicht, da dass (mal wieder) Sache des Betriebssystems ist und somit nicht wirklich von einem Programm selber entschieden werden kann. Jedenfalls nicht ohne viel Mehraufwand.
 

Grizzly

Top Contributor
Matrim hat gesagt.:
[...]Man kann nicht zufällig eingrenzen, wieviel das Programm im Hauptspeicher belegen darf, bevor es auslagert?

Ich denke mal nicht, da dass (mal wieder) Sache des Betriebssystems ist und somit nicht wirklich von einem Programm selber entschieden werden kann. Jedenfalls nicht ohne viel Mehraufwand.

Nein, soviel ich weiss nicht. Es gibt aber - soweit ich weiss - die Möglichkeit das Auslagern von Programmen mit Betriebssystem API Befehlen zu verbieten. Aber frag' mich nicht unter welchen System das geht und vor allem wie ???:L .

Obwohl die Sache mit dem Auslagern bzgl. eines Benchmarks natürlich so eine Sache ist, da ja bei anderen Systemen (Rechner, Betriebssystem, Konfiguration, usw.) sowieso andere Ergebnisse herauskommen. Am einfachsten ist, dass Programm auf einem System zu benchen und unter Berücksichtigung von den Faktoren (Rechner, Betriebssystem, Konfiguration, usw.) mit Ergebnissen eines anderen Systems zu vergleichen.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben