JVM虚拟机知识总结

news2024/11/23 20:39:24
    • 什么是虚拟机?

从字面意思上来看,顾名思义即使一台虚拟的计算机,用来执行虚拟的计算机指令,从大体上来看,虚拟机一般分为两种。一种是系统虚拟机,另外一种是程序虚拟机

系统虚拟机:代表为VMware

程序虚拟机:代表为JVM(java虚拟机)

    • JVM的作用?

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

  1. 将字节码转换为机器码,在各个系统中执行

  1. 负责存储数据

  1. 垃圾回收

    • JVM的整体组成部分?

  1. 类加载

  1. 运行时数据区(堆、java虚拟机栈、方法区、程序计数器、本地方法栈)具体了解请点击(java运行时区域分布

  1. 执行引擎(将字节码转换为机器码)

  1. 本地方法接口

  1. 垃圾回收

程序将java代码首先转换为class文件(字节码),jvm通过类加载器用IO的方式将字节码加载到内存中(运行时数据区),但是字节码不能被底层系统所识别,所以需要特定的命令解析器(执行引擎)将字节码翻译成为底层系统指令交给CPU进行执行,在执行的过程中会调用到其他语言的接口(本地方法接口)来实现功能的实现。

    • 类加载

    • 类加载器的作用?

  1. 负责从硬盘|网络中加载节码信息

  1. 将节码信息加载到内存(运行时数据区)中

    • 类加载过程?

    • 加载
  1. 通过类名(地址)获取此类的二进制字节流

  1. 将这个字节流所代表的静态存储结构转换为方法区的运行结构

  1. 在内存中生成一个代表这个类的java.lang.Class对象,作为这个类的各种数据的访问接口

    • 链接

验证:

对字节码文件的格式进行验证,文件是否被污染

对基本的语法格式进行验证

准备:

为静态的变量进行内存分配

静态常量在编译期间就初始化

解析:

将符号引用转为直接引用

将字节码的表现形式转为内存中的表现形式(内存地址)

初始化:

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

3.初始化

为类中的定义的静态变量进行赋值

    • 类什么时候会初始化?

  1. 在类中运行main方法

  1. 创建对象

  1. 使用类中的静态变量以及静态方法

  1. 反射Class.forNname("类的地址")

  1. 初始化子类的同时也会初始化其父类

注意:以下两种情况不会进行类初始化

先创建两个类

public class User {
    static int a=10;
    static final int b=20;

    static{
        System.out.println(a);
    }
public class TestUser {
    public static void main(String[] args) {

    }
  1. 引用该类的静态常量

public class TestUser {
    public static void main(String[] args) {
  System.out.println(User.b);//调用类中的静态常量不会导致类的加载,有时会在常量在进行计算的情况下才会导致类的加载
    }
  1. 构造某一个类的数组时

public class TestUser {
    public static void main(String[] args) {
    User[] users=new User[10];//构造某个类的数组时不会导致该类的初始化
    }

6.类加载器

  1. 引导类加载器 :用c/c++语言进行开发,java底层的开发语言,负责加载java核心类库

  1. 扩展类加载器 :加载jdk下的 jre/lib/ext 子目录下加载类库

  1. 应用程序类加载器:加载程序中自己开发的类

 ClassLoader classLoader=User.class.getClassLoader();
 ClassLoader classLoader1=classLoader.getParent();
 System.out.println(classLoader);//sun.misc.Launcher$AppClassLoader@18b4aac2  程序类加载器
 System.out.println(classLoader1);//sun.misc.Launcher$ExtClassLoader@1b6d3586  扩展类加载器
 ClassLoader classLoader2=String.class.getClassLoader();
 System.out.println(classLoader2);//null  启动类加载器

双亲委派机制:

我们以String类为例,创建一个java.lang.String的一个类

public class String {
    static{
        System.out.println("自己创建的String类");
    }

    public static void main(String[] args) {
        /*错误: 在类 java.lang.String 中找不到 main 方法, 请将 main 方法定义为:
             public static void main(String[] args)
       否则 JavaFX 应用程序类必须扩展javafx.application.Application*/
    }

我们在类中添加了一个main方法,按道理启动应该是没有什么大问题的,但是当我们运行之后,idea给我们报了一个错,说是在String这个类中找不到main方法,那发生这样的原因是什么呢

原理:当一个类加载器收到类加载请求时,先会委托给父类加载器加载,如果父类加载器还有其父类,则继续向上委托,直到到根加载器(引导类加载器),如果还是找不到,则向下交给子类进行加载,一次类推,直到加载成功或者报错 ClassNotFoundException 异常。

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

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

相关文章

微信小程序 java中医知识库百科科普

中管理员的主要功能有: 1.管理员输入账户登陆后台 2.个人中心:管理员修改密码和账户信息 3.用户管理:对注册的用户信息进行删除,查询,添加,修改 4.中医知识管理:对中医的知识信息进行添加&#…

什么是地址解析协议 (ARP)?

最近不想更文章了,药吃完了, 本文目录地址解析协议 (ARP) 含义ARP 是做什么的,它是如何工作的?地址解析协议与 DHCP 和 DNS 的关系是什么?它们有何不同?ARP 有哪些类型?1…

应急救护培训报名-因疫情原因,暂停开班?

应急救护培训报名背景和急救证书区别2023年一定要被培训项目报名渠道状态上海市红十字应急救护培训上海市医疗急救中心公众课程专业课程背景和急救证书区别 关于背景和急救证书区别,请参考,程序员的生命与急救 文章 2023年一定要被培训项目 由于疫情原…

Springboot+vue冷冻仓储进销存管理系统 java

端技术:nodejsvueelementui 前端:HTML5,CSS3、JavaScript、VUE 系统分为不同的层次:视图层(vue页面),表现层(控制器类),业务层(接口类)和持久层&a…

php宝塔搭建部署实战易优游戏竞技公司网站源码

大家好啊,我是测评君,欢迎来到web测评。 本期给大家带来一套php开发的易优游戏竞技公司网站源码,感兴趣的朋友可以自行下载学习。 技术架构 PHP7.2 nginx mysql5.7 JS CSS HTMLcnetos7以上 宝塔面板 文字搭建教程 下载源码&#xff…

SpringBoot或SpringCloud集成Nacos

一、创建一个项目首先创建一个空项目&#xff0c;然后引入Nacos的依赖&#xff0c;并选择正确的SpringBoot和Nacos版本&#xff0c;如果版本选择不对的话可能会启动失败&#xff0c;带来很大的问题<!--SpringBoot的版本--><parent><groupId>org.springframew…

详解axios(快速入门)

axios这一篇就够啦~axios1、axios的理解和使用1.1 axios概述1.2 axios特点1.3 axios常用语法1.4 难点语法的理解和使用2、axios源码分析2.1 源码目录结构2.2 源码分析axios 1、axios的理解和使用 1.1 axios概述 前端最流行的ajax请求库 react/vue官方都推荐使用axios 发ajax…

推荐系统与深度学习关联

6.1 推荐系统与深度学习关联 学习目标 目标 无应用 无 6.1.1 深度学习到推荐系统 深度学习发展成功与局限 最近几年深度学习的流行&#xff0c;大家一般认为是从2012年 AlexNet 在图像识别领域的成功作为一个里程碑。AlexNet 提升了整个业界对机器学习的接受程度&#xff1…

如果把小程序业务和研发管理都放到一个平台

伴随着互联网在中国进程的发展&#xff0c;线上研发效能及业务应用软件也不落后于时代进步的脚步&#xff0c;中国软件行业从未停止过持续的创新。 2022年&#xff0c;业务应用开发正在简化&#xff0c;研发效能也在提升&#xff0c;其中不得不提软件在协同促进、研发一体化管…

MyBatis 一级二级缓存【学习记录】

一级缓存 1&#xff09;首先做个测试&#xff0c;创建一个mapper配置文件和mapper接口&#xff0c;我这里用了最简单的查询来演示。 <mapper namespace"cn.elinzhou.mybatisTest.mapper.UserMapper"><select id"findUsers" resultType"cn.…

Linux关于执行文件路径的变量:$PATH

目录 前言 环境变量PATH 问题思考 总结 前言 Linux目录的配置都是依据FHS&#xff0c;FHS的标准文件指出&#xff0c;它们的主要目的是希望让用户可以了解到已安装软件通常放置于哪个目录下。也就是说&#xff0c;FHS的重点在于规范每个特定的目录下应该要放置什么样子的数…

Docker搭建私有仓库

搭建私有仓库 参考地址&#xff1a;搭建私有仓库 安装运行 docker-registry 查看docker存储路径与对应路径下的大小 docker info | grep Dir查看对应路径下的大小 du -sh /var/lib/docker如果大小没有问题的话就可以直接安装了 拉取registry镜像并运行 docker run -d \-…

数据库常用语句练习总结

show databases; 显示数据库 use student; 使用该数据库 3.show full columns from student; 展示数据库所有的字段 show columns from student; 展示数据库添加的字段 alter table student change column Sname Snames char(200); 添加 student表中的字段 alter tabl…

手写智能识别:SmartZoneOCR/SmartZoneICR Crack

Accusoft.SmartZoneOCR/Accusoft.SmartZoneICR 智能区 OCR/ICR 在您的应用程序中使用自动区域数据捕获技术消除手动数据输入。 概述 使用我们强大的 ICR 和 OCR SDK 改进字符识别。 SmartZone 先进的区域字符识别技术允许您从文档图像中的指定字段捕获打字 (OCR) 或手写 (ICR)…

24种设计模式之单例模式(饿汉式、懒汉式)

一、单例模式单例模式( Singleton Pattern &#xff09;是指确保一个类在任何情况下都绝对只有一个实例&#xff0c;并提供一个全局访问点。单例模式是创建型模式。单例模式在现实生活中应用也非常广泛&#xff0c;例如,总统&#xff0c;班主任等。J2EE标准中的ServletContext …

反对称矩阵乘任意矩阵满足交换性?

看论文的时候有疑惑 R˙R[ω]\dot{\mathbf{R}}\mathbf{R}[\omega]_{\times}R˙R[ω]​ R˙[ω]R\dot{\mathbf{R}}[\omega]_{\times}\mathbf{R}R˙[ω]​R 难道反对称矩阵乘任意矩阵满足交换性&#xff1f; 在maple里面验证一下吧&#xff1a; 很明显是不一样的&#xff0c;一…

字节二面:100Wqps短链系统,如何设计?

前段时间&#xff0c;社群小伙伴&#xff0c;在交流一个字节的二面真题&#xff1a; 100Wqps短链系统&#xff0c;怎么设计&#xff1f; 这道题&#xff0c;看上去业务简单&#xff0c;其实&#xff0c;覆盖的知识点非常多&#xff1a; 高并发、高性能分布式 IDRedis Bloom …

考虑电动汽车灵活性的微网多时间尺度协调调度研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【Qt】2.Qt坐标系、信号和槽、Lambda表达式

目录 Qt坐标系 信号和槽 需求 优点 自定义信号 自定义槽函数 触发自定义信号 代码 main.cpp widget.h widget.cpp teachar.h teachar.cpp student.h student.cpp 结果 重载 解决方法 信号和槽拓展 断开信号和槽 触发多个槽函数 Lambda表达式 [] () {}…

【数据结构与算法】DP路径问题

问题&#xff1a;最小路径和 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 示例 1&#xff1a; 输入&#xff1a;grid [[1,3,1],[1,5,…