JVM理论(一)-基础概念

news2024/11/25 5:15:44

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.coloradmin.cn/o/725805.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

fastadmin使用PHPexcel上传文件处理兼容问题 (已解决)

介绍 fastadmin:支持使用7.0以上版本的PHP PHPexcel:不支持使用7.0以上的PHP版本 2.下载地址 https://codeload.github.com/PHPOffice/PHPExcel/zip/1.8 3:解决兼容 将文件导入到vendor下面,创建一个函数来使用这个文件&…

5.8.10 TCP协议

5.8.10 TCP协议 我们通过一个实例来看一下TCP协议 如图 图中是六个IP数据报的前40个字节的内容,使用的是16进制数表示的,该数据报的背景如下图 主机H通过快速以太网连接Internet,主机H的IP地址是192.168.1.100,服务器S的IP地址是…

高迸发 架构设计方案

前言 ​​在实际生活业务场景开发中,在我们的网站知名度越来越大的时候,随之而来的就是业务体量越来越大,用户群体越来越大,随之而来的技术要求也越来越高,其中核心点对网站的稳定性要求是硬性的。如果一个系统都无法…

新装idea的一些常用设置

新装idea的一些常用设置 新安装的idea常用配置 1、提示内容忽略大小写 File -> Settings -> Editor -> General -> Code Completion -> Match case 2、修改字体大小 File -> Settings -> Editor -> Font -> Size 3、取消启动时自动打开最后开…

阿里云国际站:阿里云计算服务指的是什么?

标题:阿里云计算服务指的是什么? 一、阿里云计算服务的定义   阿里云计算服务,是阿里巴巴集团旗下的云服务平台,提供了从云服务器、云数据库到大数据处理等丰富的云计算服务。它通过构建一种共享的计算资源池,使得用…

《SpringBoot》第05章 配置文件解析

前言 SpringBoot中的application.properties(或application.yaml)文件都是再熟悉不过的了。它是应用的配置文件,我们可以把需要的一些配置信息都写在这个文件里面,需要的时候,我们可以通过Value注解来直接获取即可,那这个文件是什…

deepstream指北——python接口的使用

目录 一、机器配置二、环境配置三、运行实例 一、机器配置 电脑:台式机系统:Ubuntu 20.04.5显卡:GTX 1070,8G显存软件版本:deepstream:6.1.1显卡驱动版本:515.76CUDA版本:11.7.1cud…

基于PyQt5的桌面图像调试仿真平台开发(10)色彩矩阵

系列文章目录 基于PyQt5的桌面图像调试仿真平台开发(1)环境搭建 基于PyQt5的桌面图像调试仿真平台开发(2)UI设计和控件绑定 基于PyQt5的桌面图像调试仿真平台开发(3)黑电平处理 基于PyQt5的桌面图像调试仿真平台开发(4)白平衡处理 基于PyQt5的桌面图像调试仿真平台开发(5)…

当赛博朋克碰上小鸡舞 segment anything

Segment Anything能给我们做什么 前言内容具体实现成果 前言 最近,大模型的热度确实是非常非常的高,从chatgpt到segment anything,这些东西整的我这刚入门的小白确实有点懵逼。最近实在是不知道干啥, 想想能不能用大模型整点花活…

Spring后置处理器BeanFactoryPostProcessor与BeanPostProcessor源码解析

文章目录 一、简介1、BeanFactoryPostProcessor2、BeanPostProcessor 二、BeanFactoryPostProcessor 源码解析1、BeanDefinitionRegistryPostProcessor 接口实现类的处理流程2、BeanFactoryPostProcessor 接口实现类的处理流程3、总结 三、BeanPostProcessor 源码解析 一、简介…

uniapp 之 多端实现图片压缩(含H5实现)

compressImage 说明 文档平台差异说明已标出:官网提供的api uni.compressImage除了H5平台,其余平台都支持,所以我们利用条件编译,然后单独处理一下H5的图片压缩即可。 utils.js 里面封装一下该方法,方便调用 /*** 图…

-Xloggc:d:/gc.log

-Xloggc:d:/gc.log把信息记录成 log文件参数-Xmx20m -Xms20m -XX:NewRatio4 -XX:SurvivorRatio2 -Xss1m -XX:PrintGCDetails -XX:UseSerialGC -XX:PrintCommandLineFlags -Xloggc:d:/gc.log结果[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y3PpljS…

【PyTorch API】 nn.RNN 和 nn.LSTM 介绍和代码详解

文章目录 1. nn.RNN 构建单向 RNN2. nn.LSTM 构建单向 LSTM3. 推荐参考资料 1. nn.RNN 构建单向 RNN torch.nn.RNN 的 PyTorch 链接:torch.nn.RNN(*args, **kwargs) nn.RNN 的用法和输入输出参数的介绍直接看代码: import torch import torch.nn as n…

商业模式画布

商业模式画布给了创业者一个思考的框架,在行动之前充分思考和演练。 文章目录 认识商业模式画布九个组成部分(以Zoom为例拆解)收入成本 九个组成部分的关系总结 认识商业模式画布 九个组成部分(以Zoom为例拆解) 收入 成…

七月创作之星挑战赛开始咯~

活动火热进行中! 欢迎各位大佬积极参与~ 大家请加入卡奥斯开源社区官方社群哦,最新活动实时更新! 还有专属群内福利(蛋糕券、购物卡、周边礼品)等你来拿~ 礼品详情

高效管理工作任务,推荐优秀任务管理软件助力工作效率提升

任务管理软件是一种用于组织任务、将任务分配给个人并监控其进展的软件。该软件可以帮助确保任务在预算内按时完成。它在协同工作环境中特别有用,在这种环境中,多人在处理需要跟踪和监视的任务。 任务管理软件可以帮助简化分配任务和监控任务进度的过程。…

ModaHub魔搭社区:基于阿里云 ACK 搭建开源向量数据库 Milvus

目录 一、准备资源 二、集群创建: 本集群基于Terway网络构建 二、连接刚刚创建的ACK集群 三、部署Milvus数据库 四、优化Milvus配置 简介: 生成式 AI(Generative AI)引爆了向量数据库(Vector Database&#xff0…

STM8低门槛快速入门,类似Arduino封装库模式开发介绍

STM8低门槛快速入门,类似Arduino封装库模式开发介绍 📌STM8外设封装库原项目开源地址:https://github.com/gicking/STM8_templates📍个人整理过的项目地址:https://github.com/perseverance51/STM8-Templates &#x1…

前端开发常用Nginx设置说明

前端部署常用到Nginx,作为前端开发常用的配置不多,担也需要掌握 常见配置说明,这里只列表server模块的核心代码 server {listen 9015; # 端口号server_name 172.16.101.191; # 浏览器访问域名,不配置默认为本服务器地址index in…

redhat6安装mysql8.0.33

1、下载mysql 官网地址:https://downloads.mysql.com/archives/community/ 下载步骤: 过滤操作系统版本 下载后,上传到服务器Downloads目录 2、安装mysql8 解压压缩包 tar -xvf mysql-8.0.31-1.el9.x86_64.rpm-bundle.tar [rootrhel64 …