`
yuanlanjun
  • 浏览: 1186218 次
文章分类
社区版块
存档分类
最新评论

虚拟机学习系列 - 1 - 运行时数据区域

 
阅读更多

目录
虚拟机学习系列 - 1 - 运行时数据区域
虚拟机学习系列 - 2 - 垃圾收集概述
虚拟机学习系列 - 3 - 垃圾收集算法
虚拟机学习系列 - 4 - 垃圾收集器
虚拟机学习系列 - 5 - 内存分配与回收策略

虚拟机学习系列 - 6 - JDK工具

虚拟机学习系列 - 附 - 虚拟机参数

虚拟机学习系列 - 附 - OQL(对象查询语言)


之前很少关注过jvm及其相关支持
由于最近项目总是出现OutOfMemory,很无奈,android分给每个应用的内存有限
所以打算看看GC相关知识,索性就把虚拟机的知识也一起看了吧
希望自己能提升一下

刚开始接触,肯定会有不少遗漏,希望大家指点并提出建议
有些我觉得对我工作用处暂时不是很大的知识可能不会整理在内
毕竟整理的过于全面就和抄写一遍书本没啥区别了
第一本书选为:深入理解java虚拟机 - 周志明


运行时数据区域的知识之前整理过一点,用的是xmind
下面就把整理的内容截图贴上,顺便再补充些说明
图片较大,所以我就把它咔嚓了

运行时数据区域可以做如下划分

(图1)


具体可分为下面几个部分
1.程序计数器
(似乎离我还有一定距离,笔记见图3)


2.java虚拟机栈
3.本地机栈

栈分为两个部分,看名字也知道区别是什么,下面以java虚拟机栈为例
生命周期:和线程相同
虚拟机栈描述的是java方法执行时的内存模型。每个方法被执行时都会创建一个栈帧,用于存储:
局部变量表
操作数栈
动态链接
方法出口

每一个方法被调用直至执行完成的过程就对应着一个栈帧在虚拟机栈从入栈到出栈的过程
栈的局部变量表:存放了编译期可知的基本数据类型和引用
在栈里有两种常见且重要的异常
StackOverFlowError:线程请求的栈深度>虚拟机所允许的深度
(大部分虚拟机都允许动态扩展,java虚拟机规范也允许固定长度)
OutOfMemory:当扩展时无法申请到足够的内存

4.java堆
java虚拟机规范规定:java堆可以处于物理上不连续的内存空间,只要逻辑上连续即可
(垃圾回收等内容在后续笔记中会整理)

5.方法区
用来储存已被虚拟机加载的类信息、常量、静态变量,即时编译器编译后的代码数据
运行时常量池:方法区一部分,编译期生成的字面量和符号引用,类加载后存放到这里

(图2)

(图3)


分享到:
评论

相关推荐

    Java虚拟机运行时数据区域汇总

    主要给大家介绍了关于Java虚拟机运行时数据区域的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    Java虚拟机运行时数据区

    java虚拟机运行数据区如图所示。  1、程序计数器  是一块较小的内存空间,是当前线程所执行的字节码的行号指示器。如果线程正在执行一个java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;...

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

    VM相关的一些内容,比如下面的这三个内容算是比较核心知识点了 运行时数据区域: 在运行时数据区里存储类Class文件元数据...类加载机制: 虚拟机首先需要把编译完成的字节码文件通过类加载器来加载到运行时数据区域

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

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

    详解Java虚拟机管理的内存运行时数据区域

    主要介绍了详解Java虚拟机管理的内存运行时数据区域的相关资料,需要的朋友可以参考下

    深入理解Java虚拟机视频教程(jvm性能调优+内存模型+虚拟机原理)视频教程

    第28节Java内存区域-直接内存和运行时常量池00:15:53分钟 | 第29节对象在内存中的布局-对象的创建00:21:19分钟 | 第30节探究对象的结构00:13:47分钟 | 第31节深入理解对象的访问定位00:08:01分钟 | 第32节垃圾...

    深入理解JVM内存结构及运行原理全套视频加资料.txt

     第28讲 Java内存区域-直接内存和运行时常量池 00:15:53  第29讲 对象在内存中的布局-对象的创建 00:21:19  第30讲 探究对象的结构 00:13:47  第31讲 深入理解对象的访问定位 00:08:01  第32讲 垃圾回收-...

    重磅2023年最新JAVA核心知识整理从基础到精通完整教程-283页全面试题解析学习资料涵项目源码-20231120.pdf

    2.2.4.堆(Heap-线程共享)-运行时数据区 2.2.5.方法区/永久代(线程共享) 2.3.JVM运行时内存 2.3.1.新生代 2.3.1.1.Eden区 2.3.1.2.ServivorFrom 2.3.1.3.ServivorTo 2.3.1.4.MinorGC的过程(复制->清空->互换) 1...

    Java虚拟机

    2.2 运行时数据区域 2.2.1 程序计数器 2.2.2 Java虚拟机栈 2.2.3 本地方法栈 2.2.4 Java堆 2.2.5 方法区 2.2.6 运行时常量池 2.2.7 直接内存 2.3 HotSpot虚拟机对象探秘 2.3.1 对象的创建 2.3.2 对象的...

    认识JVM虚拟机

    JVM是什么 JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的...其中一些数据区域是在Java虚拟机启动时

    与我一起学 JVM:Java 虚拟机内存组成概况

    与我一起学 JVM:Java 虚拟机内存组成概念前言Java 虚拟机内存划分运行时数据区域程序计数器Java 虚拟机栈局部变量表本地方法栈Java 堆方法区运行时常量池直接内存 前言 刚开始看《深入理解Java虚拟机》,文章主要就...

    JVM原理之运行时数据区详解

    4. 运行时数据区 关于运行时数据官方解释:https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.5 4.1 堆 (heap) 堆在虚拟机中是一块共享区域, 存放 对象实例 和数组; 堆在虚拟机启动的时候...

    JAVA面试核心知识点283页

    2.2.4.堆(Heap-线程共享)-运行时数据区 23 2.2.5.方法区/永久代(线程共享) 23 2.3.JVM 运行时内存 24 2.3.1.新生代 24 2.3.1.1.Eden 区 24 2.3.1.2.ServivorFrom 24 2.3.1.3.ServivorTo 24 2.3.1.4.MinorGC 的...

    java虚拟机详解.docx

    当虚拟机装载类文件的时候,它解析其中的二进制数据所包含的类信息,并把它们放到方法域中;当程序运行的时候,JVM把程序初始化的所有对象置于堆上;而每个线程创建的时候,都会拥有自己的程序计数器和 Java栈,其中...

    JVM 虚拟机.md

    JVM 学习,包含运行数据区域,GC,JMM 等常见问题

    OHDSI-in-a-Box:虚拟机包含OMOP CDM中的SynPUF数据,RDBS包括查询客户端,WebAPI,ATLAS,R和Python

    盒装OHDSI 快速部署...部署演练视频Linux版本AWS区域代码名称发射cn-northwest-1 中国(宁夏) eu-west-1 欧盟(爱尔兰) ap-northeast-1 AP(东京) us-east-1 美国东部(弗吉尼亚北部) OHDSI组件版本OMOP通用数据

    JAVA架构知识库整理 JAVA架构知识 Java架构师 Java 架构师必备

    堆(Heap-线程共享)-运行时数据区,2.2.5. 方法区/永久代(线程共享)2.3. JVM 运行时内存2.3.1. 新生代.2.3.1.1. Eden区2.3.1.2. ServivorFrom..2.3.1.3. ServivorTo.2.3.1.4. MinorGC 的过程(复制->清空->互换)1: ...

    深入理解_Java_虚拟机 JVM_高级特性与最佳实践

    第2章 Java内存区域与内存溢出异常 / 24 2.1 概述 / 24 2.2 运行时数据区域 / 25 2.2.1 程序计数器 / 25 2.2.2 Java虚拟机栈 / 26 2.2.3 本地方法栈 / 27 2.2.4 Java堆 / 27 2.2.5 方法区 / 28 2.2.6 运行...

Global site tag (gtag.js) - Google Analytics