jdk1.8下jvm虚拟机内存结构

本文介绍了JVM的内存结构,包括堆、虚拟机栈、本地方法栈、方法区(JDK1.8后为元空间)和程序计数器。堆内存分为年轻代、老年代和永久代(JDK1.8后为元空间),以提高对象内存分配和垃圾回收效率。年轻代中的对象经历多次GC后进入老年代。如果堆或方法区空间不足,会导致OutOfMemoryError异常。虚拟机栈和本地方法栈分别用于执行Java方法和本地方法。程序计数器记录当前线程执行的字节码行号。
摘要由CSDN通过智能技术生成

前言

前面说了jvm的概念,不太理解的朋友可以看看我上一篇博客,不过jvm也是比较复杂的一个东西,想深入了解看一两篇文章是不够的,可以去看看《深入理解java虚拟机》,这里我带大家来康康jvm的内存结构,中间不乏字数较多熬,毕竟是概念性的东西,嘿嘿嘿

首先我们得知道,jvm运行时数据区域分为五大部分:堆,java虚拟机栈,本地方法区,程序计算器,方法区(jdk1.8版本后叫做元区间,在jdk1.8版本后位置移到了本地内存)

在这里插入图片描述

不知道大家看到这五个名词第一反应是什么,但是我第一次看到我直接阿巴阿巴,这啥啊,都是干啥的啊,随后我找了一些资料,也有了一些了解。

堆*

:该区域是线程共享的,主要用于用于存放对象实例。绝大多数创建的对象都会被存放到这里(除了部分由于逃逸分析而在对外分配的对象,该部分只是在方法体被引用,故被分配到了栈上)。

堆这块区域也是jvm虚拟机中占用最大的,因为我们写项目会写很多类,它们都被放在堆里面,如果java堆空间不足了,程序会抛出OutOfMemoryError异常。因此也是垃圾回收的主要目标。

而堆也划分了几个区域:年轻代(young)、老年代(old)、永久区(permanent 对HotSpot虚拟机而言,JDK1.8之后为metaspace(元区间)替代永久代)

永久代

JDK1.8之后为metaspace(元区间)替代永久代,它采用永久代的方式来实现方法区,其他的虚拟机实现没有这一概念,而且HotSpot也有取消永久代的趋势,在JDK 1.7中HotSpot已经开始了“去永久化”,把原本放在永久代的字符串常量池移出。永久代主要存放常量、类信息、静态变量等数据,与垃圾回收关系不大,新生代和老年代是垃圾回收的主要区域。

老年代

在新生代中经历了多次(具体看虚拟机配置的阀值)GC后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值