当前位置: 首页 > news >正文

JVM虚拟机概述(1)

1.JVM概述

1.1为什么要学习JVM

   通过学习JVM (  java Virtual Machine )可以帮助我们理解java程序运行的过程,了解虚拟机中各种机制的实现原理。为后期写出优质的代码做好准备,为向更高的层次提升打好基础。

1.2虚拟机

       虚拟机的本质就是在windows中,虚拟一个运行的环境,分为系统虚拟机比如:VMware和程序虚拟机。程序虚拟机的典型代表就是java虚拟机,虚拟机是专门为执行某个单个计算机程序而设计。在java虚拟机中执行的指令我们称为java字节码指令。

1.3JVM作用

     (1)负责将字节码加载到内存中(运行时数据区)

     (2)负责存储数据

     (3)把字节码翻译为机器码并执行

  特点:一次编译到处运行——现在的JVM不仅可以执行java字节码,还可以执行其他语言编译后的字节码文件,是一个跨语言平台。自动的内存分配,自动垃圾回收功能。

1.4JVM整体组成

1.类加器(负责加载字节码文件)

2.运行时数据区(存储运时数据,堆,java虚拟机栈(运行java自己的方法),方法区,程序计数器,本地方法栈)

3.执行引擎(更底层,把字节码翻译为机器码)

4.本地方法接口

程序在执行之前要先把java代码转换成字节码(class文件),jvm首先需要把字节码通过类加载器,把文件加载到内存中的运行时数据区。字节码并不能由底层系统直接执行,需要执行引擎将字节码文件翻译成底层系统指令交由cpu去执行,在这个过程中需要调用其他语言的本地方法接口来实现整个程序的功能。

2.JVM结构-类加载

2.1类加载器子系统

       类加载器子系统负责从文件系统或者网络中加载 class 文件。 classLoader 只负责 class 文件的加载,至于它是否可以运行,则由 Execution Engine 决 定。加载的类信息存放于一块称为方法区的内存空间。

   class file 存在于硬盘上,可以理解为设计师画在纸上的模板,而最终这个模板在执行的时候是要加载 JVM 当中来,根据这个模板实例化出 n 个实例.class file 加载到 JVM 中,被称为 DNA 元数据模板. 此过程就要有一个运输工具(类加载器 Class Loader),扮演一个快递员的角色.
      

 2.2类加载过程

        使用IO读取字节码文件,转换并存储, 为每个类创建一个Class类的对象,存储在方法区中

链接(验证,准备,解析)

       验证: 对字节码文件格式进行验证,文件是否被污染,对基本的语法格式进行验证。

       准备: 为静态的变量进行内存分配。

public static int value = 123;value 在准备阶段后的初始值是 0,而不是 123

静态常量(final修饰)在编译期间就初始化。

解析: 将符号引用转为直接引用,将字节码中的表现形式,转为内存中表现(内存地址)。

初始化: 类的初始化,为类中的定义的静态变量进行赋值。

public static int value = 123;value 在初始化阶段后值是 123.

类什么时候会被加载

1.在类中运行main方法

2.创建对象

3.使用类中的静态变量,静态方法

4.反射 Class.forName("类的地址");

5.子类被加载

以下两种情况类不会被初始化:

static final int b = 20; 编译期间赋值的静态常量
System.out.println(User.b);


User[] users = new User[10];  作为数组类型

2.3类加载器

具体的负责加载类的一些代码

1.引导类加载器:用c/c++语言开发的, jvm底层的开发语言,负责加载java核心类库,与java语言无关的。

2.扩展类加载器:java 语言编写的,由 sun.misc.Launcher$ExtClassLoader 实现,继承ClassLoader类。从 JDK 系统安装目录的 jre/lib/ext 子目录(扩展目录)下加载类库。

3.应用程序类加载器:Java 语言编写的,由 sun.misc.Launcher$AppClassLoader 实现. 派生于 ClassLoader 类。加载程序中自己开发的类。

4.自定义类加载器

双亲委派机制

      为了保证程序的安全,防止自己写的类替换核心类, java使用按需加载,当需要加载一个类时,先委托给父类加载器加载,如果父加载器没有找到,继续向上级委托,直到引导类加载器。父级找到就返回,父级如果最终没有找到,抛出ClassNotFoundException,向下委派给子级加载器,找到返回该类,最终没有找到,报ClassNotFoundException。这是因为要先确保加载系统类。

 

双亲委派机制,是java提供的类加载的规范,但不是强制不能改变的。

我们可以通过自定义的类加载器,改变加载方式.

打破双亲委派机制

        可以通过继承ClassLoader类,重写loadClass(实现双亲委派的地方,不推荐)/findClass(推荐)方法,实现自定义的类加载。

典型的tomcat中,加载部署在tomcat中的项目时,就使用的是自己的类加载器

相关文章:

JVM虚拟机概述(1)

1.JVM概述 1.1为什么要学习JVM 通过学习JVM ( java Virtual Machine )可以帮助我们理解java程序运行的过程,了解虚拟机中各种机制的实现原理。为后期写出优质的代码做好准备,为向更高的层次提升打好基础。 1.2虚拟机 虚拟机的本质就是在windows中&…...

学习.NET MAUI Blazor(七)、实现一个真正的ChatGPT聊天应用

今天在新闻上看到一条消息,OpenAI已经开放了ChatGPT的接口,也就是GPT-3.5,对比原来的GPT-3,增加了gpt-3.5-turbo、gpt-3.5-turbo-0301两个模型。 gpt-3.5-turbo:使用最新的GPT-3.5模型,并针对聊天进行了优…...

Django框架学习

文章目录Django框架项目开发1. 创建项目2. 项目目录结构3. 视图函数(view)4. 路由配置url5. HTTP请求6. HTTP响应 - 状态吗7. GET方式传参8. POST传递参数模板Templates1. 通过 loader 获取模板,通过HttpResponse进行响应2. 使用 render() 直接加载并响应…...

JavaSE21-集合1-set

文章目录一、集合概念二、set集合1、set集合的特点2、HashSet2.1 特点2.2 创建对象2.3 常用方法2.4 遍历2.4.1 foreach遍历2.4.2 使用迭代器遍历2.4.3 转换为数组遍历一、集合概念 集合就是用于存储多个数据的容器。相对于具有相同功能的数组来说,集合的长度可变会…...

Web版和客户端哪种SQL工具更好?ChatGPT有话要说

2023年年初公司发布了一款Web版SQL工具,短期内就赢得了众多用户的喜爱和下载。不过,也有SQL用户在评论区中提出自己的观点,认为Web版工具都不可靠,甚至看见Web版工具就劝返… … 工具Web化逐渐成为一种趋势,比如&…...

从客户端的角度来看移动端IM即时通讯的消息可靠性和送达机制

如何确保IM 不丢消息是个相对复杂的话题,从客户端发送数据到服务器,再从服务器抵达目标客户端,最终在 UI 成功展示,其间涉及的环节很多,这里只取其中一环「接收端如何确保消息不丢失」来探讨,粗略聊下我接触…...

2023年java春招面试题及答案

2023年java春招面试题1、下面有关jdbc statement的说法错误的是?2、下面有关JVM内存,说法错误的是?3、下面有关servlet service描述错误的是?4、下面有关servlet和cgi的描述,说法错误的是?5、下面有关SPRIN…...

Django学习——基础篇(上)

一、Django的安装 pip install djangopython目录下出现两个文件 djando-admin.exe django django-admin.exe django 二、创建项目 1.命令行(终端) 1.打开终端 winR 输入cmd 2.进入项目目录 3.执行命令创建项目 2.Pycharm 两种方法对比 1.命令行创…...

研报精选230302

目录 【个股230302华西证券_比亚迪】系列点评五十四:迪“王”需求向上 出口“海”阔天空【个股230302华西证券_华利集团】下游去库存背景下承压,毛利率保持稳健【个股230302开源证券_恒顺醋业】公司信息更新报告:四季度业绩承压,期…...

Unity心得

- 将结果与因子颠倒的函数Mathf.InverseLerp非常实用 - at 10 meters, you want volume 1 - at 20 meters, you want volume 0 - volume InvLerp( 20, 10, distance ) - 显示HideFlags为Hide类型的物体 Resources .FindObjectsOf…...

TryHackMe-Binex

Binex 枚举计算机并获取交互式 shell。利用 SUID 位文件,使用 GNU 调试器利用缓冲区溢出并通过 PATH 操作获得根访问权限。 端口扫描 循例 nmap SMB枚举 题目给了提示:Hint 1: RID range 1000-1003 Hint 2: The longest username has the unsecure pa…...

外贸人如何写出优秀的开发信?附详细思路

如何写出优秀的开发信?最近做出口生意的客户都在抱怨,开发信的回复率越来越低,其实原因有很多,有时候并非自己的能力实在很欠缺。原因总结如图:第一:市场不景气这个就是就属于客观因素了,这也许…...

python自学之《21天学通Python》(18)——第21章 案例2 Python搞定大数据

“大数据(Big Data)”这个术语最早期的引用可追溯到apache org的开源项目Nutch。当时,大数据用来描述为更新网络搜索索引需要同时进行批量处理或分析的大量数据集。随着谷歌MapReduce和GoogleFileSystem (GFS)的发布&a…...

面试问题【数据库】

数据库数据库的三范式是什么drop、delete、truncate 分别在什么场景之下使用char 和 varchar 的区别是什么数据库的乐观锁和悲观锁是什么SQL 约束有哪几种mysql 的内连接、左连接、右连接有什么区别MyIASM和Innodb两种引擎所使用的索引的数据结构是什么mysql 有关权限的表都有哪…...

Allegro如何输出钻孔表操作指导

Allegro如何输出钻孔表操作指导 用Allegro做PCB设计的时候,需要输出钻孔表格,用于生产加工,如下图 如何输出钻孔表,具体操作如下 点击Manufacture点击NC...

消息队列 面试题 整理

消息队列 为什么要使用消息队列? 异步解耦:关注的是通知而非处理。 流量削峰:将短时间内高并发的请求持久化,然后逐步处理,削平高峰期的请求。 日志收集: 事务最终一致性 系统间的消息通信方式&#xff…...

【Java】对象比较大小

在Java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题。Java实现对象排序的方式有两种: 自然排序:java.lang.Comparable定制排序:java.util.Comparator 规则:需要我们自定义根据对象的某个或某些属…...

发票自动OCR识别并录入模板 3分钟免费配置

要问整个公司里和数据打交道最多的职能,非财务莫属了吧。除了每天要处理大量财务数据外,还有发票录入的工作让财务陷入“易燃易爆炸”的工作状态。发票报销看似简单,但发票的类型有很多种,每种发票需要录入的信息也有差别。再加上…...

Dubbo 配置说明

dubbo:scan:base-packages: com.ut.msdasw.services.appservice //这个会扫描该包下得全部接口protocol: //这个主要是配置传输的协议和端口,只是一个协议name: dubbo port: 30032registry: //这里是服务注册中心的地址address: spring-cloud://localhost consum…...

英飞凌TCxxx实战系列01_Alarm处理

目录 1.概述2. Alarm内部处理2.1关联的寄存器2.2 Alarm设置case3. SMU外部处理3.1 关联的寄存器4. WDT Alarm的特殊处理4.1 看门狗超时测试4.2 RecoveryTimer相关的Alarm1.概述 当MCU运行出现问题,如MCU温度过高、过低,看门狗超时等会触发一个Alarm,当SMU收到Alarm信号后,…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...

深度学习习题2

1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

SpringAI实战:ChatModel智能对话全解

一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM&#xff0…...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合

作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...