一张图让你看懂JVM之垃圾回收算法详解

一张图让你看懂JVM之垃圾回收算法详解

前言

从上面这个图咱们整体上对JVM的结构特别是内存结构有了比较清晰的认识,虽然在JDK1.8+的版本中,JVM内存管理结构有了必定的优化调整。主要是方法区(持久代)取消变成了直接使用元数据区(直接内存)的方式,可是总体上JVM的结构并无大改,特别是咱们最为关心的堆内存管理方式并无在JDK1.8+的版本中有什么变化,因此图中的结构总体上是没有什么不许确的,之因此将方法区以及持久代标注出来,主要仍是为了起到对比认识的做用,你们知道就能够了。程序员

关于持久代元数据区的使用问题,目前能够理解就是使用的物理内存,理论上是不受JVM自动内存回收机制管理的,若是不设置参数大小默认最大使用限制就是操做系统可用物理内存的大小,设置了-XX:MetaspaceSize参数的话,JVM就会在使用物理内存空间时本身进行限制。算法

至于直接内存与物理内存究竟是不是一回事,我认为对于咱们理解上没有区别,只是概念的区别,另外就是对这块内存使用细节上的区别,若是不受JVM的自动回收管理,那么怎么管理呢?说到底仍是JVM自己在直接使用物理内存或者说是直接内存(用时直接“malloc”物理内存区域,而再也不是JVM进程启动时初始化的内存区域),还有一种概念叫native memory,说实话我暂时还不理解他们到底有啥区别,若是你们对这些概念有更好的认识,也能够给我留言哦!之因此对这几个问题作一些笔墨的说明,主要是在以前的文章中你们对此提出了疑问,因此正好在这节的内容中进行下阐述。编程

回到今天的主题,咱们知道JAVA最大的优势就是能够实现自动内存管理,这极大的便利了JAVA程序员,下降了使用成本。但这也使得平时咱们在使用JAVA编程时不太关注JVM究竟是怎样进行内存回收的,只有在须要实际对JVM进行系统性能调优,这里的场景多是在系统面临极致性能优化要求时,咱们才发现须要对JAVA的总体内存结构以及内存回收机制要有必定的认识和了解才行。性能优化

从上面的图中,咱们也大体对整个垃圾回收系统进行了标注,这里主要涉及回收策略、回收算法、垃圾回收器这几个部分。形象一点表述,就是JVM须要知道那些内存能够被回收,要有一套识别机制,在知道那些内存能够回收之后具体采用什么样的回收方式,这就须要设计一些回收算法,而具体的垃圾回收器就是根据不一样内存区域的使用特色,采用相应地回收策略和算法的具体实现了。ide

性能

相关文章
相关标签/搜索