Anda dapat memaksa buffer lama untuk segera melepaskan memorinya
((DirectBuffer) buffer).cleaner().clean();
Penafian: Saya hanya menggunakan ini dengan pembaruan Sun/Oracle/OpenJDK Java 6 18 dan yang lebih baru. Ini mungkin tidak tersedia atau berfungsi dengan benar dengan versi lama, atau platform lain. Terima kasih @EJP.
Kecuali Anda memiliki OS 32-bit, saya hanya akan memetakan seluruh file ke dalam memori (menggunakan beberapa pemetaan) Ini akan jauh lebih efisien dan mudah untuk dikelola. Dalam situasi ini saya hanya membersihkan ByteBuffers sebagai bagian dari penutupan file (dalam pengujian unit)
Anda dapat menggunakan memori virtual sebesar TB dan menggunakan sedikit ruang fisik atau bahkan ruang disk. Dalam contoh ini, saya memetakan memori virtual 8 TB pada mesin dengan memori 24 GB dan drive 120 GB.
http://vanillajava.blogspot.com/2011/12/using-memory-mapped-file-for-huge.html
Singkatnya: pada mesin 64-bit, memori virtual sangatlah murah, ini bukan sesuatu yang perlu Anda khawatirkan.
BTW: Kebanyakan mesin 64-bit sebenarnya terbatas pada memori virtual 48-bit. Batasan ini adalah 256 TB, bukan 16 EB (18.000.000 TB) yang dapat mereka atasi secara teori.
Anda mungkin menganggap perpustakaan ini menarik. Saya tidak menyebutkannya sebelumnya karena mungkin tidak cocok untuk Anda, tetapi Anda mungkin menganggap pendekatan dan beberapa teknik yang saya gunakan dalam kode menarik.
https://github.com/peter-lawrey/Java-Chronicle
person
Peter Lawrey
schedule
05.03.2012