【问题标题】:Ignite's off-heap storage's working and advantages over heap storageIgnite 的堆外存储的工作原理和相对于堆存储的优势
【发布时间】:2019-06-20 11:37:57
【问题描述】:

我了解堆外存储有助于避免长时间的 GC 暂停,但我想知道 java 在堆上存储时如何序列化对象,以及在堆外存储时如何 ignite 序列化?就像运行 GC 以释放空间一样,什么当堆外用于释放空间时会发生这种情况,与 GC 相比如何?堆外票价与堆存储相比如何?

我们正在尝试一个 POC 来评估 ignite 和 hazelcast,ignite 提供堆外存储,所以想了解它的细节来得出结论..

【问题讨论】:

  • 我不确定你应该使用堆/堆外来决定使用哪个! (Hazelcast 还提供堆外存储,但仅在其企业版中提供。)为什么不专注于功能和性能?
  • 在特性方面,两者都实现了 Jcache JSR107,所以更多的是它们是相同的,除了 ignite 支持类似 SQL 的查询并且可以执行分布式连接,并且在性能方面,ignite 比 hazelcast 有优势。您认为还有什么可以帮助您决定选择哪一个吗?

标签: java heap-memory ignite off-heap


【解决方案1】:

Java 不会序列化存储在堆上的数据。序列化的整个想法是将对象从堆中取出到其他介质,例如堆外。所以它只是被存储了。

Ignite 使用 Binary Objects、Externalizable 和 Binarylizable 接口实现快速序列化。

Ignite 不需要 GC 其堆外,因为它明确地跟踪所有键值对。当某些东西被删除时,内存可以立即使用(只有图形系统真正需要 GC,而不是键值和 SQL)。

但是,对于最近引入的带有真空过程的事务 SQL,情况可能会有所不同。

【讨论】:

  • 那么这个序列化会降低性能吗?另外,当您说它跟踪所有键值对时,这是否意味着额外的开销,因此是以内存为代价的?
  • 这是否也意味着在决定堆存储还是堆外存储时,必须选择轻微的缓慢响应或处理长时间的 GC 暂停?
  • 非常感谢您的回复,这让我更清楚了!
  • 是的,这里有一定的取舍。但是,当您开始重新平衡数据或发送到其他节点时,无论如何您都必须进行序列化,即使使用堆上解决方案
猜你喜欢
  • 2023-03-26
  • 1970-01-01
  • 2020-04-24
  • 1970-01-01
  • 1970-01-01
  • 2014-09-15
  • 1970-01-01
  • 1970-01-01
  • 2012-06-29
相关资源
最近更新 更多