java大牛养成记(13)——JVM
来源:互联网 发布:lamb动作数据下载 编辑:程序博客网 时间:2024/04/29 16:15
背景:最近一直都在学习考研的内容,对计算机的学习热忱少了很多,但是今天听了师哥的分享——JVM,这个东东也是java内容中的重点,于是乎就大概的学习了一下。
一、WHAT?
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
二、规格
JVM 指令系统
JVM 寄存器
JVM 栈结构
JVM 碎片回收堆
JVM 存储区
三、原理
JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器。它是一种基于下层的操作系统和硬件平台并利用软件方法来实现的抽象的计算机,可以在上面执行java的字节码程序。
java编译器只需面向JVM,生成JVM能理解的代码或字节码文件。Java源文件经编译器,编译成字节码程序,通过JVM将每一条指令翻译成不同平台机器码,通过特定平台运行。
JVM执行程序的过程 :
I.加载.class文件
II.管理并分配内存
III.执行垃圾收集
JRE(java运行时环境)包含JVM的java程序的运行环境 [1]
JVM是Java程序运行的容器,但是他同时也是操作系统的一个进程,因此他也有他自己的运行的生命周期,也有自己的代码和数据空间。
JVM在整个jdk中处于最底层,负责与操作系统的交互,用来屏蔽操作系统环境,提供一个完整的Java运行环境,因此也就虚拟计算机.操作系统装入JVM是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境。
1.创建JVM装载环境和配置
2.装载JVM.dll
3.初始化JVM.dll并挂接到JNIENV(JNI调用接口)实例
4.调用JNIEnv实例装载并处理class类。
四、体系结构
JVM可以由不同的厂商来实现。由于厂商的不同必然导致JVM在实现上的一些不同,然而JVM还是可以实现跨平台的特性,这就要归功于设计JVM时的体系结构了。我们知道,一个JVM实例的行为不光是它自己的事,还涉及到它的子系统、存储区域、数据类型和指令这些部分,它们描述了JVM的一个抽象的内部体系结构,其目的不光规定实现JVM时它内部的体系结构,更重要的是提供了一种方式,用于严格定义实现时的外部行为。每个JVM都有两种机制,一个是装载具有合适名称的类(类或是接口),叫做类装载子系统;另外的一个负责执行包含在已装载的类或接口中的指令,叫做运行引擎。每个JVM又包括方法区、堆、Java栈、程序计数器和本地方法栈这五个部分,这几个部分和类装载机制与运行引擎机制一起组成的体系结构图为:
JVM的每个实例都有一个它自己的方法域和一个堆,运行于JVM内的所有的线程都共享这些区域;当虚拟机装载类文件的时候,它解析其中的二进制数据所包含的类信息,并把它们放到方法域中;当程序运行的时候,JVM把程序初始化的所有对象置于堆上;而每个线程创建的时候,都会拥有自己的程序计数器和Java栈,其中程序计数器中的值指向下一条即将被执行的指令,线程的Java栈则存储为该线程调用Java方法的状态;本地方法调用的状态被存储在本地方法栈,该方法栈依赖于具体的实现。五、JRE和JVM的区别
JRE(JavaRuntimeEnvironment,Java运行环境),也就是Java平台。所有的Java程序都要在JRE下才能运行。JDK的工具也是Java程序,也需要JRE才能运行。为了保持JDK的独立性和完整性,在JDK的安装过程中,JRE也是安装的一部分。所以,在JDK的安装目录下有一个名为jre的目录,用于存放JRE文件。
JVM(JavaVirtualMachine,Java虚拟机)是JRE的一部分。它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java语言最重要的特点就是跨平台运行。使用JVM就是为了支持与操作系统无关,实现跨平台。
- java大牛养成记(13)——JVM
- Java大牛养成记(2)——JDBC
- Java大牛养成记——工作流
- Java大牛养成记——先占着
- Java大牛养成记——图片上传
- Java大牛养成记(1)——J2EE13规范
- Java大牛养成记(3)——SSH框架
- Java大牛养成记(4)——绝对路径与EL表达式
- Java大牛养成记(7)——后台权限拦截器
- Java大牛养成记(8)——何为servlet?
- Java大牛养成记(10)----Maven
- Java大牛养成记(11)----Oracle安装教程
- Java大牛养成记(6)——将订单提交到数据库出错(Could not insert)
- Java大牛养成记——两分钟学会分页
- Java 大牛养成计划
- Java大牛养成记(9)----搭建java项目开发环境
- Java大牛养成记——一条SQL语句更新同一张表中的两条数据
- Java大牛养成记(5)——The content of element type "struts" must match "(package|include|bean|constant)*".
- HDU 1533 Going Home
- iOS_UIWebView、WKWebView使用详解
- 开发道路之网站篇
- Eclipse安装git插件以及关联导入GitHub项目
- PHP异步请求
- java大牛养成记(13)——JVM
- matlab_classify()函数
- 开发者眼中最好的 22 款 GUI 测试工具
- C++对C的加强
- [BZOJ]3875: [Ahoi2014]骑士游戏
- 轮播图--无缝滚动
- 使用UI for Docker工具来可视化管理Docker容器
- 拉取淘宝订单服务数据mysql分表存储亿条数据
- hdu 2600 简单贪心