JVM理论(一)基础概念

JVM概述

 

JVM就是二进制字节码的运行环境,负责装载字节码到其内存,解释/编译为对应平台上的机器指令执行,每条java指令在java虚拟机规范中都有详细定义,包括如何取、处理操作数等;
JVM特点如下

  • 一次编译,到处运行(各CPU的架构不同的情况下JVM为了实现跨平台,字节码指令不能采用寄存器方式执行,目前都是按照栈的方式存取的;栈的特点就是指令多,指令集小,可跨平台
  • 自动内存管理
  • 自动垃圾回收功能

JVM分类

目前实现JVM规范的主流的虚拟机包括Hotspot,JRocket,J9;

Hotspot

hotspot属于Oracle产品,目前占有绝对的市场地位

  • 过去主流的jdk6以及目前主流的jdk8,以及sun/open jdk中的JVM默认都是hotspot;
  • 方法区的概念只有在hotspot中存在,在J9以及JRocket不存在;
  • 通过执行引擎中的解释器和JIT编译器(也称为后端编译器,java源代码编译为字节码文件中的编译器称为前端编译器,它们统一称为编译器)协同工作,在最优化的响应时间(主要体现在解释器)和最佳执行性能(主要通过JIT)取得平衡

JRocket

在商用领域,JRocket也是比较流行的虚拟机,它和Hotspot都属于Oracle产品,而且它尤其专注于服务器端应用领域

  • JRocket号称是世界上最快的JVM;
  • 追求的是程序最佳的执行性能,所以JRocket执行引擎中只存在JIT编译器,而没有解释器
  • JDK8中,Oracle将JRocket当中有限的特性(毕竟两者架构完全不同)整合到Hotspot中 

J9

属于IBM产品,在商用领域比较有影响力的JVM之一

  • 在IBM相关产品中使用广泛且稳定,但在其他产品一言难尽
  • 2017年,IBM发布了Open J9 产品并交由Eclipse基金会管理 

扩展

sun jdk最初是sun公司非开源产品,而openjdk属于Oracle开源的产品;虽然Sun JDK和OpenJDK是Java开发工具包(JDK)的两种不同实现,但是从功能和性能上来说,Sun JDK和OpenJDK现在基本认为是相同的;而hotspot虚拟机是openjdk默认的虚拟机

JVM生命周期

虚拟机的启动

Java虚拟机的启动是通过引导类加载器bootstrap classloader 创建一个初始类来完成的,这个类是由虚拟机的具体实现(如Hotspot,J9等)指定的

虚拟机的执行

一个运行的java虚拟机有一个虚拟机进程专门执行java程序,程序开始执行它才运行,程序结束时它就停止

虚拟机的退出

程序正常执行结束,比如我正常关闭了应用服务器
程序在执行过程中遇到异常或者错误而终止
操作系统出现错误而导致JVM虚拟机终止
程序调用了runtime或者system的exit方法,强制退出JVM
 

JVM的位置

JVM可屏蔽各操作系统间差异性

JVM体系结构(核心!!!)

JVM内存结构

JVM主要由三大部分组成,分别是类加载子系统,运行时数据区,执行引擎


类加载子系统

类加载器通过执行加载、链接(验证->准备->解析)、初始化后将字节码文件(java源代码使用编译器(javac)编译为字节码文件)加载到内存(即运行时数据区的方法区中);

运行时数据区(即JVM内存!!!)

包括堆,方法区,虚拟机栈,本地方法栈,程序计数器,JVM会将不同类型的对象分配到堆,栈,方法区中,其中:

  •         堆用于存储对象实例。在运行时,当需要创建对象时,JVM将在堆中分配内存给新对象
  •         栈用于存储局部变量和方法调用。每个线程在运行时都会有一个对应的栈帧,用于存储            方法参数、局部变量以及方法返回值等信息
  •         方法区用于存储已加载类的结构信息,包括类的字段、方法代码以及常量池等
  •         程序计数器则记录当前线程执行的字节码指令的地址

扩展

  • 方法区和堆是被所有线程共享的区域,虚拟机栈和程序计数器以及本地方法栈都是线程私有的
  • 每个线程都有独立的虚拟机栈,本地方法栈,程序计数器;
  • 只有方法区和堆才会产生GC以及OOM异常,虚拟机栈和本地方法栈仅会出现OOM,程序计数器不会出现GC以及OOM;

执行引擎

作用是将加载到内存中方法区的字节码指令解释为机器指令,然后申请CPU资源解释执行;主要由解释器,JIT即时编译器,GC组成,其中:

  •     解释器(Interpreter): 按照字节码指令逐条解释执行,可以快速启动,但执行速度相对较慢。
  •     即时编译器(Just-in-Time Compiler,JIT): 将热点代码(被频繁执行的代码)编译为本地机器       码,以提高执行速度。JIT会对统计信息进行分析,并对经常执行的代码进行动态优化。
  •     垃圾回收(Garbage Collection): JVM通过垃圾回收机制自动管理内存,并释放不再使用的对象内存空间,垃圾回收过程主要包括以下步骤:
    •     a. 标记(Marking): 标记存活的对象
    •     b. 清除(Sweeping): 清除或回收未标记的对象
    •     c. 压缩(Compacting): 对存活对象进行整理,消除内存碎片
    •     d. 分代(Generational): 根据对象的生命周期将内存分为不同的代(Generation),一般将堆分为新生代和老年代,根据对象存活时间的不同采用不同的回收算法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/14514.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WSL2 及 docker开发环境搭建

WSL2 及 docker开发环境搭建 1.使能WSL 控制面板->程序->程序和功能->启动或关闭Windows功能->勾选红框中选项->确认后重启电脑  2.下载Linux Kernel Update安装包 下载地址如下, 附件已将下载的安装包作为附件形式上传,…

6月《中国数据库行业分析报告》已发布,首发空间、搜索引擎数据库【全球产业图谱】

为了帮助大家及时了解中国数据库行业发展现状、梳理当前数据库市场环境和产品生态等情况,从2022年4月起,墨天轮社区行业分析研究团队出品将持续每月为大家推出最新《中国数据库行业分析报告》,持续传播数据技术知识、努力促进技术创新与行业生…

高效协作助力企业发展:企业网盘在提升工作效率方面的重要作用!

企业网盘是一种专门为了企业协作工作而设计的在线文档管理平台,受到了众多企业用户的青睐与喜爱。企业网盘如何大幅提高企业协作工作效率? 1、提高文件访问效率 传统的文件共享方式往往使用邮件附件或U盘进行传递,可能会遇到文档版本不一致、…

C语言 - AES软件加解密算法

概述 (AES)RIJNDAEL算法是一个数据块长度盒密钥长度都可变的分组加密算法,其数据块长度和密钥长度都可独立地选定为大于等于128位且小于等于256位的32位任意倍数。深入学习请参考《密码学》书籍,谢谢各位参阅。 验证环境&#xf…

阿里云ACE认证和华为云HCIE认证对比分析

最近有不少小伙伴私信问我,阿里云、腾讯云、华为云这几大厂商的云认证,哪一个更好,今天有空来跟大家认真地分析一下。 01-从云计算市场占有率来看 作为国内云计算市场的探路人,阿里虽然一路走来有过很多坎坷,但也不负…

Netty的事件驱动模型nio,epoll,oio各个使用场景和支持的网络通讯协议

1.首先说一下nio和epoll有什么区别 在Netty中,Epoll和NIO是两种不同的事件驱动模型,用于实现网络通信。它们在底层的实现和性能特征上有一些区别。 1. NIO(Non-blocking I/O):NIO是Java原生的非阻塞I/O模型&#xff…

【hadoop】Google的基本思想

Google的基本思想 三架马车GFS分布式文件系统的核心架构和原理机架感知 MapReduce计算模型PageRank问题MapReduce BigTable 三架马车 Google的基本思想主要有三个,称之为三架马车,分别是GFS(Google File System)、MapReduce计算模…

MySql进阶(2)

MySql进阶 一、视图1.1 视图的增删改查1. 2 视图的检查选项1.3 视图的更新与作用 二、存储过程2.1 存储介绍2.2 语法2.3 变量2.3.1 系统变量2.3.2、用户自定义变量2.3.2、局部变量 2.4、if判断2.5、参数2.6、case2.7、循环2.7.1、while2.7.2、repeat2.7.3、loop 2.8、游标-curs…

Delphi 11必备指南:使用Git集成Python4Delphi的完整步骤

在Delphi中使用Python有很多好处,可以扩展Delphi的功能并利用Python强大的科学计算和数据分析库。但是,为了将Python集成到Delphi中,我们需要安装Python for Delphi (P4D)组件套件。在这篇博客中,我将介绍如何使用Git安装P4D组件套…

【HarmonyOS】【FAQ】HarmonyOS应用开发相关问题解答(三)

贴接上回。。。 【往期FAQ参考】 【HarmonyOS】【FAQ】HarmonyOS应用开发相关问题解答(一) 【HarmonyOS】【FAQ】HarmonyOS应用开发相关问题解答(二) 【本期FAQ】 1、第一次调用geolocation.getCurrentLocation()接口&#xff…

UDS统一诊断服务【七】DTC控制0X85服务

文章目录 前言一、DTC控制服务介绍二、数据格式2.1 请求报文2.2 子功能2.3响应格式 三、举例总结 前言 大家好,我是嵌入式老林,从事嵌入式软件开发多年,今天分享的内容是UDS诊断故障码控制0X85服务介绍,希望能对你有所帮助 一、D…

skywalking linux安装部署

SkyWalking APM tar 下载 结合自己的es版本下载对应的tar 地址:https://archive.apache.org/dist/skywalking/ 由于我使用的是es7所以下载对应版本 拷贝对应链接使用wget下载 wget https://archive.apache.org/dist/skywalking/8.7.0/apache-skywalking-apm-es7…