
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
程序员在学习java编程开发语言的时候一定会接触到虚拟机这个编程知识,而今天我们就通过案例分析来了解一下,java编程虚拟机运行时数据区域都有哪些类型。
1、程序计数器
线程私有,一块较小的内存空间,可以看成是当前线程字节码执行的行号。一个不会有OutOfMemoryError情况出现
2、Java虚拟机栈
线程私有,线程运行时的java内存模型,存储局部变量表、操作数栈、动态链接、方法返回地址。局部变量表中存放编译期可知的各种基本数据类型、对象引用。当线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverFlow异常;如果扩展时无法申请更多内存,将抛出OutOfMemoryError。
3、本地方法栈
线程私有,本地方法运行时内存模型,与Java虚拟机栈类似,HotSpot将两者合二为一。
4、堆
线程共享,对象分配的地方,几乎所有的Java对象都分配在堆上,垃圾回收的主要区域。从内存回收的角度可以分为新生代和老年代,新生代又可细分为Eden区、FromSurvivor、ToSurvivor。从内存分配的角度,可以将堆分为多个线程私有的分配缓冲区(TLAB)。
5、方法区
线程共享,存储类信息、静态变量、常量、即时编译器编译后的代码等。
方法区、永久代、元空间的关系
方法区是Java虚拟机规范中的概念,规定了这个区域应该存储哪些数据,是一个逻辑概念,没有规定需要怎样实现,HotSpot在jdk1.8之前都是用永久代来实现方法区,而从1.8开始移除了永久代,将永久代里的部分数据放大本地直接内存中存储,而将其他一部分数据移到堆中存储,例如字符串常量池。在本地内存中的那部分区域就叫元空间。
常量池
在Class文件里有一项信息叫常量池,存放着编译期生成的各种字面量和符号引用,这部分内容在类加载后进入方法区的运行时常量池,运行时常量池也会在运行时添加对象,比如string的intern方法会将字符串常量添加进常量池。
助力2021高薪就业,Java实战项目来袭!林森老师带你重温经典,从Java角度解析坦克大战游戏~教你用键盘监控事件控制坦克移动、子弹发射等!原价499元,限时9.9元购买,邀请好友学习还可获得现金红包!上不封顶~
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。