JVM基础了解

        JVM 是java虚拟机。

       作用:运行并管理java源码文件锁生成的Class文件;在不同的操作系统上安装不同的JVM,从而实现了跨平台的保证。一般在安装完JDK或者JRE之后,其中就已经内置了JVM,只需要将Class文件交给JVM即可

 写好的java源文件,会编译生成16进制的字节码文件(**.class),cafe babe开头,有相应的格式,可交由jvm执行

1.类加载

     A. 首先是Loading阶段,找到jvm执行字节码文件的前提是需要找到对应的字节码文件。由此可知,下一步就是通过类加载机制对 Class文件进行加载,其实是在硬盘上查找并通过IO读入字节码文件【使用到类时才会加载,java这里采用的时懒加载机制,例如:调用类main()方法时,new对象等,在加载阶段会在内存生成一个代表这个类的java.lang.Class对象】【双亲委派】

     双亲委派机制进行类加载,加载类的时候,先由Custom ClassLoader 自定义类加载器 委托上级 App ClassLoader应用类加载器 再委托上级Extension ClassLoader 扩展类加载器 最后委托给 Bootstrap ClassLoader 根加载器 ,由根加载器优先去加载此类。如果 根加载器未在自己的工作范围内找到,则向下一级委托,一旦有加载器加载后,则不会被重复加载。根加载器 和扩展类加载器一般是加载 java自带的一些 类,【这样是一个沙箱机制,防止 用户随意篡改已有的类,比如用户自己写一个 java.lang.String类,用户自己写的类是没法被加载】

    当然,双亲委派机制也是可以破坏的,ClassLoader里面的 复写loadclass方法,改变加载方式,例如:Tomcat

   B.找到对应的class文件,进行加载的时候,会打散.class的信息,类文件字节码流静态存储结构 放入 JVM的一块区域【Method  Area】,方法区,所有的线程共享的一块区域

   C. 类文件的所对应的Class对象 交给jvm 放入【Heap】堆中,也是所有线程共享的一块区域 


2.链接 (Linking)

   加载类文件后需要进一步处理

   a. 验证  verify :保证类被加载的类的正确性,有验证规则

   b. 准备 prepare :为类的静态变量分配内存空间,并将其的值初始化为默认值 。比如 static int a =0 ; 初始化 a=0;

   c. 解析 resolve :将类中的符号引用转换为直接引用

    例如:目前字节码文件String str 的地址,以前是.class 文件中的一个代称,这里将会 分配好内存空间直接对应内存中的某一个真实的地址指向


3. 初始化 (Initializing)

   为静态变量进行初始化为真正的值   ,a =10;


最后 进行使用  以及 卸载

 

 

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

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

相关文章

爬虫工作中代理失效了怎么处理?

Hey!亲爱的爬虫小伙伴们,是不是经常在爬虫的工作中遇到代理IP失效的问题?别着急,今天我来分享一些应对代理失效的妙招!这些方法简单易行,让你爬虫顺利进行. 一、为什么代理会失效? 在爬虫过程…

vue3+ts+vite项目页面初始化loading加载效果

简介 一分钟实现 vue-pure-admin 同款项目加载时的 loading 效果 一、先看效果 1.1 静态效果 1.2 动态效果 二、上代码 核心代码在body里面&#xff0c;代码中已标明。找到你项目的 index.html &#xff0c;复制粘贴进去即可 <!DOCTYPE html> <html lang"en…

【100天精通python】Day43:python网络爬虫开发_爬虫基础(urlib库、Beautiful Soup库、使用代理+实战代码)

目录 1 urlib 库 2 Beautiful Soup库 3 使用代理 3.1 代理种类 HTTP、HTTPS 和 SOCKS5 3.2 使用 urllib 和 requests 库使用代理 3.3 案例&#xff1a;自建代理池 4 实战 提取视频信息并进行分析 1 urlib 库 urllib 是 Python 内置的标准库&#xff0c;用于处理URL、发送…

每天一道leetcode:1306. 跳跃游戏 III(图论中等广度优先遍历)

今日份题目&#xff1a; 这里有一个非负整数数组 arr&#xff0c;你最开始位于该数组的起始下标 start 处。当你位于下标 i 处时&#xff0c;你可以跳到 i arr[i] 或者 i - arr[i]。 请你判断自己是否能够跳到对应元素值为 0 的 **任一** 下标处。 注意&#xff0c;不管是什…

spring依赖注入详解(上)

一、Bean销毁的过程 如果bean销毁时会执行的场景 1、设置DestroyMethodName为(inferred) // 先把DestroyMethodName设置为(inferred) Component public class TestBeanPostProcessor implements MergedBeanDefinitionPostProcessor {Overridepublic void postProcessMergedBe…

spring boot集成jasypt 并 实现自定义加解密

一. 技术需求 由于项目中的配置文件 配置的地方过多&#xff0c;现将配置文件统一放到nacos上集中管理 且密码使用加密的方式放在配置文件中 项目中组件使用的版本环境如下 spring cloud 2021.0.5 spring cloud alibaba 2021.0.5.0 spring boot 2.6.13 二. 技术实现 配置文…

68个Python内置函数,你不会不知道吧?

内置函数就是Python给你提供的&#xff0c;拿来直接用的函数&#xff0c;比如print.&#xff0c;input等。 截止到python版本3.6.2 &#xff0c;python一共提供了68个内置函数&#xff0c;具体如下&#x1f447; abs() dict() help() min() …

ARM开发(cortex-A7核,UART总线实验)

目标&#xff1a;键盘输入一个字符a,串口工具显示b&#xff1b; 键盘输入一个字符串"nihao",串口工具显示"nihao"&#xff1b; ---.h头文件--- #ifndef __UART4_H__ #define __UART4_H__#include "stm32mp1xx_rcc.h" #include "stm32mp1x…

根据Dockerfile创建容器案例讲解

-f为dokerfile的路径&#xff0c; -t为新镜像的名称及版本。 后面这个点是寻址路径。

阿里面试官常问的TCP和UDP,你真的弄懂了吗?

♥ 前 言 作为软件测试&#xff0c;大家都知道一些常用的网络协议是我们必须要了解和掌握的&#xff0c;面试的时候面试官也非常喜欢问一些协议相关的问题&#xff0c;其中有两个协议因为非常基础&#xff0c;出现的频率非常之高&#xff0c;分别是 ”TCP 协议“ 和 ”UDP 协…

漏洞指北-VulFocus靶场专栏-中级03

漏洞指北-VulFocus靶场专栏-初级03 中级009 &#x1f338;gxlcms-cve_2018_14685&#x1f338;step1&#xff1a;安装系统 密码rootstep2 进入后台页面 账号密码&#xff1a;admin amdin888step3 查看详细 有phpinfo() 中级010 &#x1f338;dedecms-cnvd_2018_01221&#x1f3…

2023国赛数学建模C题思路模型代码 高教社杯

本次比赛我们将会全程更新思路模型及代码&#xff0c;大家查看文末名片获取 之前国赛相关的资料和助攻可以查看 2022数学建模国赛C题思路分析_2022国赛c题matlab_UST数模社_的博客-CSDN博客 2022国赛数学建模A题B题C题D题资料思路汇总 高教社杯_2022国赛c题matlab_UST数模社…

TypeError: Object of type int64 is not JSON serializable

TypeError: Object of type int64 is not JSON serializable 这个错误通常意味着你试图将一个Python对象转换为JSON&#xff0c;但是这个对象不能被序列化为JSON。在你的情况下&#xff0c;错误发生在尝试将一个int64类型的对象转换为JSON时。 在Pandas中&#xff0c;当你使用…

《游戏编程模式》学习笔记(五)原型模式 Prototype Pattern

原型的定义 用原型实例指定创建对象的种类&#xff0c;并且通过拷贝这些原型创建新的对象。 举个例子 假设我现在要做一款游戏&#xff0c;这个游戏里有许多不同种类的怪物&#xff0c;鬼魂&#xff0c;恶魔和巫师。这些怪物通过“生产者”进入这片区域&#xff0c;每种敌人…

element文本域禁止手动拉伸、两种方式、textarea

文章目录 style方式element自带的禁止拉伸方法建议 style方式 html <el-inputv-model"content":rows"3"class"r_n"type"textarea"maxlength"40"placeholder""style"height: 100%;" />css style…

等保测评--安全计算环境--测评方法

安全子类--身份鉴别 a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换; 一、测评对象 终端和服务器等设备中的操作系统(包括宿主机和虚拟机操作系统) 、网络设备(包括虚拟网络设备)、安全设备(包括虚拟安全设备)、移动终端…

Qt多线程开启定时任务

项目场景&#xff1a; 多线程执行一些耗时操作&#xff0c;并且需要固定时间去轮询。 代码&#xff1a; #include <QThread> #include <QTimer> #include <QtCore/QMutex>class pollingManager : public QObject {Q_OBJECTpublic:static pollingManager*get…

Linux 桌面版关闭GUI桌面环境

持久打开和关闭 通过CtrlAltF1-F6快捷键进入命令行界面 执行以下命令&#xff0c;持久关闭Ubuntu桌面版的GUI环境&#xff1a; sudo systemctl set-default multi-user.target执行以下命令&#xff0c;持久开启Ubuntu桌面版的GUI环境 通过CtrlAltF7快捷键进入GUI界面 sudo s…

Android Studio 之 Android 中使用 HanLP 进行句子段落的分词处理(包括词的属性处理)的简单整理

Android Studio 之 Android 中使用 HanLP 进行句子段落的分词处理&#xff08;包括词的属性处理&#xff09;的简单整理 目录 Android Studio 之 Android 中使用 HanLP 进行句子段落的分词处理&#xff08;包括词的属性处理&#xff09;的简单整理 一、简单介绍 二、实现原理…

派森 #P122. 峰值查找

描述 给定一个长度为n的列表nums&#xff0c;请你找到峰值并返回其索引。数组可能包含多个峰值&#xff0c;在这种情况下&#xff0c;返回任何一个所在位置即可。 &#xff08;1&#xff09;峰值元素是指其值严格大于左右相邻值的元素。严格大于即不能有等于&#xff1b; &…