最近学习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虚拟机相关推荐

  1. java 虚拟机规范_Java虚拟机规范----Java虚拟机结构

    Java体系和一些基本概念 Java平台的结构图: JVM与JRE.JDK关系? JVM:Java Virtual Machine(Java虚拟机),负责执行符合规范的Class文件 JRE: Jav ...

  2. Java虚拟机规范(目录)

    Java虚拟机规范 Java SE 11 Edition 介绍 Java虚拟机介绍 Java虚拟机的结构 class文件格式 数据类型 原始类型和值 引用类型和值 运行时数据区 帧 对象的表示 浮点算 ...

  3. java虚拟机规范-加载、链接与初始化

    前言 java虚拟机是java跨平台的基石,本文的描述以jdk7.0为准,其他版本可能会有一些微调.java代码本身并不能为jvm识别,实际上在jvm中的表现形式为Class对象,一个java类从字节 ...

  4. java虚拟机规范这本书怎么样_JVM规范系列开篇:为什么要读JVM规范?

    博主个人独立站点开通啦!欢迎点击访问:https://shuyi.tech 许多人知道类加载机制.JVM内存模型,但他们可能不知道什么是<Java虚拟机规范>.对于Java开发来说,< ...

  5. 【Java虚拟机规范】JVM类加载机制

    [Java虚拟机规范]JVM类加载机制 理论知识 一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载(Loading).验证(Verification).准备(Prep ...

  6. java虚拟机规范阅读(三)异常

    Java虚拟机里面的异常使用Throwable或其子类的实例来表示,抛异常的本质实际上是程序控制权的一种即时的.非局部(Nonlocal)的转换--从异常抛出的地方转换至处理异常的地方. 绝大多数的异 ...

  7. 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 ...

  8. 《java虚拟机规范SE7》整理——第四章:Class文件格式

    按照<java虚拟机规范SE7>章节顺序整理的笔记. 目录: ClassFile格式(注:也就是class文件的总结构) 描述符和签名 常量池 字段 方法 属性 Java虚拟机代码约束 C ...

  9. 《java虚拟机规范SE7》整理——第三章:为Java虚拟机编译

    按照<java虚拟机规范SE7>章节顺序整理的笔记. 目录: 常量.局部变量的使用和控制结构 算术运算 访问运行时常量池 接收参数 方法调用 使用类实例 数组 编译switch语句 抛出异 ...

最新文章

  1. 【LeetCode】LC1672. 最富有客户的资产总量
  2. xml文档的「?xml version=“1.0“ encoding=“UTF-8“?」 的作用?
  3. PhpStudy 升级 MySQL 版本到5.7
  4. 全局路径规划:图搜索算法介绍6(A star)Matlab算法实现
  5. SourceInsight下面一直出现unable to write to temp file for saving operation 这样的提示
  6. 定义或修改本地屏幕元素的注释
  7. Usaco2012-2013 金组 题解 (暂缺Hill walk以及Figue eight)
  8. uniapp引入字体包——DIN
  9. java学生管理系统代码
  10. 分析 AlphaGo 算法原理的本质
  11. kdj买卖指标公式源码_通达信买卖KDJ副图指标公式
  12. The server time zone value 'XXXXXXXXX' is unrecognized or represents more tha
  13. 星星之火-47: 5G的八大组网方案
  14. reincarnation server
  15. 40岁男人娶20岁女孩
  16. 源码分析Dubbo监控中心实现原理
  17. 人体神经系统示意图手绘,人体神经结构图示意图
  18. python爬虫爬取豆瓣电影信息城市_Python爬虫入门 | 2 爬取豆瓣电影信息
  19. 科大讯飞麦克风阵列回声消除须知 V1.0
  20. Matlab函数封装为DLL供Cpp调用

热门文章

  1. pandas取某一索引的数据
  2. 吴恩达作业7:梯度下降优化算法
  3. pyspider 安装 和 快速开始
  4. Python编程从入门到实践~异常
  5. java 数字计算精度问题
  6. python drop_duplicates_Pandas drop_duplicates方法不起作用
  7. MAC下使用OpenSSL生成私钥和公钥
  8. XCode的控制台调试命令
  9. NSOperationQueue简介
  10. 软件工程资料 - 优秀的大学怎么教程序开发和软件工程课