On Thursday 24 May 2007, Eric-Alexander Schaefer wrote:
Jan Rakelmann schrieb:
Naja, dort sehen auch keine 0815-PC, das Schlimme an Java ist für mich der Garbagecollector, das Ding tut einfach wann es will was es will. Es gibt Unmengen an Literatur zur Thema Verbesserungsvorschläge, jetzt hat Sun Java ja freigegeben. Vielleicht wird es mal eine ISO-Standard und jemand nimmt sich des leidigen GC mal an.
Was macht der GC schlechter als malloc/free?
Der Java-GC ist mit Abstand einer der schlechtesten in der Industrie und ist leider auch nach nahezu einem Jahrzehnt Java nicht in Ordnung gebracht worden.
Ein paar Beispiele: *per Default nimmt er sich exakt 128MB Ram egal ob er sie braucht oder nicht (Vergleich Smalltalk: greift etwa so viel wie gebraucht wird) *wenn die 128MB verbraucht sind ist Schluss. Allokationsfehler. Abstürze. (Smalltalk: versucht mehr Speicher zu bekommen) *man kann die 128MB umkonfigurieren (z.B. auf 64 oder 256), aber dynamisch wird es nicht *man kann dem GC so oft wie man will sagen, dass es jetzt ein guter Zeitpunkt zum aufräumen wäre, er macht nix (Smalltalk: GC ist steuerbar, aber ich habe es noch nie gebraucht) *wenn er dann doch mal losläuft dauert es gerne mal ein paar Minuten (Smalltalk: 20s ist das absolute Maximum auch auf einer lahmen Kiste, unter anderem weil der GC ständig mitläuft und einfach zu beseitigende Objekte schneller aufräumt) *der JGC unterscheidet nicht zwischen temporären und dauerhaften Objekten, Folge: es wird sehr schnell sehr eng im Speicher (Smalltalk: Multi-Layer-Speichermodell das Objekte nach Lebenszeit und Referenzen einsortiert und unterschiedlich behandelt) *etc.pp. ad infinitum ad nauseam...
Konrad