Ale*_*lex 6 java optimization caching garbage-collection
我的Java应用程序维护一个内部缓存,可以增长到10演出.到期策略设置为30分钟或达到内存阈值时(我正在使用本地ehcache).很明显,在30分钟之后,所有缓存的对象都将在旧版本中,并且需要一个完整的gc来收集它们.至于现在停止世界暂停可能达到6秒,我想减少它.
平均对象大小为500k,但最高可达1mcg,因此我们讨论的是10000-20000个缓存对象(实际上是字节数组).
GC优化的最佳策略是什么?我知道我可以脱离堆,但它是最后的解决方案.
谢谢!
10GB 缓存不是你应该在堆中做的事情。使用ByteBuffers进行缓存。对象创建不应该那么昂贵。这样就没有涉及 GC,你可以自己管理一切。
例如,如果您在 Java 数据库管理系统中实现页面缓存,则不会为其创建对象,而是使用字节缓冲区或托管字节缓冲区或最佳直接字节缓冲区。您可以在此处了解有关这三个的更多信息。
如果您处理更多,那么假设一次处理一百万个对象,您将看到 GC 时间份额上升。我看到我们管理大量节点进行数据处理的情况,而且速度非常慢。然后我们切换到直接字节缓冲区方案,甚至使用了一些额外的技术,我们能够容纳更多数据(每个对象至少花费 24 字节),并且首先停止考虑对象。最后我们处理的是数据而不是对象。这将性能提高了很多倍,我们能够处理比预期更多的数据。
在那之后,我们注意到它都适合一个数据库,这就是我们抓取所有东西的重点。
因此,请查看直接缓冲区可以为您做什么。
| 归档时间: |
|
| 查看次数: |
1717 次 |
| 最近记录: |