java虚拟机规范 51cto_java虚拟机
最近学习java虚拟机做了一些整理,会陆续发完。
Java虚拟机
一、概念:当我们谈到java虚拟机的时候,有可能指下面3个方面:
1):抽象java虚拟机的规范。
2):一个java虚拟机具体的实现。------实现是指:实现需要有接口,用类实现接口,并实现接口所有方法。就是说先有一个接口,然后写一个类实现接口中的所定义的方法。
3):一个运行中的java虚拟机实例。
而我们经常说的大多数是第三种。也就是一个正在运行的java虚拟机实例。
java虚拟机之所以被称为“虚拟”的,就是因为它仅仅是有一个规范定义的抽象计算机。因此,运行某个java程序,首先需要一个符合该规范的具体实现。
当运行一个java程序的同时,也就在运行一个java虚拟机实例。每个java程序都运行于某个具体的java虚拟机实现的实例上。它是java编译器和os平台之间的虚拟处理器。负责与操作系统之间的交互
二、java虚拟机生命周期:
Java虚拟机的产生和消亡是伴随java程序的运行和停止。也就是说当java程序运行的时候,相应的java虚拟机也就诞生了,反正消亡。其具体的实现是通过调用内部main方法来实现。
三:jvm执行java程序的顺序是什么呢?
大致如下:
Java(源代码)——>class(字节码)——>类加载器——>字节码校验器——>硬件
具体过程: 1、加载class文件
2、管理分配内存
3、执行垃圾回收
四、Java虚拟机的体系结构:
组成部分:一系列的子系统、内存区域、数据类型和使用指南。这些构成java虚拟机的内部结构。这些组成结构实现了外部行为(java虚拟机与OS之间的实现)和实现内部行为(java虚拟机的内部之间的实现)。
类加载器子系统(class loader subsystem)作用:每个java虚拟机都由类加载器子系统(class loader subsystem)。负责加载程序中类型(类和接口)。
执行引擎(execution engine):负责执行被加载类中的包含的指令。每个java虚拟机都有一个执行引擎(execution engine)。
内存区域:程序的执行需要一定的内存空间。如字节码、被加载的其他额外信息、程序中的对象、方法参数、返回值、本地变量、处理中间变量等等。Java虚拟机将这些的信息统统保存在数据区中(data areas)。虽然每个java虚拟机的实现中都包含数据区,但是java虚拟机规范对数据区的规定却非常的抽象。许多结构上的细节部分都留给了java虚拟机实现者的发挥。不同 的java虚拟机实现上的内存结构千差万别。一部分实现可能占用很多内存,而其他一下可能只占用很少的内存。一些实现可能会使用虚拟内存。
Data areas:数据区中的一部分是整个程序的共有的,有其他部分被单独的线程控制。每个虚拟机都包含方法去(method area)和堆(heap),他们被整个程序的共享的。
方法区(method area):当java虚拟机加载并解析一个类后,将从类文件中解析出来信息保存在方法区中(method area)。
堆(heap):程序执行时的创建的对象保存在堆中。
其他的内存区域:
PC寄存器概念:又叫指令计数器。中央处理机中的一种寄存器,用来保存计算机的执行程序的指令地址。
作用:保存线程执行的下一条指令。这其中包括是否调用本地方法情况:
当不调用本地方法的时候:PC寄存器保存线程执行下一条指令。
当线程调用本地方法的时候,pc寄存器不保存线程的下一条执行指令。
Javastacks(java 堆栈)作用:保存一个线程的调用方法的状态,包括本地变量、调用方法的参数、返回值、处理的中间变量。调用本地方法的时的状态保存在本地方法堆栈中(native method stacks),也可能在寄存器中。
Javastacks是由java堆栈块组成。而堆栈块包含java方法调用的状态。
Java虚拟机不使用寄存器保存中间结果,而是用java堆栈中存放中间结果。
好处:使java虚拟机的指令更紧凑,也更容易在一个没寄存器的设备上实现java虚拟机。
数据类型(data types):每个java虚拟机中使用的数据都有确定的数据类型。
数据类型和操作都在java虚拟机规范中严格定义的。其中数据类型包括原始数据类型和引用数据类型。
引用类型依赖于实际对象,但不是对象本身。
原始数据类型不依赖任何东西,他们就是本身表示的数据。
java虚拟机规范 51cto_java虚拟机相关推荐
- java 虚拟机规范_Java虚拟机规范----Java虚拟机结构
Java体系和一些基本概念 Java平台的结构图: JVM与JRE.JDK关系? JVM:Java Virtual Machine(Java虚拟机),负责执行符合规范的Class文件 JRE: Jav ...
- Java虚拟机规范(目录)
Java虚拟机规范 Java SE 11 Edition 介绍 Java虚拟机介绍 Java虚拟机的结构 class文件格式 数据类型 原始类型和值 引用类型和值 运行时数据区 帧 对象的表示 浮点算 ...
- java虚拟机规范-加载、链接与初始化
前言 java虚拟机是java跨平台的基石,本文的描述以jdk7.0为准,其他版本可能会有一些微调.java代码本身并不能为jvm识别,实际上在jvm中的表现形式为Class对象,一个java类从字节 ...
- java虚拟机规范这本书怎么样_JVM规范系列开篇:为什么要读JVM规范?
博主个人独立站点开通啦!欢迎点击访问:https://shuyi.tech 许多人知道类加载机制.JVM内存模型,但他们可能不知道什么是<Java虚拟机规范>.对于Java开发来说,< ...
- 【Java虚拟机规范】JVM类加载机制
[Java虚拟机规范]JVM类加载机制 理论知识 一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载(Loading).验证(Verification).准备(Prep ...
- java虚拟机规范阅读(三)异常
Java虚拟机里面的异常使用Throwable或其子类的实例来表示,抛异常的本质实际上是程序控制权的一种即时的.非局部(Nonlocal)的转换--从异常抛出的地方转换至处理异常的地方. 绝大多数的异 ...
- Java虚拟机规范 Java SE 8版 - class文件格式(二)
Java虚拟机规范 Java SE 8版 - class文件格式(二) 4.5 字段 4.6 方法 4.7 属性 4.7.1 自定义和命名新的属性 4.7.2 ConstantValue 属性 4.7 ...
- 《java虚拟机规范SE7》整理——第四章:Class文件格式
按照<java虚拟机规范SE7>章节顺序整理的笔记. 目录: ClassFile格式(注:也就是class文件的总结构) 描述符和签名 常量池 字段 方法 属性 Java虚拟机代码约束 C ...
- 《java虚拟机规范SE7》整理——第三章:为Java虚拟机编译
按照<java虚拟机规范SE7>章节顺序整理的笔记. 目录: 常量.局部变量的使用和控制结构 算术运算 访问运行时常量池 接收参数 方法调用 使用类实例 数组 编译switch语句 抛出异 ...
最新文章
- 【LeetCode】LC1672. 最富有客户的资产总量
- xml文档的「?xml version=“1.0“ encoding=“UTF-8“?」 的作用?
- PhpStudy 升级 MySQL 版本到5.7
- 全局路径规划:图搜索算法介绍6(A star)Matlab算法实现
- SourceInsight下面一直出现unable to write to temp file for saving operation 这样的提示
- 定义或修改本地屏幕元素的注释
- Usaco2012-2013 金组 题解 (暂缺Hill walk以及Figue eight)
- uniapp引入字体包——DIN
- java学生管理系统代码
- 分析 AlphaGo 算法原理的本质
- kdj买卖指标公式源码_通达信买卖KDJ副图指标公式
- The server time zone value 'XXXXXXXXX' is unrecognized or represents more tha
- 星星之火-47: 5G的八大组网方案
- reincarnation server
- 40岁男人娶20岁女孩
- 源码分析Dubbo监控中心实现原理
- 人体神经系统示意图手绘,人体神经结构图示意图
- python爬虫爬取豆瓣电影信息城市_Python爬虫入门 | 2 爬取豆瓣电影信息
- 科大讯飞麦克风阵列回声消除须知 V1.0
- Matlab函数封装为DLL供Cpp调用