jvm简介

news2024/12/24 9:01:18

01c7d58877c74b1396da9257b9a9fa9c.jpg.什么是JVM?

 

JVM是Java Virtual Machine(Java虚拟机)的缩写,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。由一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域等组成。JVM屏蔽了与操作系统平台相关的信息,使得Java程序只需要生成在Java虚拟机上运行的目标代码(字节码),就可在多种平台上不加修改的运行,这也是Java能够“一次编译,到处运行的”原因。

 

2.JRE、JDK和JVM的关系

JRE(Java Runtime Environment, Java运行环境)是Java平台,所有的程序都要在JRE下才能够运行。包括JVM和Java核心类库和支持文件。

JDK(Java Development Kit,Java开发工具包)是用来编译、调试Java程序的开发工具包。包括Java工具(javac/java/jdb等)和Java基础的类库(java API)

JVM(Java Virtual Machine, Java虚拟机)是JRE的一部分。JVM主要工作是解释自己的指令集(即字节码)并映射到本地的CPU指令集和OS(操作系统)的系统调用。Java语言是跨平台运行的,不同的操作系统会有不同的JVM映射规则,使之与操作系统无关,完成跨平台性。

3.java 体系结构介绍

 

jvm体系总体分四大块:

类的加载机制

jvm内存结构

GC算法 垃圾回收

GC分析 命令调优

①jvm体系之-类的加载机制

什么是类的加载?

类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。

加载类的过程。

 

(1)装载(loading)

 

负责找到二进制字节码并加载至JVM中,JVM通过类名、类所在的包名、ClassLoader完成类的加载。

因此,标识一个被加载了的类:类名 + 包名 + ClassLoader实例ID。

(2)链接(linking)

 

负责对二进制字节码的格式进行校验、初始化装载类中的静态变量以及解析类中调用的接口。

链接又包含三块内容:验证、准备、初始化。

    1)验证,文件格式、元数据、字节码、符号引用验证;

    2)准备,为类的静态变量分配内存,并将其初始化为默认值;

    3)解析,把类中的符号引用转换为直接引用

(3)初始化(initializing)

 

负责执行类中的静态初始化代码、构造器代码以及静态属性的初始化,以下六种情况初始化过程会被触发。

    1. 创建类的实例,也就是new的方式

    2.访问某个类或接口的静态变量,或者对该静态变量赋值

    3.调用类的静态方法

    4.反射(如Class.forName(“com.shengsiyuan.Test”))

    5.初始化某个类的子类,则其父类也会被初始化

    6.Java虚拟机启动时被标明为启动类的类(Java Test),直接使用java.exe命令来运行某个主类

类加载器

站在Java开发人员的角度来看,类加载器可以大致划分为以下三类:

(1).启动类加载器:Bootstrap ClassLoader

 

负责加载存放在JDK\jre\lib(JDK代表JDK的安装目录,下同)下,

或被-Xbootclasspath参数指定的路径中的

并且能被虚拟机识别的类库(如rt.jar,所有的java.开头的类均被Bootstrap ClassLoader加载)。

启动类加载器是无法被Java程序直接引用的。

(2).扩展类加载器:Extension ClassLoader

 

该加载器由sun.misc.Launcher$ExtClassLoader实现,

它负责加载JDK\jre\lib\ext目录中,或者由java.ext.dirs系统变量指定的路径中的所有类库(如javax.开头的类),

开发者可以直接使用扩展类加载器。

(3).应用程序类加载器:Application ClassLoader

 

该类加载器由sun.misc.Launcher$AppClassLoader来实现,

它负责加载用户类路径(ClassPath)所指定的类,开发者可以直接使用该类加载器,

如果应用程序中没有自定义过自己的类加载器,一般情况下这个就是程序中默认的类加载器。

应用程序都是由这三种类加载器互相配合进行加载的,如果有必要,我们还可以加入自定义的类加载器。因为JVM自带的ClassLoader只是懂得从本地文件系统加载标准的java class文件,因此如果编写了自己的ClassLoader,便可以做到如下几点:

1、在执行非置信代码之前,自动验证数字签名。

2、动态地创建符合用户特定需要的定制化构建类。

3、从特定的场所取得java class,例如数据库中和网络中。

 

双亲委托模式当类加载器收到了类加载的请求

当JVM加载一个类的时候,下层的加载器会将任务给上一层类加载器,上一层加载检查它的命名空间中是否已经加载这个类,如果已经加载,直接使用这个类。如果没有加载,继续往上委托直到顶部。检查之后,按照相反的顺序进行加载。如果Bootstrap加载器不到这个类,则往下委托,直到找到这个类。一个类可以被不同的类加载器加载。

双亲委派机制:

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

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

相关文章

Postman如何做接口测试,那些不得不知道的技巧

目录:导读 前言 Postman如何做接口测试1:如何导入 swagger 接口文档 Postman如何做接口测试2:如何切换测试环境 Postman如何做接口测试3:什么?postman 还可以做压力测试? Postman如何做接口测试4&…

电源控制测试老化系统-国产电源测试仪器-电源模块测试系统NSAT-8000

*测试仪器:可编程直流电源、可编程直流电子负载、数字示波器、功率计 *测试产品:电源模块。纳米软件电源ATE自动测试系统适用于大功率工业电源、AC/DC类DC电源供应器、适配器、充电器、LED电源等开关电源之综合性能测试。 *被测项目:有效值电…

快来组战队,赢iPhone啦!

常见问题 问:我邀请的人再去邀请,也算我的战队队员么?我最多可以有多少个队员? 答:您将和您直接邀请的人组成战队,并担任该战队的队长。如果被您邀请的小伙伴再去邀请其他人,那么您邀请的小伙…

跨域推荐(Cross-Domain Recommendation)的最新综述

论文解读系列第十六篇:IJCAI 2021--跨域推荐(Cross-Domain Recommendation)的最新综述 - 知乎 数据稀疏问题 目录 1.背景介绍 (1)内容层级相关性(content-level relevance) (2)用户层级相关性(user-level relevance) (3)产品层级相关性…

OpenCV从2到3的过渡

与版本2.4相比,OpenCV 3.0引入了许多新算法和功能。有些模块已被重写,有些已经重组。尽管2.4中的大多数算法仍然存在,但接口可能不同。本节描述了一般性的最显着变化,过渡操作的所有细节和示例都在本文档的下一部分中。 1、贡献存…

nginx安装与配置反向代理

Nginx (engine x) 是一款基于异步框架的轻量级/高性能的Web 服务器/反向代理服务器/缓存服务器/电子邮件(IMAP/POP3)代理服务器,由俄罗斯的程序设计师Igor Sysoev(伊戈尔赛索耶夫)所开发.话不多说直接上步骤 1.安装nginx,我是在root用户下不需要加sudo yum install nginx 安…

嵌入式分享合集116

一、DC-DC升压电路模块原理 DC-DC 转换器是一种电力电子电路,可有效地将直流电从一个电压转换为另一个电压。 DC-DC 转换器在现代电子产品中扮演着不可或缺的角色。这是因为与线性稳压器相比,它们具有多项优势。尤其是线性稳压器会散发大量热量&#x…

什么是天气预报 API 接口?如何获取天气预报 API?

什么是天气预报API接口? 天气的好坏和人们的生活、工作息息相关,每天的天气如何?总是牵动着人们的心,关注天气就行了人们茶余饭后的话题了。如何获得准确的天气预报?还得从天气预报API接口说起。 天气预报API是提供未…

150398-22-4,三肽Phe-Arg-Arg

The tripeptide FRR was found to exert a Zn⁺ dependent, insulin-mimetic inhibitory action on myocardial proteolysis. 三肽FRR对心肌蛋白水解具有Zn⁺依赖性、胰岛素样抑制作用。 编号: 197811中文名称: 三肽Phe-Arg-Arg英文名: Phe-Arg-ArgCAS号: 150398-22-4单字母: H…

yolov1 论文精读 - You Only Look Once

YOLOv1 Introduction 作者将目标检测进行重构并看作为单一的回归问题,直接从图像到边界框坐标和类别概率。使用我们的系统,您只需要在图像上看一次(you only look once, YOLO),以预测出现的目标和位置。 系统将输入…

SpringMVC(九):作用域传参

文章目录 作用域传参 一、传统方式传递数据 二、使用Model传递数据

PHP反序列化与SESSION

php存储session的三种模式php_serialize&#xff08;php>5.5.4&#xff09; 经过serialize()函数序列化数组 php 键名竖线经过seralize()序列处理的值 php_biary 键名的长度对应ASCII字符键名serialize()序列化的值 测试代码 <?php //ini_set("sessi…

cubeIDE开发,在LCD显示摄像头抓取的图片数据

一、摄像头相关资料信息 在LCD上显示当前camera的图像数据&#xff0c;类似我们前面提到的LCD显示图片数据&#xff0c;就是实时将摄像头抓取的视频数据帧&#xff08;图片&#xff09;转换成图片字码表&#xff0c;即LCD宽*LCD高像素大小的颜色点阵&#xff0c;然后推送到LCD接…

(三) Spring Security Oauth2.0 源码分析--认证中心全流程分析

一 引言 Spring Security Oauth2.0 的认证中心可以简单的理解为是对Spring Security的加强,也是通过FilterChainProxy(其原理可参考前面的Security源码分析)对客户端进行校验后在达到自定义token颁发站点,进行token的颁发,具体流程如下: 用户发起token申请请求(‘/oauth/to…

ARM异常处理(4):SVC和PendSV的作用详解

SVC(Supervisor Call)和PendSV(Pendable Service Call)是针对软件和操作系统的两个异常。 1 SVC SVC用于生成系统函数调用&#xff0c;例如&#xff0c;用户程序不允许直接访问硬件&#xff0c;操作系统可以通过SVC提供对硬件的访问。因此&#xff0c;当用户程序想要使用某些…

STC 51单片机56——摇摇棒

主要代码&#xff1a; //增减图像时&#xff0c;需要修改 switch_show&#xff08;&#xff09;和 H对应参数 //所用单片机&#xff1a;STC15W408S 内部Rc 11.0592MHz #include <STC15.H> #include <intrins.h> #define POSITIVE 0 #define OPPOSE 1 //sbi…

Vector-常用CAN工具 - CANoe入门到精通_02

​咱们话接上回&#xff0c;前面已经介绍了CANoe的基本信息和硬件环境搭建&#xff0c;下面我们就要打开CANoe&#xff0c;配置CANoe工程了&#xff0c;只有完成了CANoe工程配置才能真正的使用CANoe完成测试&#xff0c;本次主要介绍的是手工测试环境&#xff0c;至于自动化测试…

[附源码]Python计算机毕业设计SSM教师职称评定系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【OpenCV学习】第5课:图像模糊(均值滤波,高斯滤波)

参考文章链接:https://blog.csdn.net/qq_30460949/article/details/121990114 仅自学做笔记用,后续有错误会更改 理论 1.Smooth/blur是图像处理中最简单和常用的操作之一 2.使用该操作的原因之一就是为了给图像预处理的时候减低噪声 3.使用Smooth/Blur操作其背后是数学的卷积…

ContentProvider与ContentResolver

目录&#xff1a;一、什么是ContentProvider&#xff1a;二、如何使用ContentProvider&#xff1a;第一步.创建类继承ContentProvider&#xff1a;第二步.注册ContentProvider&#xff1a;三、URI&#xff1a;1.常用方法&#xff1a;2.解析URI&#xff1a;&#xff08;1&#x…