什么是堆内?什么是堆外?
堆内一般指堆内内存,英文全称:on-heap memory
参考:https://baike.baidu.com/item/%E5%A0%86%E5%86%85%E5%AD%98/7270805?fr=aladdin
堆外一般指堆外内存,英文全称:off-heap memory
堆内内存与堆外内存是干什么的?
堆内内存=年轻代+老年代+持久代(1.8之前叫永久代其实一样)
针对java来讲堆内内存是我们经常用到,当java虚拟机分配非空对象一般就放到堆内内存,并且虚拟机会定期会进行回收。当然有某个固定的时间点虚拟机会进行一次彻底的回收(full gc)。由于堆内内存每次GC的代价是根据堆内内存越大则影响越大,所以通过堆外内存来解决该问题。
堆外内存=物理机内存
而堆外内存指的是java虚拟机堆以外的内存,这个区域是受操作系统管理,而不是jvm。
堆外内存优点
减少jvm垃圾回收
加快数据复制的速度
参考文章:
https://bbs.huaweicloud.com/blogs/182907
http://www.xuetimes.com/archives/1337
https://www.cnblogs.com/ronnieyuan/p/11718536.html
http://blog.chinaunix.net/uid-23860671-id-150568.html
https://www.cnblogs.com/candlia/p/11920170.html
https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.5.3