1.JVM的初步介绍(宋红康笔记)

本文详细介绍了JVM的初步知识,包括JDK、JRE、JVM的关系,JVM的结构与性能特点,如HotSpot VM的解释器与即时编译器并存的架构。还阐述了Java代码从源码到执行的完整流程,以及JVM基于栈和寄存器的两种指令集架构的对比。最后,探讨了JVM的生命周期,包括启动、执行和退出的情况。
摘要由CSDN通过智能技术生成

目录

1. JVM的初步介绍

1.1 JDK,JRE,JVM的关系

1.2 JVM的整体结构

1.3 Java代码执行流程

1.4 JVM的架构模型

1.5 JVM的生命周期

1. JVM的初步介绍

1.1 JDK,JRE,JVM的关系

JVM虚拟机是运行在操作系统之上的,它与硬件没有直接的交互,同时JDK>JRE>JVM JDK中包含有java Language前端编译器(例如:javac),可以将.java的文件编译成.class的字节码文件 JRE包含了JVM和一系列的Java SE的API,而JVM可以解释运行.class的字节码文件

1.2 JVM的整体结构

·HotSpot VM是目前市面上高性能虚拟机的代表着之一
·它采用解释器与即时编译器并存的架构
·在今天,Java程序的运行性能早已脱胎换骨,已经达到了可以和C/C++程序一较高下的地步

1.3 Java代码执行流程

java源码(xxx.java)通过java编译器(词法分析->语法分析->语义分析->字节码生成器)生成字节码文件(xxx.class) 然后将字节码文件传到Java虚拟机中(类加载器->字节码校验器->解释执行(翻译)和JIT编译器编译执行) 最后将编译执行的结果传到操作系统之中

 

1.4 JVM的架构模型

Java编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构 ·基于栈式架构的特点(HotSpot)
>设计和实现更简单,适用于资源受限的系统
>避开了寄存器的分配难题:使用零地址指令方式分配
>指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈。指令集更小,编译器更容易实现
>不需要硬件支持,可移植性更好,更好实现跨平台
·基于寄存器架构的特点
>典型的应用是x86的二进制指令集:比如传统的pc以及Android的Davlik虚拟机
>指令集架构则完全依赖硬件,可移植性差
>性能优秀和执行更高效 >花费更少的指令去完成一项操作
>在大部分情况下,基于寄存器的指令集往往都以一地址指令,二地址指令和三地址指令为主

·举例 (编写java代码 )

public class StackStruTest{
    public static void main(String[] args){
        int i = 2;
        int j = 3;
        int k = i+j;
    }
}

对上述代码进行编译后得到StackStruTest.class字节码文件,在终端反编译字节码文件,命令如下

cd + 字节码文件路径
javap -v StackStruTest

得到字节码指令(对应栈的架构)

Code:
	stack=2,locals=4,args_size=1
		0: iconst_2		//生成常量2
		1: istore_1		//将常量2保存在内存istore_1中
		2: iconst_3		//生成常量3
		3: istore_2		//将常量3保存在内存istore_2中
		4: iload_1		//加载内存istore_1
		5: iload_2		//加载内存istore_2
		6: iadd			//对内存1和内存2中的数据求和
		7: istore_3		//将求和结果存放在内存istore_3中
		8: return		//返回结果

寄存器的计算流程(对应寄存器的架构)

mov eax,2		//将eax寄存器的值设为2
add eax,3		//使eax寄存器的值加3

1.5 JVM的生命周期

·虚拟机的启动
Java虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由虚拟 机的具体实现指定的
·虚拟机的执行:
>一个运行的Java虚拟机有着一个清晰的任务:执行Java程序
>程序开始执行时他才运行,程序结束时他就停止
>执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程
虚拟机的退出:
>程序正常执行结束
>程序执行过程中遇到了异常或错误而异常终止
>由于操作系统出现错误而导致Java虚拟机进程终止
>某线程调用Runtime类或System类的exit方法,或Runtime类的halt方法,并且Java安全管理器也允许这次exit和halt
>除此之外,JNI(Java Native Interface)规范描述了用JNI Invocation API来加载或卸载Java虚拟机时,Java虚拟机退出

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
宋红康是一位研究JVMJava虚拟机)的讲师,他深入探究了一线大厂的JVM实现以及其相关技术和工具。他的课程主题是“v1.1.mmap”,意味着他将讲解一些与内存映射文件相关的内容。 在讲师宋红康的课程中,学员将能够了解JVM如何利用内存映射文件(mmap)来管理内存资源。内存映射文件是一种将文件直接映射到进程内存中的技术。通过这种方式,JVM能够更有效地读取和操作大型文件,而无需显式地进行IO操作。 学员将学习如何使用mmap技术提高JVM的性能和效率。他们将了解到内存映射文件如何被JVM用于操作本地磁盘上的文件数据,并将其映射为虚拟内存。这将提供更快的IO速度和更有效的内存管理。 此外,宋红康还将介绍如何在JVM中利用mmap创建共享内存区域。共享内存允许不同进程之间共享数据,这对于某些高性能应用程序非常重要。学员将学习如何使用mmap创建和访问共享内存,并了解如何处理并发访问和数据同步的问题。 宋红康的讲座还将涵盖其他一些与JVM和内存映射文件相关的话题,如内存管理、垃圾回收和性能调优等。通过深入拆解一线大厂的JVM实现,学员将受益匪浅,并可以将所学知识应用于实际项目中,提升应用的性能和可靠性。 总结而言,宋红康的课程将帮助学员深入了解JVM的内部实现和基于内存映射文件的高性能技术。通过学习和实践,学员将能够更好地优化和调试JVM,并在实际应用中获得更好的表现。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值