本文主要是介绍学习笔记 --- JVM 堆外内存(off-heap)、堆内内存(on-heap),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
堆内内存(on-heap)
Java中分配的非空对象都是由Java虚拟机的垃圾收集器管理的,也称为堆内内存(on-heap memory)。虚拟机会定期对垃圾内存进行回收,在某些特定的时间点,它会进行一次彻底的回收(full gc)。彻底回收时,垃圾收集器会对所有分配的堆内内存进行完整的扫描,这意味着一个重要的事实——这样一次垃圾收集对Java应用造成的影响,跟堆的大小是成正比的。过大的堆会影响Java应用的性能。
对于对内内存效率问题:一种解决方案就是使用堆外内存(off-heap memory)
堆外内存(off-heap)
堆外内存意味着把内存对象分配在Java虚拟机的堆以外的内存,这些内存直接受操作系统管理(而不是虚拟机)。这样做的结果就是能保持一个较小的堆,以减少垃圾收集对应用的影响。使用堆外内存能够降低GC导致的暂停
- 对于大内存有良好的伸缩性
- 对垃圾回收停顿的改善可以明显感觉到
- 在进程间可以共享,减少虚拟机间的复制
问题:
数据结构变得不那么直观,如果数据结构比较复杂,就要对它进行串行化(serialization),而串行化本身也会影响性能
应用场景:
冷数据,短期内不用的数据可以暂时放在堆外内存中
- Session会话缓存,保存不激活的用户session,比如用户没有正常退出,我们也无法确定他会不会短时间内再回来,将其会话存到堆外内存。一旦再次登录,无需访问数据库可再次激活
- 计算结果的缓存,如Spark的堆外内存的使用
- 大量查询的结果等,击中率比较低的都可以迁移到堆外。
参考:
https://www.jdon.com/46066
https://blog.csdn.net/u010722938/article/details/51558315
这篇关于学习笔记 --- JVM 堆外内存(off-heap)、堆内内存(on-heap)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!