JVM解读:JVM体系结构

JVM全称是java Virtual Machine(java虚拟机),JVM屏蔽了与各个计算机平台相关的软件和硬件差异
在接下来的日子里,我要通过写博客的形式学习JVM,让自己更懂得Java
本系列文章是对《深入分析javaweb技术内幕》和《深入理解java虚拟机》的总结,欢迎大家一起吐槽,一起进步

本文是《JVM解读》的第一篇:JVM体系结构

JVM体系结构

JVM的基本组成

(1)指令集:JVM指令集

(2)类加载器:在jvm启动时或者类在运行时将需要的class加载到JVM中

(3)执行引擎:负责执行class文件中的字节码指令,相当于CPU

(4)运行时数据区:将内存划分成若干个区,分别完成不同的任务

(5)本地方法区:调用C或C++实现的本地方法代码返回的结果

  1. 类加载器ClassLoader

    会在下一篇文章中详细说明ClassLoader加载机制。每一个被JVM装载的类型都有一个与之对应的java.lang.Class类的实例来表示该类型。该实例可以唯一表示被jvm装载的class类,这个实例和其他类的实例一样放在堆内存中。

  2. 执行引擎

    执行引擎相当于线程,是JVM的核心,执行引擎的作用就是解析JVM字节码指令,得到执行的结果。执行引擎由各个厂家实现。SUN的hotspot是一种基于栈的执行引擎。而Android的Dalvik是基于寄存器的执行引擎。执行引擎也就是执行一条条代码的一个流程,代码都包含在方法体中,执行引擎本质上就是执行一个个方法串起来的流程,对应于操作系统的一个线程,每个java线程就是一个执行引擎的实例。

  3. java内存管理

    执行引擎在执行的过程中需要存储一些东西,如操作数,操作码执行结果,class类的字节码以及类的对象等信息都需要在执行引擎执行前准备就绪。JVM有一个方法区,java堆区,java栈,PC寄存器和本地方法区。其中方法区和java堆是线程共享的。如果当前线程对应的java栈中没有栈帧,这个java栈也要被JVM撤销,整个JVM退出。

JVM选择基于栈的架构的原因

  JVM执行字节码指令是基于栈的架构的,所有的操作数必须先入栈,然后根据指令的操作码选择从栈顶弹出若干个元素进行计算后再将结果入栈。JVM操作数可以存放在每一个栈帧中的一个本地变量中,即每个方法调用时就会给这个方法分配一个本地变量集,这个本地变量集在编译时就已经确定,所以操作数入栈可以直接是常量或者从本地变量集中娶一个变量压入栈中。
  JVM基于栈的设计理由是
  (1)JVM要设计成与平台无关的,而平台无关性就要保证在没有或者由很少的寄存器的机器上也能同样正确执行java代码,因为寄存器很难做到通用。
  (2)基于栈的理由是为JVM更好地优化代码而设计的
  (3)为了指令的紧凑性,因为java代码可能在网络上传输,所以class文件的大小也是设计JVM字节码指令的一个重要因素。

声明:本文很多是对《深入分析javaweb技术内幕》和《深入理解java虚拟机》的总结

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-05 04:25:33

JVM解读:JVM体系结构的相关文章

JVM解读:Java内存区域

JVM全称是java Virtual Machine(java虚拟机),JVM屏蔽了与各个计算机平台相关的软件和硬件差异. 在接下来的日子里,通过写博客的形式学习JVM,让自己更懂得Java! 本系列文章是对<深入分析javaweb技术内幕>和<深入理解java虚拟机>的总结,欢迎大家一起吐槽,一起进步. <JVM解读>第一篇:JVM体系结构 <JVM解读>第二篇:JVM类加载器ClassLoader 人人都知道的java的一大优点就是不需要程序员去显示的分

JVM之JVM的体系结构

摘自:https://www.cnblogs.com/jalja365/p/12184872.html JVM之JVM的体系结构 一.JDK的组成 JDK:JDK是Java开发工具包,是Sun Microsystems针对Java开发员的产品.JDK中包含JRE(在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre)和一堆Java工具(javac/java/jdb等

JVM解毒——JVM与Java体系结构

你是否也遇到过这些问题? 运行线上系统突然卡死,系统无法访问,甚至直接OOM 想解决线上JVM GC问题,但却无从下手 新项目上线,对各种JVM参数设置一脸懵逼,直接默认,然后就JJ了 每次面试都要重新背一遍JVM的一些原理概念性东西 这段广告语写的好,趁着在家办公学习下JVM,先列出整体知识点 点赞+收藏 就学会系列,文章收录在 GitHub JavaEgg ,N线互联网开发必备技能兵器谱 Java开发都知道JVM是Java虚拟机,上学时还用过的VM也叫虚拟机,先比较一波 虚拟机与Java虚拟

深入理解JVM之JVM内存区域与内存分配

深入理解JVM之JVM内存区域与内存分配 在学习jvm的内存分配的时候,看到的这篇博客,该博客对jvm的内存分配总结的很好,同时也利用jvm的内存模型解释了java程序中有关参数传递的问题. 博客出处: http://www.cnblogs.com/hellocsl/p/3969768.html?utm_source=tuicool&utm_medium=referral 看了此博客后,发现应该去深入学习下jvm的内存模型,就是去认真学习下<深入理解Java虚拟机>,其内容可能会<

Jvm(32),理解升级----(挺不错的)图解深入理解JVM之JVM内存区域与内存分配

解释了java中对象的在内存中的模型,学习了对象的内存模型后,对理解多态.参数传递等的理解都有帮助. 前言:这是一篇关于JVM内存区域的文章,由网上一些有关这方面的文章和<深入理解 Java虚拟机>整理而来,所以会有些类同的地方,也不能保证我自己写的比其他网上的和书本上的要好,也不可能会这样.写博客的目的是为了个人对这方面自己理解的分享与个人的积累,所以有写错的地方多多指教. 看到深入两字,相信很多的JAVA初学者都会直接忽略这样的文章,其实关于JVM内存区域的知识对于初学者来说其实是很重要的

Java内存管理-初始JVM和JVM启动流程(二)

勿在流沙住高台,出来混迟早要还的. 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 上一篇分享了什么是程序,以及Java程序运行的三个阶段.也顺便提到了Java中比较重要的一个东西就是JVM(JAVA 虚拟机),那么今天在先了解一下JVM和JVM的启动流程. 知识地图: 1.什么是虚拟机 虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的.运行在一个完全隔离环境中的完整计算机系统.[百度百科] 虚拟机通过仿真引擎(称为管理程序)处理虚拟硬

【JVM】JVM系列之Class文件(三)

有大牛带学java,那就上路吧! 上手推荐学此篇,啃下来.记录备复习. 一.前言 随着我们学习的不断深入,我相信读者对class文件很感兴趣,class文件是用户编写程序与虚拟机之前的桥梁,程序通过编译形成class文件,class文件之后会载入虚拟机,被虚拟机执行,下面我么来一起揭开class文件的神秘面纱. 二.什么是class文件 class文件是二进制文件,通常是以.class文件结尾的文件,它是以8位字节为基础单位的二进制流,各个数据项紧密排列在class文件中,数据项的基本类型为u1

jvm的内部体系结构浅析--转

jvm全称是Java Virtual Machine(java虚拟机).它之所以被称之为是"虚拟"的,就是因为它仅仅是由一个规范来定义的抽象计算机.我们平时经常使用的Sun HotSpot虚拟机只是其中一个具体的实现(另外还有BEA JRockit.IBM J9等等虚拟机).在实际的计算机上通过软件来实现一个虚拟计算机.与VMWare等类似软件不同,你是看不到jvm的,它存在于内存. 当启动一个Java程序时,一个虚拟机实例也就诞生了.当该程序关闭退出,这个虚拟机实例也就随之消亡.如果

jvm简介和体系结构

1,简介 JVM是Java Virtual Machine(Java虚拟机)的缩写,是一个虚构出来的计算机. Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行.Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行. “一次编译,到处运行” JVM在JRE中:JDK(Java Development Kit)为开发工具包,有编译和调试java程序的工具. 2.体系结