加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

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

发布时间:2023-04-26 13:37:12 所属栏目:教程 来源:
导读:JAVA虚拟机的垃圾收集器是虚拟机内存的清道夫,它的存在让JAVA开发人员能将更多精力投入到业务研发上。了解垃圾收集器,并利用好这个工具,能更好的保障服务稳定性。这篇文章通过分析JAVA虚拟机内存模型,介绍垃圾收
JAVA虚拟机的垃圾收集器是虚拟机内存的清道夫,它的存在让JAVA开发人员能将更多精力投入到业务研发上。了解垃圾收集器,并利用好这个工具,能更好的保障服务稳定性。这篇文章通过分析JAVA虚拟机内存模型,介绍垃圾收集器常用算法和收集器类别,从而使得智能化垃圾收集器的最佳配置和使用方式变得不再遥不可及。

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

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

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

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

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

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

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

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

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章