java - 用Java缓存大量空间数据——可行吗?

标签 java caching out-of-memory spatial

我遇到了一种情况,我想存储空间数据的内存缓存,该数据不是立即需要的,也不是从磁盘加载的,而是通过算法生成的。由于数据是在空间上访问的,因此数据会根据不相关因素以及距最近读取操作位置的距离从缓存中删除。问题在于Java的垃圾收集似乎并没有与这个系统很好地集成。我想利用数据的空间知识来使其能够被 JVM 进行垃圾收集。有没有办法将这些缓存对象标记为垃圾可收集?如果JVM遇到内存不足的异常,有没有办法捕获该异常并删除缓存对象以释放内存?

或者这是错误的做事方式吗?

最佳答案

Is there a way to mark these cache objects as garbage-collectible?

最简单的方法就是存储

  • 一些具有很强引用值(value)的数据,例如在 LinkedHashMap 中,可能作为 LRU 缓存。
  • 如果可能,您希望在软引用缓存中保留的数据。这些不会立即清理,但会在 OOME 之前清理。
  • WeakHashMap 中可以以很少的成本丢弃的数据。该数据在执行 GC 之前一直可用。

If the JVM encounters an out-of-memory exception, is there a way to catch that exception and delete the cache objects to free up memory?

您可以执行此操作,但这并不理想,因为错误可能会在任何线程中的任何位置抛出。

关于java - 用Java缓存大量空间数据——可行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12422165/

相关文章:

java - 从带有外部 jar 文件的 Windows 命令行运行 Java 时出现 NoClassDefFoundError

java - 在 Java 中按管道拆分会产生不同的结果

c# - Dispose() 不能防止内存不足异常

java - OutOfMemoryError : Java Heap Space. 如何修复递归方法中发生的此错误?

visual-studio - Umbraco Backoffice 没有注册对自定义属性编辑器所做的更改

java - 内存不足错误 : Java Heap space

java - 无法使用我的 POJO 解析构造函数 ArrayAdapter

java - Netbeans Ant 构建错误 'unsupported element customize'

ios - 如何使用 SDWebImage 从缓存中提取旧的 UIImage 并将其放入占位符?

python - 一个好的 blobstore/memcache 解决方案