# Wird bei RAM-Mangel für Java Heap Space geswappt?



## Gummiball (1. Mrz 2006)

Guten Abend!
Ich möchte unbedingt wissen, ob die VM swappt, wenn sie ihren Heap Space nicht mehr komplett im Hauptspeicher auslagern kann?
Das ist wichtig, da ich wissen muss, ob mein Programm ein Minimum an Hauptspeicher benötigt, oder ob ich wirklich nur den Heapspace zuweisen muss(egal ob nun wirklich noch soviel RAM da is)...


----------



## AlArenal (1. Mrz 2006)

Speicher-Management ist Aufgabe des Betriebssystems, da hat die VM genau Null Einfluss drauf.


----------



## Gummiball (2. Mrz 2006)

Achso...
Und wie ist das dann, wenn ich 500MB RAM habe, den heap space aber auf 1024 MB  setze?
Theoretisch müsste das doch zu keiner Fehlermeldung führen, oder?


----------



## AlArenal (2. Mrz 2006)

...dann lagert das Betriebssystem die Differenz aus (wenn möglich) und weist der VM entsprechend Speicher zu.


----------



## Gummiball (4. Mrz 2006)

Achso, als kann es sein, dass sie der VM weniger Speicher gibt und das Programm sich wieder beschwert, da der heap space zu gering ist?


----------



## byte (4. Mrz 2006)

Das OS teilt ja den Speicher nicht beliebig zu. Wenn Du die Heap Size auf 512 MB stellst, dann kriegst Du das auch vom OS. Du hast allerdings keinen Einfluss drauf, was davon im tatsächlichen RAM liegt und was ausgelagert wird.

Probleme könnte es nur geben, wenn Du die Heap Size so hoch einstellst, dass sie größer ist als RAM + Größe der Auslagerungsdatei.


----------



## stev.glasow (4. Mrz 2006)

Gummiball hat gesagt.:
			
		

> Achso, als kann es sein, dass sie der VM weniger Speicher gibt und das Programm sich wieder beschwert, da der heap space zu gering ist?



Ne, das passiert nur wenn das angegebene maximum erreicht wird.
Wenn du z.B. 1024 MB angibst und 512 Mb Ram hast, wird halt nen großer Teil vom OS ausgelagert (es sei den dein Programm benötigt gar nicht so viel Speicher), aber die Fehlermeldung dass der heapspace nicht ausreicht bekommst du erst wenn dein Programm mehr als 1024Mb benötigt und der GC nichts mehr aufräumen kann.
[edit] zu spät


----------



## Gummiball (5. Mrz 2006)

Ah, vielen Dank!
Genau das wollte ich wissen.
Da ich jetzt kein neues Thema erstellen will, frage ich gleich mal hier nochwas....
Wenn ich einen Array mit int[] array = new int[100][1000] erstelle, dann verbraucht das doch viel Speicher.
Wenn ich in der nächsten Zeile schreibe: array = null, wird dann dieser Speicher wieder freigegeben?
Wenn nicht, wie erreiche ich, dass er wieder freigegeben wird?


----------



## Sky (6. Mrz 2006)

Die VM kümmert sich darum selbst. Im Prinzip hat man keinen Einfluß auf sowas

Du hast zwar die Möglichkeit System#gc aufzurufen, d. h. aber nicht, dass sofort unbenötiger Speicher wieder frei wird. (siehe auch API dazu)


----------



## JoePlusPlus (8. Jun 2006)

Gummiball hat gesagt.:
			
		

> Ah, vielen Dank!
> Genau das wollte ich wissen.
> Da ich jetzt kein neues Thema erstellen will, frage ich gleich mal hier nochwas....
> Wenn ich einen Array mit int[] array = new int[100][1000] erstelle, dann verbraucht das doch viel Speicher.
> ...



Soweit ich weiss geht das nicht. In C++ gibs Du den Speicher mit delete wieder frei.


----------



## AlArenal (8. Jun 2006)

JoePlusPlus hat gesagt.:
			
		

> Soweit ich weiss geht das nicht. In C++ gibs Du den Speicher mit delete wieder frei.



Vielleicht solltest du besser nur über Dinge sprechen, bei denen du etwas mehr Gewissheit besitzt, ehe du allzuviele Halbwahrheiten und Vermutungen an den Mann bringst.


----------



## JoePlusPlus (8. Jun 2006)

Wenn Du Ahnung von Java hast, dann klär doch bitte die Halbwahrheiten auf. In C++ kannst du nach dem Du eine Referenz auf ein Objekt per new geholt hast den Speicher mit delete wieder freigeben. Wie machst Du denn das in JAVA?


----------



## AlArenal (8. Jun 2006)

JoePlusPlus hat gesagt.:
			
		

> Wenn Du Ahnung von Java hast, dann klär doch bitte die Halbwahrheiten auf. In C++ kannst du nach dem Du eine Referenz auf ein Objekt per new geholt hast den Speicher mit delete wieder freigeben. Wie machst Du denn das in JAVA?



Wenn man keine Referenzen auf ein Objekt "vergessen" hat (so wie wenn man in C++ das delete "vergessen" könnte), kümmert sich der Garabage Collector der VM selbstständig darum den Speicher wieder freizugeben.


----------



## JoePlusPlus (8. Jun 2006)

Also gibbet doch keine Möglichkeit den per Hand wieder freizugeben. Wo ist dann meine Halbwahrheit gewesen?


----------



## AlArenal (8. Jun 2006)

JoePlusPlus hat gesagt.:
			
		

> Also gibbet doch keine Möglichkeit den per Hand wieder freizugeben. Wo ist dann meine Halbwahrheit gewesen?



Falsch. Du hast auf die Frage "Wie erreiche ich also, dass der Speicher freigegeben wird?" mit "Das geht nicht." geantwortet. Kannst du gerne nachlesen.  Um etwas zu erreichen, muss es nicht zwingend notwendig sein explizit ein Kommando abzusetzen. Man kann auch durch implizite Logik Sorge dafür tragen, dass gewisse Zustände vermieden oder erreicht werden.


----------



## JoePlusPlus (8. Jun 2006)

Ich hatte verstanden "wie erreiche ich" = "wie programmier ich das". Sorry C++ denken *grins


----------



## AlArenal (8. Jun 2006)

JoePlusPlus hat gesagt.:
			
		

> Ich hatte verstanden "wie erreiche ich" = "wie programmier ich das". Sorry C++ denken *grins



Auch in C++ wirst du keine Features nachprogrammieren, die die Sprache eh schon hat, oder?


----------



## byte (8. Jun 2006)

Das einzige Problem bei der Sache ist, dass man keinen direkten Einfluß darauf hat, wann genau der Abfall entsorgt wird. Da der Garbage Collector doch einiges an Performance zieht, kann sich das u.U. negativ auf die Performance des Programms auswirken. 

Beide Sprachen haben da also Vor- und Nachteile.


----------



## Guest (8. Jun 2006)

AlArenal hat gesagt.:
			
		

> Auch in C++ wirst du keine Features nachprogrammieren, die die Sprache eh schon hat, oder?



Nur wenn es nötig ist, ansonsten nutze ich auch nur Frameworks und Libs. Aber in C++ habe ich ja jederzeit die Wahl und das gefällt mir halt.


----------



## AlArenal (8. Jun 2006)

Anonymous hat gesagt.:
			
		

> Nur wenn es nötig ist, ansonsten nutze ich auch nur Frameworks und Libs. Aber in C++ habe ich ja jederzeit die Wahl und das gefällt mir halt.



Wenn man diese Wahl nicht braucht, vermisst man sie natürlich auch nicht. Ist auch schön nen Wagen mit 200 PS zu haben. Nicht, weil man immer nur Dauervollgas fahren möchte, sondern weil man im Zweifelsfalle eben zügig überholen kann. Wirklich "brauchen" tuts aber wohl kaum einer.


----------



## Guest (8. Jun 2006)

AlArenal hat gesagt.:
			
		

> Anonymous hat gesagt.:
> 
> 
> 
> ...



Tja 200PS, da wären wir wieder beim Resourcenverbrauch(Geld). Wer es sich leisten kann viel mehr Geld auszugeben der wird sich mehr PS kaufen. Aber das ist nicht die Masse.


----------



## byte (8. Jun 2006)

Also dieses tolle Resourcen-Argument wird auch nicht richtiger, je öfter man es wiederholt. Die VM ist standardmäßig 64 MB groß. Viele komplexe Anwendungen kommen (richtig programmiert) damit zurecht. Aktuelle Rechner haben zwischen 512 MB und 2 GB RAM. So what? ???:L


----------



## Gast (8. Jun 2006)

byto hat gesagt.:
			
		

> Also dieses tolle Resourcen-Argument wird auch nicht richtiger, je öfter man es wiederholt. Die VM ist standardmäßig 64 MB groß. Viele komplexe Anwendungen kommen (richtig programmiert) damit zurecht. Aktuelle Rechner haben zwischen 512 MB und 2 GB RAM. So what? ???:L



Resourcenschonend zu programmieren macht immer Sinn. Warum Resourcen verschenken? Ich freue mich immer über schnelle kleine Programme, egal wieviel ich unter der Haube habe, denn nur so habe ich was von der teuren Hardware.


----------



## AlArenal (8. Jun 2006)

Gast hat gesagt.:
			
		

> Resourcenschonend zu programmieren macht immer Sinn. Warum Resourcen verschenken? Ich freue mich immer über schnelle kleine Programme, egal wieviel ich unter der Haube habe, denn nur so habe ich was von der teuren Hardware.



Und während der eine noch schaut, wo er ein verschenktes Bit einsparen kann, freut sich der andere, dass der Kunde die Rechung für die gelieferte Software bezahlt hat. So hat jeder eben so seine Prioritäten.


----------



## Gast (8. Jun 2006)

Da muss man nicht extra schauen wo man ein Bit einsparen kann. Ich behaupte mal das nichtoptimierter sauberer Standart C++ Code auch so Resourcenschoneder ist als sein Java Pendant ist. Und ich glaube auch nicht, dass Du Deine Frontends oder andere Desktopanwendung schneller produzierst als ein C++ Programmierer der sich in auch auf solche Programme spezialisiert hat. Er produziert schnell, sicher und nimmt dem Rechner nur soviel Resourcen wie nötig sind.


----------



## AlArenal (8. Jun 2006)

Kommt da noch was substanzielleres als "ich behaupte" und "ich glaube"?


----------



## Gast (8. Jun 2006)

Hast Recht, ich werde mal den kleinen Textfilekonverter, den ich grade geschrieben habe, in Java umsetzen und dann werde ich ja sehen was Java daraus macht. Dann bauen die Aussagen nicht mehr auf Vermutungen sonder auf Wissen auf.


----------



## AlArenal (8. Jun 2006)

Gast hat gesagt.:
			
		

> Hast Recht, ich werde mal den kleinen Textfilekonverter, den ich grade geschrieben habe, in Java umsetzen und dann werde ich ja sehen was Java daraus macht. Dann bauen die Aussagen nicht mehr auf Vermutungen sonder auf Wissen auf.



Mit den Einschränkungen, die sich immer ergeben, wenn einer was in einer Sprache macht, die er nicht völlig beherrscht und den grundsätzlichen Problemen in der Interpretation von Mikro-Benchmarks. Bis auf das Geschwafel von den verblendeten Anfängern konnte ich noch kein Argument entdecken, warum Java so erfolgreich geworden ist, wenn es doch so dermaßen schlecht ist.

Was treibst du eigentlich beruflich so?


----------



## Guest (8. Jun 2006)

AlArenal hat gesagt.:
			
		

> Mit den Einschränkungen, die sich immer ergeben, wenn einer was in einer Sprache macht, die er nicht völlig beherrscht und den grundsätzlichen Problemen in der Interpretation von Mikro-Benchmarks.


Ich werde weder in C++ noch in Java irgendwelche Optimierungen versuchen und auch keinen unsicheren C-Code verwenden. 



			
				AlArenal hat gesagt.:
			
		

> Bis auf das Geschwafel von den verblendeten Anfängern konnte ich noch kein Argument entdecken, warum Java so erfolgreich geworden ist, wenn es doch so dermaßen schlecht ist.


 Ja ich sehe bei mir und meinem Bekanntenkreis oder Kollegen keinen Erfolg für Java im Desktopbereich. Erfolg sehe ich auf nem Webserver oder auf dem Handy.


----------



## AlArenal (8. Jun 2006)

Anonymous hat gesagt.:
			
		

> Ja ich sehe bei mir und meinem Bekanntenkreis oder Kollegen keinen Erfolg für Java im Desktopbereich. Erfolg sehe ich auf nem Webserver oder auf dem Handy.



Super. Sehr repräsentativ.

Um nochmal auf meine, von dir ignorierte Frage zurückzukommen: Was treibst du beruflich so?


----------



## DEvent (9. Jun 2006)

Interessant ist das immer wieder die Behauptung kommt das Java nur auf Serversystemen und Handys verbreitet ist. 2 völlig unterschiedliche Systemarten. 
Serversysteme: meist über 2 Gigs an Ram, Mehrprozessorsysteme und Arbeitszeiten 24h / 4 Wochen / halbes Jahr.
Handys: Prozessorleistung sehr gering, Ram sehr gering, Arbeitszeit meist paar Stunden / Tag.
Auf diesen beiden total verschiedenen Systeme arbeiten JAva-Programme also ziemlich effektiv.
Aber auf einem Desktopsystem das doch zwischen diesen 2 Welten liegt, ist Java so ziemlich das schlechteste was es gibt?
Interessante Logik  :applaus:


----------



## Gast (9. Jun 2006)

Im Handy und Webserverbereich hat sich ja JAVA sehr gut etabliert. Das sind auch im Vergleich zu Desktopanwendungen relativ kleine Programme. Beim Handy ist eine sehr kleine Version der JVM ja schon integriert und dadurch hat man nicht wirklich die Wahl auf ein anderes Framework umzusteigen. Im Serversektor setzt JAVA da ein wo PHP zu langsam, kompliziert oder unsicher wird. Hier gibt es zwar auch Alternativen wie FastCGI bei dem nicht für jeder Usersession ein eigener Prozess gestartet wird, aber Java bietet hier einfacheren Einstieg. Wie das mit Webservices wie SOAP aussieht weiss ich nicht, glaube aber das es wieder sprachunabhängig ist. Tja dann wäre noch ERP Sektor wo SAP ja auch auf JAVA setzt. Deswegen sehe ich den Erfolg im Handy und Webserverbereich ja ohne weiteres an. 

Aber im Desktopbereich ist JAVA von so einem Erfolg sehr weit entfernt. Nennt doch einfach mal ein paar reine Java-Anwendungn die so ziemlich jeder Anwender auf dem Desktop nutzt. Bitte nicht Azereus nennen, das ist wirklich ein ganz schlechtes Beispiel für JAVA und man installiert da ganz schnell einen schnellen Bittorrent Clienten der nich in JAVA geschrieben ist. Ich streite wie schon geschrieben nur den Erfolg von JAVA im Desktopsektor ab. Ein Erfolg wäre für mich dann gegeben, wenn z.B 1/3 aller Anwendungen die ich z.B unter chip.de im Topdownload Bereich finde reine JAVA Anwendungen wären. Hier werden aber eher Anwendungen vom .NET Framework mehr Zuwachs verzeichnen können. Die Sprache bei .NET ist ja nebensache, das kann neben C# auch C++ oder VB oder sonstwas sein.

Also wo sind die tollen Desktop JAVA-Anwendungen die jeder hat? Im Vergleich zu der Menge an C++ Desktopanwendungen ist JAVA doch nicht wirklich erwähnenswert und wird es auch nie werden.


----------



## AlArenal (9. Jun 2006)

Gast hat gesagt.:
			
		

> Nennt doch einfach mal ein paar reine Java-Anwendungn die so ziemlich jeder Anwender auf dem Desktop nutzt. ... Ich streite wie schon geschrieben nur den Erfolg von JAVA im Desktopsektor ab. Ein Erfolg wäre für mich dann gegeben, wenn z.B 1/3 aller Anwendungen die ich z.B unter chip.de im Topdownload Bereich finde reine JAVA Anwendungen wären.



Und Erfolg ist für mich wenn sich die Java Desktop Programme, die ich beruflich entwickle, gut verkaufen. Und das tun sie. 

Um nochmal auf meine, von dir 2x ignorierte Frage zurückzukommen: Was treibst du beruflich so?



> Also wo sind die tollen Desktop JAVA-Anwendungen die jeder hat? Im Vergleich zu der Menge an C++ Desktopanwendungen ist JAVA doch nicht wirklich erwähnenswert und wird es auch nie werden.



Und es werden vermutlich auch nie 1/3 aller Systeme Anwendungen laufen haben, die in Conzept16 entwickelt wurden. Dennoch erfreut sich der Hersteller dieser 4GL Sprache bester Gesundheit, so wie auch die Produkte der Kunden, die es einsetzen. 

Du bist ja schon so ein doller Hecht. Dass du auf entsprechende Fragen nicht reagierst bedeutet wohl, dass du noch zur Schule gehst und nur irgendwas nachplapperst, aber von Praxis keine Kenne hat, vor allem nicht von Java. Du kommst hier ins Forum, fabulierst dir was zusammen, legst uns die Worte in den Mund und versuchst dann diese erfundene Aussagen mit hahnebüchenem Kram zu widerlegen. Großes Tennis!

Ist schönes Wetter draußen. Ich schlage vor du gehst noch was auf den Spielplatz....


----------



## moormaster (9. Jun 2006)

Was wollt ihr eigentlich hier? Wenn ihr nicht in Java programmieren wollt, dann lässt ihr es eben bleiben anstatt es anderen schlecht zu reden.



> Ich streite wie schon geschrieben nur den Erfolg von JAVA im Desktopsektor ab. Ein Erfolg wäre für mich dann gegeben, wenn z.B 1/3 aller Anwendungen die ich z.B unter chip.de im Topdownload Bereich finde reine JAVA Anwendungen wären.



Das ist in etwa so, als würde ich sämtliche Open Source Programme schlecht reden, nur weil in MediaMarkt & Co kaum welche zum Produktionspreis der Datenträger + Verpackung (+ Support) angeboten werden. Zudem richtet sich chip.de ja fast ausschliesslich an Windows-Anwender, womit schonmal ne ganze Menge anderer Nutzer rausfallen, welche evtl. auch mit zu Java Nutzern zählen.

Eine Programmiersprache daran zu bewerten, wieviele Anwendungen im Anwenderbereich darin entwickelt wurden, ist sowieso ziemlich einspurig... Es gibt viele andere Gebiete, für die Software entwickelt wird und für jedes dieser Gebiete kann eine andere Sprache optimal sein. Software für den Endbenutzer macht davon nur einen Teil aus und ist alleine für derartig allgemeine Vergleiche nichts sagend.


----------



## byte (9. Jun 2006)

Individualsoftware macht einen großen Teil der Softwareentwicklung aus und die findet man weder im Downloadbereich von Chip.de noch irgendwo anders zur freien Verfügung. Insofern sind solche subjektiven Analysen so repräsentativ wie die Berichterstattung der Bildzeitung.


----------

