栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java运行时数据区

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java运行时数据区

Java运行时数据区
  • 程序计数器
  • Java虚拟机栈
  • 本地方法栈
  • 方法区
    • 运行时常量池
  • 直接内存
  • 对象的创建流程
    • 内存分配机制

程序计数器

记录当前执行字节码行号指示器。字节码解释器工作通过改变计数器的值去读取后续的字节码指令。
在任何一个时刻,一个内核会执行一条指令,为了切换线程后还能继续正确执行,每一个线程都有一个程序计数器

Java虚拟机栈

java虚拟机栈为线程私有,每一个线程都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息
虚拟机栈为虚拟机执行字节码服务

本地方法栈

为虚拟机执行本地方法服务

方法区

用于存放已被虚拟机加载的类信息、常量、静态变量、即时编译后的代码等数据。有些虚拟机里叫做永久代
java1.7之后字符串常量池保存在堆中,以及从方法区中移出。

运行时常量池

产量池用于存放编译期生成的各种字面量和符号引用,在类加载后这部分被存放于方法区中的常量池中。

虚拟机采用分代收集算法回收内存。堆中可以划分为年轻代、老年代。
年轻代中可以有Eden空间、From survivor空间、To survivor空间

直接内存

直接内存不属于运行时数据区。在java虚拟机调用本地方法时,为了避免在java堆内存和Native堆内存之间来回复制数据。例如需要读取文件时。

对象的创建流程 内存分配机制
  • 指针碰撞:这种机制适用于内存归整,已使用的内存在一堆,未适用的空闲内存在一堆,有一个指针标记使用内存和空闲内存,分配内存时将指针移动需要分配内存空间大小。
  • 空闲列表:如果内存不是归整,则需要维护一个列表,列表存放空闲内存区域和已使用空间,当需要分配内存时,从列表中找到一块合适的内存分配,分配完后更新列表。
    具体使用哪种分配算法有垃圾收集器决定。Serial和ParNew等由于带Compact功能,使用的是指针碰撞算法。CMS基于Mark-Sweep算法,采用空闲列表。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/531140.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号