gc-invisible heap,简称gcih,是一种将java对象从java堆内移动到堆外,并且可以在jvm间共享这些对象的技术。
下面的性能测试数据来自于线上gcih + hesper + forest的实际压测数据,具体结论由淘宝性能测试团队统计。
系统load对比
机器资源消耗对比
单机最大能力对比
综上:gcih的性能明显优于非gcih,可以使单机能力提升20%左右。
gcih 内存共享有以下特点:
不经过jni调用
没有序列化和反序列化
gc性能提高
数据更集中,cache命中率提高
map/reduce 有时需要一些公用的对象,每个client jvm都有一份拷贝。
一旦初始化好,在使用过程中是只读的
对象比较大,占用较多内存,甚至成为瓶颈
一个实际场景,dump中心的udp,用来做join的一些公共hashmap共享后可以节约内存,甚至可能提高效率(如果内存是瓶颈)
下图显示了使用gcih内存共享功能后的hadoop系统状况,左边的图表示使用gcih前系统内每个jvm进程内均有一份对象的拷贝, 右边的图显示使用gcih后多个jvm进程共享一份数据,有效降低了物理内存的使用。
