G
Guest
Gast
Hallo allerseits,
ich habe hier ein Programm, welches Daten über Netzwerk anfordert und diese nach Zwischenspeicherung im Speicher auf die Platte schreibt.
Hierbei werden sehr schnell und häufig ByteBuffer und byte-Arrays angefordert.
Das geht auf Dauer aber nicht gut. Denn irgendwann läuft der GC los und der eigentliche Programmablauf stoppt für eine kurze Zeit. Das ist aber unerwünscht.
Nun bin ich auf die Idee gekommen, einen Pool von ByteBuffer zu verwalten, von dem ich mir immer den nötigen Speicher hole. Dann kommt der GC natürlich nicht mehr auf die Idee den Speicher wieder frei zu geben. Allerdings ist nun das Problem, dass man immer dann, wenn man den Speicher nicht mehr benötigt, daran denken muss, dass er wieder zurück in den Pool gegeben wird. Das kann recht unübersichtlich werden, weil die ByteBuffer durch verschiedene Objekte gereicht werden.
In C++ hat man die Möglichkeit durch den Einsatz von Smart-Pointer so etwas zu automatisieren. Immer wenn auf Objekt keine Referenz mehr zeigt, wird deren Destructor aufgerufen und ich kann den Speicher zurück in den Pool legen.
Hat jemand eine Idee, wie man in Java etwas ähnliches machen kann?
ich habe hier ein Programm, welches Daten über Netzwerk anfordert und diese nach Zwischenspeicherung im Speicher auf die Platte schreibt.
Hierbei werden sehr schnell und häufig ByteBuffer und byte-Arrays angefordert.
Das geht auf Dauer aber nicht gut. Denn irgendwann läuft der GC los und der eigentliche Programmablauf stoppt für eine kurze Zeit. Das ist aber unerwünscht.
Nun bin ich auf die Idee gekommen, einen Pool von ByteBuffer zu verwalten, von dem ich mir immer den nötigen Speicher hole. Dann kommt der GC natürlich nicht mehr auf die Idee den Speicher wieder frei zu geben. Allerdings ist nun das Problem, dass man immer dann, wenn man den Speicher nicht mehr benötigt, daran denken muss, dass er wieder zurück in den Pool gegeben wird. Das kann recht unübersichtlich werden, weil die ByteBuffer durch verschiedene Objekte gereicht werden.
In C++ hat man die Möglichkeit durch den Einsatz von Smart-Pointer so etwas zu automatisieren. Immer wenn auf Objekt keine Referenz mehr zeigt, wird deren Destructor aufgerufen und ich kann den Speicher zurück in den Pool legen.
Hat jemand eine Idee, wie man in Java etwas ähnliches machen kann?