美文网首页
JVM运行时数据区

JVM运行时数据区

作者: JuneLeo | 来源:发表于2018-06-05 14:06 被阅读0次

总体分为三类

运行时数据区:程序计数器,JAVA STACK ,NATIVE METHOD STACK,METHOD AREA,HEAP

线程不共享:程序计数器,JAVA STACK,NATIVE METHOD STACK

线程共享:METHOD AREA,HEAP   (非线程安全)

程序计数器:操作系统中我们学过,进程上CPU执行是看分配的时间片大小的,同理线程也是一样的,那么当线程没有分配到时间片的时候需要有一个记录运行状况的计数器

当前线程所执行的字节码行号指示器

字节码解释器工作依赖计数器控制完成

线程执行Nativan方法时,计数器记录为空(Undefined)

本地方法栈:native方法

虚拟机栈:不同线程间方法栈不共享,每个方法执行都会创建一个栈帧用来存放局部变量,操作数表,动态连接,方法出口等信息,每个方法从调用入栈直至执行完成出栈。

堆:所有的线程共享一块内存区域。

方法区:线程共享方法区,方法区用于储存虚拟机加载的类信息,常量,静态常量和编译器编译后的代码等数据,这里可以看到常量也会在方法中,是因为方法区中又一个运行时常量池,为什么叫运行时常量池,因为在编译后期生成的各种字面量(int i =3,3就是字面量)和符号引用,这些是存放在一个叫做常量池的地方,当类加载进入方法区时,就会把该常量池中的内容放入运行时常量池中

创建对象方式:

指针碰撞:假设Java堆中内存是绝对规整的,所有用过的内存度放一边,空闲的内存放另一边,中间放着一个指针作为分界点的指示器,所分配内存就仅仅是把哪个指针向空闲空间那边挪动一段与对象大小相等的举例,这种分配方案就叫指针碰撞

空闲列表:有一个列表,其中记录中哪些内存块有用,在分配的时候从列表中找到一块足够大的空间划分给对象实例,然后更新列表中的记录。这就叫做空闲列表

对象的访问定位:

句柄访问:Java堆中会划分出一块内存来作为句柄池,引用变量中存储的就是对象的句柄地址,而句柄中包含了对象实例数据和类型数据各自的具体地址信息

直接指针访问:引用变量中存储的就直接是对象地址了

相关文章

  • Java虚拟机02-JVM运行时数据区

    1 JVM运行时数据区 JVM运行时数据区(JVM Runtime Area)其实就是指JVM在运行期间,其对计算...

  • JVM学习笔记

    JVM 注意:0、JVM运行时数据区和JVM内存模型不要搞混1、运行时数据区可以分为:堆、方法区、虚拟机栈、本地方...

  • 线程在JVM中的运行原理

    。线程在启动运行时,主要是在运行时数据区(JVM的内存模型),而JVM的运行时数据区主要包括堆,方法区,Java栈...

  • jvm 运行时数据区-01

    jvm 运行时数据区 jvm 运行时数据区 ,将内存划分为5个区域,java 代码在运行时 类里面的 组成部分 分...

  • 线程安全之可见性问题

    Java内存模型 VS JVM运行时数据区 首先Java内存模型(JMM)和JVM运行时数据区并不是一个东西,许多...

  • jvm内存模型及GC记录

    在jvm中有一块非常重要的区域,就是jvm运行时数据区。今天对该区域做下总结和记录: 在讨论jvm运行时数据区前,...

  • java面试jvm总结

    JVM→ JVM 内存结构运行时数据区:堆、栈、方法区、直接内存、运行时常量池、堆存放对象, 方法区他用于存储已被...

  • Java从入门到入坑(底层篇)

    01:JVM 1:JVM内存结构 class 文件格式、运行时数据区:堆、栈、方法区、直接内存、运行时常量池、 堆...

  • Java虚拟机内存区域详解

    JVM 运行时的数据区域 首先获取一个直观的认识: 总共也就这么 5 个区(直接内存不属于 JVM 运行时数据区的...

  • 《深入理解Java虚拟机-JVM高级特性与最佳实践》学习总结(第

    一、运行时数据区 JVM将我们机器上的内存当做一个运行时数据区来进行处理。该运行时数据区包括以下几个部分: 方法区...

网友评论

      本文标题:JVM运行时数据区

      本文链接:https://www.haomeiwen.com/subject/qxmpsftx.html