`
wen866595
  • 浏览: 264559 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JVM 运行时数据区

    博客分类:
  • java
jvm 
阅读更多

 

原文地址: http://coderbee.net/index.php/java/20131017/512

 

《深入理解Java虚拟机:JVM高级特性与最佳实践》-笔记

 

JVM运行时数据区

根据《Java虚拟机规范》,JVM管理的内存如下:
jvm_runtime_data_area
图片来自网络。

其中绿色部分是所有JVM线程共享的,黄色部分是线程独立的。

 

 

程序计数器

记录正在执行的虚拟机字节码指令的地址,如果执行的本地方法,则值为未定义。

 

方法区

存储已加载类信息、常量、静态变量、即时编译器编译后的代码等数据。

 

HotSpot虚拟机把方法区称为永久代。

 

运行时常量池是方法区的一部分,用于存放编译期生成的各种字面量和符号引用。相对于Class文件常量池的一个特征是具备动态性,可在运行时把常量放入池中,如通过String.intern方法。

 

虚拟机栈

描述Java方法执行的内存模型:每个方法在执行时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每个方法的调用和完成都对应一个栈帧在栈上的入栈和出栈。

 

局部变量表存放编译期可知的基本数据类型、对象引用、returnAddress类型。所需内存空间在编译期完成分配,在运行期不变。

 

当虚拟机无法创建栈帧时抛出StackOverflowError错误。

 

本地方法栈

与虚拟机栈帧作用类似,为本地方法服务。

 

Java堆

存放对象实例及数组。垃圾回收发生的主要地方。

 

对象的内存布局

在虚拟机实现里,一个对象的内存布局包括:对象头、实例数据、对齐填充。

 

HotSpot虚拟机的对象头包括两部分信息:

  • 存储对象自身的运行时数据,如哈希码、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等,这部分数据称为“Mark Word”。是非固定格式的。

  • 类型指针,指向对象所属类型的元数据,虚拟机通过这个指针来确定这个对象是哪个类的实例。

对象的访问定位

一般有两种方式:

  • 句柄:每个句柄包含了对象实例数据与类型数据各自具体地址信息。访问对象数据需要2次定位,在垃圾回收移动对象后,只需要修改句柄的值,不需要修改栈上对象引用的值。

  • 直接指针:直接指向对象实例数据的地址,对象实例数据含有指向对象类型数据的地址。

0
1
分享到:
评论

相关推荐

    第3节: 揭秘JVM运行时数据区-02

    第3节: 揭秘JVM运行时数据区-02第3节: 揭秘JVM运行时数据区-02第3节: 揭秘JVM运行时数据区-02第3节: 揭秘JVM运行时数据区-02第3节: 揭秘JVM运行时数据区-02第3节: 揭秘JVM运行时数据区-02第3节: 揭秘JVM运行...

    JVM运行时数据区

    JVM定义了若干个程序执行期间使用的数据区域。这个区域里的一些数据在JVM启动的时候创建,在JVM退出的时候销毁。其他的数据依赖于每一个线程,在线程创建的时候创建,在线程退出的时候销毁。

    Java内存模型与JVM运行时数据区的区别详解

    主要介绍了Java内存模型与JVM运行时数据区的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    超硬核!!!一篇文章搞定整个JVM运行时数据区

    JVM运行时数据区1 JVM运行时数据区2 解析JVM运行时数据区2.1 方法区(Method Area)2.2 Java堆(Java Heap)2.3 程序计数器(Program Counter Register)2.4 Java虚拟机栈(Java Virtual Machine Stacks)2.5 本地...

    JVM运行时数据区原理解析

    主要介绍了JVM运行时数据区原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    JVM运行时数据区划分原理详解

    主要介绍了JVM运行时数据区划分原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    03 运行时数据区概述及线程.pptx

    03 JVM 运行时数据区概述及线程的 PPT 重绘。讲述 Java 虚拟机 运行时数据区所处位置,结构划分,以及各个区域与线程的关系。

    最新java面试专题01-JVM

    最新jvm面试题合集,涵盖JVM运行时数据区、垃圾回收算法、垃圾回收器、类加载机制、JIT即时编译等核心知识点及常见面试题,一书在手,天下我有。 JVM内存结构:JVM的内存结构主要包括堆内存、方法区、栈(包括Java...

    JVM 工作原理

    JVM的生命周期 JVM的体系结构 JVM类加载器 JVM执行引擎 JVM运行时数据区 JVM垃圾回收 问题

    Java虚拟机(JVM)面试题(总结最全面的面试题!!!)

    说一下 JVM 运行时数据区详细的介绍下程序计数器?(重点理解)详细介绍下Java虚拟机栈?(重点理解)一个方法调用另一个方法,会创建很多栈帧吗?栈指向堆是什么意思?递归的调用自己会创建很多栈帧吗?你能给我详细...

    微服务架构面试专题系列(MySQL,JVM,并发编程,RabbitMQ消息中间件,Spring)

    说一下 JVM 运行时数据区 深拷贝和浅拷贝 说一下堆栈的区别? 队列和栈是什么?有什么区别? 对象的创建 为对象分配内存 处理并发安全问题 对象的访问定位 2. MySQL包括了:索引,锁,事务等常见考点 MySql的主从...

    JVM 运行时数据区域,垃圾回收机制,类加载机制三大功能详解.docx

    运行时数据区域: 在运行时数据区里存储类Class文件元数据(方法区),对象和数组(堆),方法参数局部变量(栈)等。 垃圾回收机制: java 语言的优势之一就是它的自动内存管理,主要回收运行时数据区域的堆内存里的数据 ...

    jvm原理及调优

    一、JVM概述 二、JVM的体系结构 三、JVM运行时数据区 3.1 PC寄存器 3.2 JVM栈 3.3 堆(Heap) 3.4 方法区域 3.5 运行时常量池 3.6本地方法堆栈 四、Jvm堆 五、Jvm调优

    一篇文章掌握整个JVM,JVM超详细解析!!!

    JVM先想想一些问题1 我们开发人员编写的Java代码是怎么让电脑认识的2 为什么说java是跨平台语言3 Jdk和Jre和JVM的区别4 为什么要学习JVM深入学习JVM1 JVM运行时数据区2 解析JVM运行时数据区2.1 方法区(Method Area...

    Java程序员大厂面试(进大厂必看)

    说一下 JVM 运行时数据区 深拷贝和浅拷贝 说一下堆栈的区别? 队列和栈是什么?有什么区别? 对象的创建 为对象分配内存 处理并发安全问题 对象的访问定位 2. MySQL包括了:索引,锁,事务等常见考点 MySql的主从...

    10G的Java面试题视频课

    说一下 JVM 运行时数据区 深拷贝和浅拷贝 说一下堆栈的区别? 队列和栈是什么?有什么区别? 对象的创建 为对象分配内存 处理并发安全问题 对象的访问定位 2. MySQL包括了:索引,锁,事务等常见考点 MySql的主从...

    互联网企业面试真题.zip

    说一下 JVM 运行时数据区 深拷贝和浅拷贝 说一下堆栈的区别? 队列和栈是什么?有什么区别? 对象的创建 为对象分配内存 处理并发安全问题 对象的访问定位 2. MySQL包括了:索引,锁,事务等常见考点 MySql的主从...

Global site tag (gtag.js) - Google Analytics