Java虚拟机二 虚拟机的基本结构
Java虚拟机的基本结构如图所示

类加载子系统负责从文件系统或网络中加载Class信息,加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中可能还会存放运行是的常量池信息,
包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)。
Java堆在虚拟机启动的时候建立,他是Java程序中最主要的内存工作区域。几乎所有的Java对象实例都存放于Java堆中。堆空间是所有的程序共享的。
Java的NIO库允许Java程序使用直接内存。直接内存是在Java堆外的、直接向系统申请的内存空间。通常访问直接内存的速度会优于Java堆。因此出于性能的考虑,读写
频繁的场合可能会考虑使用直接内存。由于直接内存在Java堆外,因此它的大小不受Xmx指定的最大堆大小限制,受系统内存限制。
垃圾回收系统是Java虚拟机的重要组成部分,垃圾回收器可以对方法区、Java堆和直接内存进行回收。其中,Java堆是垃圾回收器的工作重点。和C/C++不同,Java中所
有对象空间释放都是隐式的。Java中没有类似free()或者delete()这样的函数释放指定的内存区域。对于不在使用的垃圾对象,垃圾回收系统会默默在后台工作。
每一个Java虚拟机线程都有一个私有的Java栈。一个线程的Java栈在线程创建的时候被创建。Java栈中保存着帧信息,Java栈中保存着局部比变量、方法参数,同时和Java
方法的调用、返回密切相关。
本地方法栈和Java栈非常类似,最大的不同在于Java栈用于Java方法的调用,而本地方法栈则用于本地方法的调用。最为对Java虚拟机的重要扩展,Java虚拟机允许Java直
接调用本地方法(通常使用C编写)。
PC(Programma Counter)寄存器也是每个线程私有的空间,Java虚拟机会为每一个Java线程PC寄存器。在任意时刻,一个Java线程总是在执行一个方法, 这个正在被
执行的方法称为当前方法。如果当前方法不是本地方法,PC寄存器就会指向当前正在被执行的指令。如果当前方法是本地方法,那么PC寄存器的值就是undefined.
执行引擎是Java虚拟机的核心组件之一,它负责执行虚拟机的字节码。现代虚拟机为了提高执行效率,会使用即时编译技术将方法编译成机器码后再执行。
Java虚拟机二 虚拟机的基本结构的更多相关文章
- Java虚拟机运行时栈帧结构--《深入理解Java虚拟机》学习笔记及个人理解(二)
Java虚拟机运行时栈帧结构(周志明书上P237页) 栈帧是什么? 栈帧是一种数据结构,用于虚拟机进行方法的调用和执行. 栈帧是虚拟机栈的栈元素,也就是入栈和出栈的一个单元. 2018.1.2更新(在 ...
- Java虚拟机详解02----JVM内存结构
主要内容如下: JVM启动流程 JVM基本结构 内存模型 编译和解释运行的概念 一.JVM启动流程: JVM启动时,是由java命令/javaw命令来启动的. 二.JVM基本结构: JVM基本结构图: ...
- Java虚拟机详解----JVM内存结构
http://www.cnblogs.com/smyhvae/p/4748392.htm 主要内容如下: JVM启动流程 JVM基本结构 内存模型 编译和解释运行的概念 一.JVM启动流程: JVM启 ...
- 实战Java虚拟机之二“虚拟机的工作模式”
今天开始实战Java虚拟机之二:“虚拟机的工作模式”. 总计有5个系列 实战Java虚拟机之一“堆溢出处理” 实战Java虚拟机之二“虚拟机的工作模式” 实战Java虚拟机之三“G1的新生代GC” 实 ...
- 深入理解Java虚拟机二之Java内存区域与内存溢出异常
运行时数据区域 1.线程独有的内存区域 PROGRAM COUNTER REGISTER 程序计数器 程序计数器空间较小,是当前线程执行字节码的行号指示器,字节码解释器工作时就是通过改变这个计数器的值 ...
- 《深入理解Java虚拟机》虚拟机性能监控与故障处理工具
上节学习回顾 从课本章节划分,<垃圾收集器>和<内存分配策略>这两篇随笔同属一章节,主要是从理论+实验的手段来讲解JVM的内存处理机制.好让我们对JVM运行机制有一个良好的概念 ...
- java内功 ---- jvm虚拟机原理总结,侧重于虚拟机类加载执行系统
参考书籍:<深入理解java虚拟机>,三天时间用了八个小时看完,像读一本武侠小说,挺爽. 另外需声明:图片都是从我自己的csdn博客转载,所以虽然有csdn标识,但都是我自己画的图片. j ...
- java中JVM虚拟机内存模型详细说明
java中JVM虚拟机内存模型详细说明 2012-12-12 18:36:03| 分类: JAVA | 标签:java jvm 堆内存 虚拟机 |举报|字号 订阅 JVM的内部结构 ...
- Android JNI c/c++调用java 无需新建虚拟机
近期通过研究SDL源码 得出android JNI c/c++调用java 无需新建虚拟机: 具体步骤如下 第一步获得:两个参数 JNIEnv和jclass void Java_com_Test_A ...
随机推荐
- Java编程思想学习笔记——初始化与清理
初始化 构造器保证初始化 构造器采用与类相同的名称. 默认构造器(default constructor):不接受任何参数的构造器,也叫无参构造器. 构造器也能带有形式参数,就能在初始化对象时提供实际 ...
- 从debian9、ubuntu18.04的deb包依赖来看,似乎不是那么好!!
i386体系的依赖.典型的libuuid1依赖问题,需要downgrade保持版本一致! amd64的rpm依赖低版本的perl-base,需要downgrade保持版本一致!
- php解析mpp文件
php没有找到相应的包 Java的mpxj可以实现 所以借助JavaBridge.jar 1.安装jdk,设置环境变量(我的版本jdk1.8.0_131) 2.下载mpjx 在http://www.m ...
- MathType如何编辑大三角形符号
MathType中包含的符号超过1000多个,可以满足我们很多学科的使用,尤其是数学中,涉及到很多的符号,常见的就是代数.几何这两大类,当然还有集合之类的符号使用也比较多.我们在用MathType编辑 ...
- 安装Python模块:pygame
Pygame项目托管在代码分享网站Bitbucket中.要在Windows系统中安装Pygame,请访问https://bitbucket.org/pygame/pygame/downloads/ , ...
- Apache POI HSSF,XSSF和SXSSF的区别
http://blog.csdn.net/benben_1678/article/details/39989683 写的很好,用SXSSF即可解决大数据量,内存占用过高问题
- [转]IOS 崩溃日志分析
以下是一个crash log示例: // 1: Process Information Incident Identifier: 30E46451-53FD--896A-457FC11AD05F Cr ...
- Java -- 新IO -- 目录
20.1 Java 新IO简介 20.2 缓冲区与Buffer 例:演示缓冲区的操作流程 Class : IntBufferDemo01 20.2.2 深入缓冲区操作 20.2.3 创建子缓冲区 20 ...
- MySQL---insert into select from
INSERT INTO perf_week(node_id,perf_time,pm25,pm10,temp,humi) SELECT node_id,'2016-12-22 11:55:00' AS ...
- vs2012修复问题
多装了一个.net framework4.5.1结果vs不能拥,借用了下面这个工具将vs2012从注册表中删除了 就能重装了 http://www.auslogics.com/en/software/ ...