我遇到了一種情況,我想要存儲空間數據的內存緩存,這不是立即需要的,也不是從磁盤加載,而是通過算法生成的。由於數據是空間訪問的,因此將根據不相關因素以及距最近讀取操作位置的距離從緩存中刪除數據。問題是Java的垃圾收集似乎並沒有很好地與這個系統集成。我想使用數據的空間知識來使其能夠被JVM垃圾收集。有沒有辦法將這些緩存對象標記爲垃圾回收?如果JVM遇到內存不足異常,是否有辦法捕獲該異常並刪除緩存對象以釋放內存?在Java中緩存大量空間數據 - 是否可行?
或者這是做錯事情的錯誤方式?
我遇到了一種情況,我想要存儲空間數據的內存緩存,這不是立即需要的,也不是從磁盤加載,而是通過算法生成的。由於數據是空間訪問的,因此將根據不相關因素以及距最近讀取操作位置的距離從緩存中刪除數據。問題是Java的垃圾收集似乎並沒有很好地與這個系統集成。我想使用數據的空間知識來使其能夠被JVM垃圾收集。有沒有辦法將這些緩存對象標記爲垃圾回收?如果JVM遇到內存不足異常,是否有辦法捕獲該異常並刪除緩存對象以釋放內存?在Java中緩存大量空間數據 - 是否可行?
或者這是做錯事情的錯誤方式?
有沒有辦法將這些緩存對象標記爲垃圾回收?
最簡單的方法是存儲
如果JVM遇到內存外的一個例外,是有辦法捕獲了異常,並刪除緩存對象以釋放內存?
你可以這樣做,但它不是理想的,因爲錯誤可以在任何線程的任何地方拋出。
難道你不在靜態字段中保留引用嗎?順便說一句。 Guava擁有比'HashMap'更強大的緩存類型。 – zeller