首页 > 其他分享 >JVM 简介

JVM 简介

时间:2023-08-03 11:46:21浏览次数:32  
标签:Java 字节 简介 虚拟机 编译器 JVM 执行

一、JVM 简介

1.1 字节码

由编译器编译程序得到的二进制文件(.class文件)。不同的编译器,可以编译出相同的字节码文件,字节码文件也可以在不同的JVM上运行(具有跨平台性,一次编译,到处运行)。

1.2 虚拟机

虚拟机(Virtual Machine)可以分为系统虚拟机和程序虚拟机:

(1)系统虚拟机:完全是对物理计算机的仿真,提供了一个可运行完整操作系统的软件平台,如Visual Box;

(2)程序虚拟机:专门为执行单个计算机程序而设计,其典型代表就是Java虚拟机(JVM),在Java虚拟机中执行的指令我们称为Java字节码指令。

1.3 JVM简介

Java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器指令执行。每一条Java指令,Java虚拟机规范中都有详细定义,如怎么取操作数,怎么处理操作数,处理结果放在哪里。JVM在计算机系统中的位置如下:

      JVM是运行在操作系统之上的,它与硬件没有直接的交互。

1.4 JVM的特性

(1)自动内存管理;

(2)自动垃圾回收机制(相比于C++);

(3)跨语言的平台,多语言混合编程;

1.5 JVM的整体结构

HotSpot是目前最流行的Java虚拟机,它采用解释器与即时编译器并存的架构,整体架如下:

1.6 Java代码的执行流程

(1)编译器将java源码进行编译生成字节码;

(2)而JVM的主要任务就是讲字节码装载到其内部,解释/编译成对应平台上的机器指令,然后执行;

(3)类加载完成后,会对字节码进行校验,校验通过后JVM解释器会将字节码逐行翻译成机器指令交友操作系统执行;

(4)对于热点代码,会使用JIT编译器将其字节码文件编译成机器指令缓存起来,以提高执行性能。

1.7 JVM的架构模型

JVM的架构模型主要分为两种:

(1)基于栈式架构:使用零地址指令方式,设计和实现简单,不需要依赖硬件支持(适用于资源受限的场景),可移植行好(跨平台);但指令集较大,代表的有hotspot;

(2)基于寄存器架构:使用多地址指令,依赖硬件支持,可移植性较差;但指令集较小,性能更高,代表的有Davlik;

1.8 JVM的生命周期

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

(2)虚拟机的执行:执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程;

(3)虚拟机的退出:程序正常执行结束;程序在执行过程中遇到了异常或错误而异常终止;由于操作系统用现错误而导致Java虚拟机进程终止;某线程调用Runtime类或system类的exit方法,或Runtime类的halt方法;

1.9 JVM发展历程

(1)Sun classic VM:世界上第一款商用Java虚拟机,这款虚拟机内部只提供解释器,没有及时编译器,因此效率比较低;

(2)Exact VM:准确式内存管理(虚拟机可以知道内存中某个位置的数据具体是什么类型),热点探测,解释器与编译器混合工作模式;

(3)HotSpot:应用最广,跨平台,除了热点代码探测技术和解释器与编译器协同工作外,还引入了方法区和GC技术;

(4)JRockit:专注于服务器端应用,不太关注程序启动速度,不包含解释器实现,全部代码都靠即时编译器编译后执行,JRockit JVM是世界上最快的JVM;

(5)Dalvik:谷歌开发的,应用于Android系统,基于寄存器架构,不是jvm的栈架构,没有遵循 Java虚拟机规范,不能直接执行Java的Class文件(执行的是编译以后的dex(Dalvik Executable)文件);

(6)Taobao JVM:创新的GCIH(GC invisible heap),即将生命周期较长的Java对象从heap中移到heap之外,并且GC不能管理GCIH内部的Java对象,以此达到降低GC的回收频率和提升GC的回收效率的目的;对象还能够在多个Java虚拟机进程中实现共享。

标签:Java,字节,简介,虚拟机,编译器,JVM,执行
From: https://www.cnblogs.com/iancloud/p/17602872.html

相关文章

  • JVM
    前言什么是JVM?JavaVirtualMachine,Java程序的运行环境(Java二进制字节码的运行环境)。java代码的执行流程JVM的整体结构程序计数器ProgramCounterRegister程序计数器(寄存器)......
  • jvm attach过程与底层实现
    rasp的技术重点之一是java-agent技术,通过agent可以获取到Instrumentation接口的实现,通过这个inst变量对字节码进行修改。javaagent可以在jvm启动时使用-agentjar参数启动,也可以在运行时通过attach相应进程,并且指明需要加载的jar包,就可以进入到jar包中定义好的agentmain方法处,执......
  • dwarf简介
    原文链接:如果我们可以编写确保能正确工作且永远不需要调试的程序,这将非常美妙。在梦想成真之前,通常的编程周期还将是包括:编写一个程序,编译它,执行它,然后可怕的、灾难般的调试。然后重复以上步骤,直到程序如期工作。通过插入打印各种感兴趣变量的值的代码来调试程序是可能的。事实......
  • TOMCAT功能及组件简介
      一、功能     servlet是ORACLE公司为了让WEB应用程序与WEB服务器程序之间进行交互协作而制定的一个接口。协作示意图如下:  这个接口规定:WEB应用中需要被WEB服务器动态调用的程序位于Servlet接口的实现类中;WEB服务器可以访问一个WEB应用中所有实现了Servlet接口......
  • NodeJS系列(7)- Ant Design Pro 简介
    AntDesignPro是基于AntDesign和umi的封装的一整套企业级中后台前端/设计解决方案,致力于在设计规范和基础组件的基础上,继续向上构建,提炼出典型模板/业务组件/配套设计资源,进一步提升企业级中后台产品设计研发过程中的『用户』和『设计者』的体验。AntDesign是一套企业级......
  • PHPGET请求的加密方法简介
    PHPGET请求的加密方法简介在Web开发中,经常会使用GET请求来获取远程服务器上的数据。然而,GET请求的数据通过URL传递,容易被拦截者获取并窃取其中的敏感信息。为了解决这个问题,我们可以采用加密方法来保护数据的安全性。PHPGET请求的加密方法简介下面介绍几种PHPGET请求的加密方法......
  • 抖音获客系统简介,精准获取,系统简介
    功能介绍功能获取获客系统主要核心数据看板名词介绍当前运行任务:系统正在运行的获客任务总数,获取客户档案:符合任务规则提取的目标客户,总分析任务:系统合计运行的获客任务,总视频数:符合任务规则提取的视频总数,剩余点数:系统所有用户剩余的任务点数,消耗点数:系统所有用户消耗的任务点数,总......
  • Vector Packet Processor(VPP)使用简介
    [email protected],2023DescriptionVPP的简介以及安装简介最早的VPP是由Cisco提出来的,不过现在已经开源了。FD.io的VectorPacketProcessor(VPP)是一个快速、可扩展的2-4层多平台网络协议栈,可以运行多种架构的如x86\ARM\Power架构的Li......
  • Flask的请求,响应简介
    Flask的请求,响应简介Flask的请求与响应请求对象defindex():#请求对象,是全局的,需要导入,这个全局的request,在哪个视图函数中,就是当次的request对象,不会乱#request.method提交的方法print(request.method)#request.argsget请求提及的数据prin......
  • API简介,如何运用API接口获取商品数据(淘宝/天猫、1688、拼多多、京东等二十多个海内外
    API:应用程序接口(API:ApplicationProgramInterface)应用程序接口是一组定义、程序及协议的集合,通过API接口实现计算机软件之间的相互通信。API的一个主要功能是提供通用功能集。程序员通过调用API函数对应用程序进行开发,可以减轻编程任务。API同时也是一种中间件,为各种不同平......