最近,在学习java虚拟机的内容中,在此总结和记录下学到的。

一、JVM在计算机中的位置

在我们初学java时,便知道java源文件文件会先通过Java编译器编译成字节码文件,这个过程是java编译过程。而我们的java虚拟机执行的就是字节码文件。这个字节码文件可以来自许多地方,例如kotlin,scala等。但只要它能符合java虚拟机的规范,他就可以执行该字节码文件。下面,我们先来看下jvm在我们计算机中的位置。

首先,在我们计算机硬件上的第一层软件就是操作系统了,而jvm是基于操作系统之上的,他并没有与硬件有直接的交互。

其次,用户可通过Java编译器编译生成字节码文件,让字节码文件在jvm上执行。

二、jvm体系结构概览

jvm的体系结构如下图

类加载子系统

类加载子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识;

运行时数据区

Java虚拟机在运行程序的过程中会把它所管理的内存划分为若干个不同的数据区,即分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。
若可以按照是否线程共享则分为两块,线程共享的是方法区(Method Area)和堆(Heap),线程独享的是虚拟机栈(VM Stack)(java栈),本地方法栈(Native Method Stack)和PC寄存器(Program Counter Register)。

执行引擎
执行引擎是jvm最核心的部分,jvm是java虚拟机,有自己实现的指令集和执行引擎结构体系,能够支持那些不被硬件直接支持的指令集。负责执行class文件中包含的字节码指令,相当于实际机器上的CPU。

本地方法接口

提供一个标准的方式让java程序通过虚拟机与原生代码进行交互,这也就是我们平常常说的java本地接口。用于调用C或C++实现的本地方法的代码返回结果。

三、jvm采用的指令集架构

栈的指令集架构和寄存器的指令集架构

由于java跨平台的设计,java的指令都是根据栈来设计的,不同平台CPU架构不同,所以不能设计为基于寄存器的。

两个指令集架构的区别:

栈:跨平台性、指令集小、指令多;执行性比寄存器差

寄存器:指令少

四、JVM的生命周期

1.启动

通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由虚拟机的具体实现指定的.

2.执行

一个运行中的java虚拟机有着一个清晰的任务:执行Java程序;

程序开始执行的时候他才运行,程序结束时他就停止;

执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程。

3.退出

程序正常执行结束

程序异常或错误而异常终止

操作系统错误导致终止

某线程调用Runtime类或System类的exit方法,或Runtime类的halt方法,并且java安全管理器也允许这次exit或halt操作

除此之外,JNI规范描述了用JNI Invocation API来加载或卸载Java虚拟机时,Java虚拟机的退出情况

jvm入门及理解(一)——简介与体系架构的更多相关文章

  1. jvm入门及理解(五)——运行时数据区(虚拟机栈)和本地方法接口

    一.虚拟机栈背景 由于跨平台性的设计,java的指令都是根据栈来设计的.不同平台CPU架构不同,所以不能设计为基于寄存器的. 优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要 ...

  2. jvm入门及理解(二)——类加载器子系统

    一.类加载子系统的作用 类加载子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识: ClassLoader只负责class文件的加载,至于它是否可以运行,则由E ...

  3. jvm入门及理解(三)——运行时数据区(程序计数器+本地方法栈)

    一.内存与线程 内存: 内存是非常重要的系统资源,是硬盘和cpu的中间仓库及桥梁,承载着操作系统和应用程序的实时运行.JVM内存布局规定了JAVA在运行过程中内存申请.分配.管理的策略,保证了JVM的 ...

  4. jvm入门及理解(四)——运行时数据区(堆+方法区)

    一.堆 定义: Heap,通过new关键字创建的对象,都存放在堆内存中. 特点 线程共享,堆中的对象都存在线程安全的问题 垃圾回收,垃圾回收机制重点区域. jvm内存的划分: JVM内存划分为堆内存和 ...

  5. jvm入门及理解(六)——垃圾回收与算法

    一.jvm垃圾回收要做的事情 哪些内存需要回收 什么时候回收 怎么回收 二.如何判断对象已经死亡,或者说确定为垃圾 引用计数法: 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器的值就加1: ...

  6. JVM入门——运行时数据区

    这张图我相信基本上对JVM有点接触的都应该很熟悉,可以说这是JVM入门的第一课.其中的“堆”和“虚拟机栈(栈)”更是耳熟能详.下面将围绕这张图对JVM的运行时数据区做一个简单介绍. 程序计数器(Pro ...

  7. Oracle学习笔记—oracle体系架构及状态(nomount、mount和open)简介

    oracle体系架构简介 先来简要了解一下Oracle数据库体系架构以便于后面深入理解,Oracle Server主要由实例(instance)和数据库(database)组成.实例(instance ...

  8. Hadoop体系架构简介

    今天跟一个朋友在讨论hadoop体系架构,从当下流行的Hadoop+HDFS+MapReduce+Hbase+Pig+Hive+Spark+Storm开始一直讲到HDFS的底层实现,MapReduce ...

  9. TensorFlow从入门到理解

    一.<莫烦Python>学习笔记: TensorFlow从入门到理解(一):搭建开发环境[基于Ubuntu18.04] TensorFlow从入门到理解(二):你的第一个神经网络 Tens ...

随机推荐

  1. CentOS系统python默认版本由python2改为python3

    一.了解 CentOS中如果安装有yum,一般会有python2的某个版本.命令行键入python,出现的python2的环境: [root@instance-hrnebyqu src]# pytho ...

  2. layui的弹出层的title的自定义html

       layui的弹出层的title的自定义html //在这里面输入任何合法的js语句 layer.open({ type: 1 //Page层类型 ,area: ['500px', '300px' ...

  3. 【Weiss】【第03章】练习3.25:数组模拟队列

    [练习3.25] 编写实现队列的例程,使用 a.链表 b.数组 Answer: 在这章一开头就已经写了个链表的队列例程了,所以实际上只要做b小题就可以. 数组模拟队列和链表的两点小不同是: ①.数组空 ...

  4. Spring框架——IOC 容器的创建与使用

    企业级开发框架 Spring Framework 是整个 Spring 生态的基础,各个模块都是基于 Spring Framework 衍生出来的. Spring 的两大核心机制 IOC 控制翻转.A ...

  5. Journal of Proteome Research | Utilization of the Proteome Data Deposited in SRMAtlas for Validating the Existence of the Human Missing Proteins in GPM (解读人:梁嘉琪)

    文献名:Utilization of the Proteome Data Deposited in SRMAtlas for Validating the Existence of the Human ...

  6. Who Gets the Most Candies? POJ - 2886(线段树单点更新+区间查询+反素数)

    预备知识:反素数解析 思路:有了反素数的解法之后就是线段树的事了. 我们可以用线段树来维护哪些人被淘汰,哪些人没被淘汰,被淘汰的人的位置,没被淘汰的人的位置. 我们可以把所有人表示为一个[1,n]的区 ...

  7. CSS导入方式和六种选择器

    1.css的导入方式 1.1 行内嵌式 1.2 内部方式 1.2.1含义: css代码写在<head>的<style>标签中 1.2.2 优点 方便在同页面中修改样式 1.2. ...

  8. 认识Oracle数据库系统--详细解说

    1.3 认识Oracle数据库系统 Oracle数据库是美国Oracle公司的一款关系型数据库管理系统,简称为Oracle RDBMS,是目前数据库市场上最为强大和流行的数据库系统之一.Oracle是 ...

  9. 带修主席树 洛谷2617 支持单点更新以及区间kth大查询

    题目链接:https://www.luogu.com.cn/problem/P2617 参考博客:https://blog.csdn.net/dreaming__ldx/article/details ...

  10. python学习(五)之列表元素的积

    前几天,学完python的列表之后,我们老师留了一道关于列表的题目.几天后,老师讲解习题,很荣幸成为被老师点名讲解自己代码的其中之一下面把我的想法分享一下. 描述一个由n(n>1)个数字组成的列 ...