Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Ba'el

Alter Hase

  • »Ba'el« ist der Autor dieses Themas

Beiträge: 409

Wohnort: Erfurt

Beruf: Student (6 FS angew. Info. - Richtung Medieninformatik)

  • Private Nachricht senden

1

05.07.2008, 23:41

[OpenGL/Java] von glList allokierten Speicher freigeben

ich hab ein Problem mit den von glList belegten Speicher, ich hab mehrere glLists welche Texturen enthalten, und nach bestimmten Aktionen werden glListen gelöscht
und zwar mit glDeleteLists(_picture, 1);
allerdings wenn ich den Taskmanager beobachte, wird der verbrauchte Speicher nicht weniger
ich habs auch schon mit dem explizieten Aufrufen des Garbage Collectors nach jedem glDeleteLists durch System.gc() versucht
aber das nützt auch nix, bekomm ich irgendwie anders den Speicher wieder frei, wenn das Programm 300mb und mehr an nicht mehr benutzten Speicher mit rumschleift is das nicht schön ...

(erst nach beenden des Programms wird der Speicher wieder frei)
aktuelle Projekte:
Ruby on Rails
XNA & Touchless
Progr. mobiler Endgeräte (GPS Trekking)

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

06.07.2008, 10:15

bei einer größeren Anwendung habe ich beobachtet, dass bei häufigen Allokieren und Freigeben, der Speicherverbrauch immer weiter steigt und nach einigerzeit dann komplett "einbricht". Sprich nach einigen Minuten von 600 mb auf 50 mb runter geht. Habe dies allerdings nicht weiter verfolgt und ggf. hängt es nicht wirklich mit dem häufigen Allokieren+Freigeben zusammen, aber vielleicht könnte man das in einer TestAPP ja mal untersuchen.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Ba'el

Alter Hase

  • »Ba'el« ist der Autor dieses Themas

Beiträge: 409

Wohnort: Erfurt

Beruf: Student (6 FS angew. Info. - Richtung Medieninformatik)

  • Private Nachricht senden

3

06.07.2008, 11:37

ich hab das jetrzt mal getestet, hab mehrere glListen erstellt und wieder gelöscht, so das etwa 200mb im Speicher waren die nicht mehr genutzt werden und hab dann das Programm 10min laufen lassen ohne weiters zu tun ... der Speicherverbrauch ändert sich nicht, und selbst wenn wäre es inakzeptabel :?

(vielleicht erkennt ja der Garbage Collector das glDeleteLists nicht als freigeben des Speichers ... wundern würd's mich nicht, OpenGL mit Java sind eh'n Kampf ...)
aktuelle Projekte:
Ruby on Rails
XNA & Touchless
Progr. mobiler Endgeräte (GPS Trekking)

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

4

06.07.2008, 12:14

In Java darfst du nicht anfangen den Speicherverbrauch der Anwendung zu beurteilen.
Java hat da eine ganz eigene Speicherverwaltung, auch wenn der GC den Speicher freigibt behält Java afaik den Speicher für zukünftige Allokationen.

Einfach drauf vertrauen oder mit Java Kommandozeilenparametern die Speicherverwaltung anpassen.
http://java.sun.com/performance/reference/whitepapers/tuning.html#section4

Ich habe die Erfahrung gemacht, dass Java das mit der Speicherverwaltung ziemlich intelligent löst. Sicher braucht es im Vergleich zu C++ und Co ziemlich viel davon, aber man kann sich eigentlich drauf verlassen, dass die Verwaltung selbst ziemlich gut klappt.

Ba'el

Alter Hase

  • »Ba'el« ist der Autor dieses Themas

Beiträge: 409

Wohnort: Erfurt

Beruf: Student (6 FS angew. Info. - Richtung Medieninformatik)

  • Private Nachricht senden

5

06.07.2008, 14:33

Zitat von »"xardias"«

auch wenn der GC den Speicher freigibt behält Java afaik den Speicher für zukünftige Allokationen.


wenn das in meinem Fall zutreffen würde, würde ja mein Speicher nicht immer weiter ansteigen


ich erklär es ma ausführlich

wenn ich das Programm starte und alles soweit geladen ist hat es einen Speicherverbrauch X

wenn ich dann eine bestimmte Fläche drücke wird ein Bild (z.b. 5mb) in eine glList geladen und dann Angezeigt -> Speicherverbrauch X+5

wenn ich jetzt auf eine andere Fläche drücke, wird die vorherige glList gelöscht, ein neues Bild (z.b. 2mb) geladen in eine glList gepackt und angezeigt

wenn es jetzt bei mir so wäre wie du oben schreibst wäre mein Speicherverbrauch immer noch X+5 da ja die 5mb frei sind aber noch von Java reserviert wären und so Java die 2mb dort platzieren könnte
aber mein Speicherverbrauch ist X+5+2, sprich es wird immer mehr speicher reserviert mit jedem Klick und irgendwann hab ich dann X+300
wovon ich aber eig. nur X+5 verwende der Rest ist theoretisch schon wieder freigegeben ...
aktuelle Projekte:
Ruby on Rails
XNA & Touchless
Progr. mobiler Endgeräte (GPS Trekking)

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

6

06.07.2008, 17:49

Hm okay das hab ich falsch verstanden. Vielleicht eine eigenart der OpenGL Bindings.. die habe ich nie benutzt, daher kann ich dir leider auch nicht viel dazu sagen.

Funktioniert dein Programm denn weiter wenn du die 300MB erreicht hast? Auch wenn du weiter Speicher anforderst? Weil so lange der Speicherbedarf nicht unendlich weit ansteigt und du irgendwann eine OutOfMemory Exception bekommst ist doch alles in Ordnung.

So lange der Speicherverbrauch kein Problem darstellt würde ich mich nicht weiter darum kümmern. Auch auf Systemen mit wenig Speicher sollte es laufen, da ungenutze Teile davon afaik ausgelagert werden können.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

7

06.07.2008, 19:53

Meine Meinung als Enduser:

300MB für eine Anwendung, bei der man nur ein wenig durch die Gegend klickt? - Mit mir NICHT! (bitte nicht als Wertung von Ba'els Programm verstehen, da ich über diese ja nichts weiß)
Ich habe auf meiner alten Kiste "nur" 512 MB Speicher. Und der hat, verdammt nochmal, bis jetzt immer gereicht. Also ehe ich mir einen neuen PC kaufe, lasse ich eine Anwendung, die soviel Speicher verbraucht, links liegen und ziehe mir lieber noch ne Runde wc3 o.ä. rein.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Ba'el

Alter Hase

  • »Ba'el« ist der Autor dieses Themas

Beiträge: 409

Wohnort: Erfurt

Beruf: Student (6 FS angew. Info. - Richtung Medieninformatik)

  • Private Nachricht senden

8

06.07.2008, 20:10

hehe, genau das is ja mein Problem ... deswegen will ich ja auch die Displaylisten wieder löschen wenn ich sie nicht mehr brauch ...
aktuelle Projekte:
Ruby on Rails
XNA & Touchless
Progr. mobiler Endgeräte (GPS Trekking)

rootnode

Frischling

Beiträge: 92

Wohnort: Aachen, Pontstraße

Beruf: Student

  • Private Nachricht senden

Ba'el

Alter Hase

  • »Ba'el« ist der Autor dieses Themas

Beiträge: 409

Wohnort: Erfurt

Beruf: Student (6 FS angew. Info. - Richtung Medieninformatik)

  • Private Nachricht senden

10

06.07.2008, 21:33

:roll: siehe Post 1, ich lösche mit glDeleteLists aber der Speicher wird nicht wieder frei
aktuelle Projekte:
Ruby on Rails
XNA & Touchless
Progr. mobiler Endgeräte (GPS Trekking)

Werbeanzeige