我在尋找一些想法,也許已經有一些具體的實現,如果有人知道任何,但我願意自己編寫想要的緩存。Java內存感知緩存
我想要一個緩存,只緩存許多演出,因爲我配置。與應用程序的其餘部分相比,緩存部分將使用近100%的內存,因此我們可以將應用程序的已用內存概括爲緩存大小(+垃圾)。
是否有方法可以猜測使用了多少內存?還是依靠軟指針會更好?軟指針並始終運行在jvm內存限制的頂部可能會非常不方便,並且有很多cpu週期用於內存清理?我可以對現有對象進行一些分析,例如myObject.getMemoryUsage()
?
LinkedHashMap
有足夠的緩存命中我的目的,所以我不必編寫一些戰略緩存怪物,但我不知道如何正確解決這個問題。有任何想法嗎?我不希望OOME飛到任何地方。
什麼是最佳實踐?
我喜歡LinkedHashMap。但是定義對象的數量是模糊的,因爲沒有人可以阻止系統調整緩存大小。但是如果我從運行時抓取已用內存,然後增加或減少對象的數量,自動設置緩存大小又如何呢? –
哦,我看到java只有Runtime.getTotalMemory(),但沒有getCurrentMemory()... sh ** –
但是,如果沒有實際問題,它可能會很低,因爲它可能有很多免費GC之後的內存。 –