目录
- on-heap堆内内存是什么?
- JVM堆内存是如何划分的?
- JVM堆内存满了后会怎么样?
- 基于堆外内存解决系统GC卡顿问题
今天给大家聊一个很有意思的知识,就是off-heap堆外内存,平时出去面试,或者研究一些技术的时候,经常可能会遇到off-heap堆外内存这个东西,但是很多人可能还不知道off-heap堆外内存到底是什么,所以今天就给大家来深入的分析一下。
on-heap堆内内存是什么?
要说这个off-heap堆外内存,就得先说on-heap也就是堆内内存,这个on-heap堆内内存相信很多人应该都是熟悉的,那就是咱们平时写好的java系统其实运行起来就是一个JVM进程,这个JVM进程是有一块内存空间专门给他用的,这块内存空间就是堆内内存,这大概 如下图所示。
JVM堆内存是如何去划分的?
那么这里通常会产生什么问题呢?一般来说没什么大问题,但是如果是遇到要把大量数据缓存在JVM堆内存里的时候,就可能会有问题 了,所谓的数据缓存,意思就是说,把很多数据存放在堆内存里,这些数据是要一直用的,所以一般来说不能把他回收掉,所以会导致可能很多数据一直停留在JVM的堆内存里,如下图。
那么下一个问题来了,这个JVM里的堆内存是有划分的,一块区域是年轻代,一块区域是老年代,像这种缓存数据,因为是长期存在堆内存里的,所以通常会在年轻代里待一段时间,然后因为没法垃圾回收,所以给放到老年代里去,此时如下图。