java是Cassandra最不受压缩OOPS问题影响的吗?
我正在读关于Java Compressed OOPS的书。我看到Java所做的是大量转换,为所有对象引用使用压缩指针
我能理解的是,对于大量的对象,从-XX:+UseCompressedOops
到-XX:-UseCompressedOops
,您可能会使用更多的内存
假设你有一百万个对象,在第一种情况下,你需要4Mb的数据作为参考,在第二种情况下,你需要8Mb的数据
现在,我有一台内存为64Gb的电脑,我想用50Gb的内存给卡桑德拉。但现在我想知道额外的18Gb是否真的会有帮助,还是会被许多无用的指针数据填满
所以我的问题是:
卡桑德拉是管理大量的小对象,还是只管理少数几个大对象?(即,是否为每个单元格、每行、每个sstable分配一个单独的缓冲区?)
在第一种情况下,当超过32Gb的Cassandra缓存与50Gb的缓存时,我们可能不会获得太多收益
# 1 楼答案
从堆的角度来看,我的一个集群节点就是这样的:
堆上有25.759.325个实例,这个节点以
-Xms7967M -Xmx7967M -Xmn800M
开始,所以这里有很多实例有关调优资源,请参见:https://docs.datastax.com/en/dse/5.1/dse-admin/datastax_enterprise/operations/opsTuneJVM.html
在我的一个测试中,我在一台主机上运行了4个Cassandra实例,每个实例的堆容量为8GB(在一台内存为64GB的机器上,为操作系统页面缓存留出了32GB的空间,每个主机都有机架感知功能,以确保在主机停机时不会丢失多个副本)