400 028 6601

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

聊聊JAVA虚拟机中的垃圾收集器

前言

JAVA虚拟机的垃圾收集器是虚拟机内存的清道夫,它的存在让JAVA开发人员能将更多精力投入到业务研发上。了解垃圾收集器,并利用好这个工具,能更好的保障服务稳定性。这篇文章通过分析JAVA虚拟机内存模型,介绍垃圾收集器常用算法和收集器类别,使得垃圾收集器的配置和使用变得不再遥不可及。

目前成都创新互联已为1000多家的企业提供了网站建设、域名、网站空间、网站托管、服务器租用、企业网站设计、曲周网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

JAVA虚拟机内存模型

JAVA虚拟机内存可以划分为:虚拟机栈、本地方法栈、JAVA堆内存、方法区(包含运行时常量池)、程序计数器、直接内存。

虚拟机栈

虚拟机栈是线程私有的,生命周期跟线程相同。也就是说一个线程被创建后,虚拟机为其分配了一个独立的栈帧来存储线程的局部变量、操作数、动态链接、方法出口等信息,当线程结束后,该栈帧也会被回收清理。

本地方法栈

本地方法栈是虚拟机的native方法执行期间使用的一个栈帧。

JAVA堆内存

堆内存是被所有线程共享的一块区域,用来存放对象实例和数组,属于内存中最大的一块区域,也是垃圾收集的主要区域。从垃圾收集的角度看,堆内存经常分为新生代和老年代。

方法区

方法区也是被所有线程共享的一块区域,用来存储被虚拟机加载的类信息、常量、静态变量、JIT编译后代码等数据。也可以成为永久代。

程序计数器

程序计数器是线程私有的,作为当前线程所执行的字节码的行号指示器,每个线程有一个程序计数器,用于记录CPU切换线程时记录当前线程的执行位置,以便下次继续从当前位置往下执行。

直接内存

这块不属于JAVA虚拟机内存,但使用频繁,也可称之为“堆外内存”

JAVA虚拟机垃圾收集器

根据上述对JAVA虚拟机内存区域模型的介绍,我们知道JAVA程序中的对象实例都存储在JAVA堆内存中,因此垃圾收集主要也是针对堆内存进行。为了更好的管理JAVA对象实例,并结合对象实例的生存时间长短,JAVA虚拟机将堆内存分为新生代和老年代,分别存储刚创建不久的对象和存活较长时间的对象实例,并采用分代收集的策略分别回收新生代和老年代的内存。

内存分配与回收策略
垃圾收集算法(3种基本算法)
常用垃圾收集器

由于虚拟机中的垃圾收集是分代收集的,新生代和老年代的垃圾收集策略不太一样,所以一般是使用针对新生代和老年代的垃圾收集器组合。

配置垃圾收集机器参数

当前题目:聊聊JAVA虚拟机中的垃圾收集器
URL网址:http://mbwzsj.com/article/iejhoh.html

其他资讯

让你的专属顾问为你服务