第1篇:JVM运行原理

2023-11-10

前言

学习JVM,首先需要了解类的生命周期?以及类加载原理?并且需要扩展知识点,明白什么是双亲委派?如何打破双亲委派?最常见的Web容器Tomcat中的JVM是如何工作的?

一、类的生命周期

编译 -> 加载 -> 验证 -> 准备 -> 解析 -> 初始化 -> 使用 ->卸载

二、类加载原理

1、类加载的过程

在这里插入图片描述

2、代码示例

public class Kafka {

    public static void main(String[] args) {
        ReplicaManager replicaManager = new ReplicaManager();
        replicaManager.loadReplicasFromDisk();
    }
}
public class ReplicaManager {

    public static String flushInterval = "hello world";

    public static Map<String, ReplicaManager> replicaManagerMap;

    static {
        replicaManagerMap = new HashMap<>(16);
    }

    public void loadReplicasFromDisk() {
        Boolean hasFinishedLoad = false;
        if (isLocalDataCorrupt()) {
        }
    }

    public Boolean isLocalDataCorrupt() {
        Boolean isCorrupt = false;
        return isCorrupt;
    }
}

三、双亲委派原理

1、原理图

在这里插入图片描述

2、双亲委派的优点

安全性:若有人恶意篡改系统级别类,如:String.java,则不可能实现,因为该类在BootstrapClassLoader已加载过了;
一致性:若父类加载器已加载过,子类则不会重复加载,保证同一个类只被加载一次(通过ClassLoader+类全限定名来保证)

四、Tomcat类加载机制

在这里插入图片描述

总结

1、Tomcat如何打破双亲委派机制:Thread.currentThread().setContextClassLoader(this.catalinaLoader)。默认情况下,Thread上下文加载器继承至父线程,也就是说所有线程默认上下文加载器都与第一个启动线程相同,即main线程,它的上下文加载器是AppCLassLoader。
2、JasperClassLoader只负责加载由JSP编译后生成的类。
3、每个应用都有自己的WebappClassLoader,各个WebappClassLoader实例之间相互隔离,且加载路径中的Class只对当前webapp可见,对Tomcat和其他Web应用程序不可见。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第1篇:JVM运行原理 的相关文章

随机推荐

  • 用vite 新建vue3项目

    1 component里的HelloWorld vue 是组件 2 总的vue App vue 3 index css 写的App vue的css 不是组建的vue 为什么呢 4 main js 几个import来源 HelloWorld
  • 694 不同岛屿的数量

    题目描述 给定一个非空 01 二维数组表示的网格 一个岛屿由四连通 上 下 左 右四个方向 的 1 组成 你可以认为网格的四周被海水包围 请你计算这个网格中共有多少个形状不同的岛屿 两个岛屿被认为是相同的 当且仅当一个岛屿可以通过平移变换
  • IOS本地推送 学习手记

    iOS上有两种消息通知 一种是本地消息 Local Notification 一种是远程消息 Push Notification 也叫Remote Notification 设计这两种通知的目的都是为了提醒用户 现在有些什么新鲜的事情发生了
  • JavaWeb学习笔记 ---- HTML

    web概念概述 软件架构 1 C S Client Server 客户端 服务器端 在用户本地有一个客户端程序 在远程有一个服务器端程序 优点 用户体验好 缺点 开发 安装 部署 维护 麻烦 2 B S Browser Server 浏览器
  • Python机器学习从零开始(一)序章

    目录 前言 写在前面 1 什么是机器学习 1 1 监督学习 1 2无监督学习 2 Python中的机器学习 3 必须环境安装 Anacodna安装 总结 前言 每一次变革都由技术驱动 纵观人类历史 上古时代 人类从采集狩猎社会 进化为农业社
  • node.js学习笔记--定义GET和POST路由

    const http require http const queryString require querystring const server http createServer req res gt const url req ur
  • csapp 第一章 计算机系统漫游

    计算机系统由硬件和系统软件组成 共同工作来运行应用程序 include
  • Java基础+进阶

    本文适合Java入门和复习回顾 高级篇请参考导航里的面试题 导航 黑马Java笔记 踩坑汇总 Java基础 JavaWeb SSM SpringBoot 瑞吉外卖 SpringCloud 黑马旅游 谷粒商城 学成在线 牛客面试题 目录 一
  • 实现小说分页article

    翻页过程 代码实现 css部分 margin 0 padding 0 box sizing border box wrapper height 100vh overflow hidden margin 0 16px article colu
  • 【每日知识】React学习笔记

    一 React特点 1 声明式编程 2 组件化开发 3 多平台适配 二 React开发依赖 1 React 包含react所必须的核心代码 2 react dom react渲染在不同平台所需的核心代码 3 babel 将jsx转换成rea
  • 【ChatGPT实战】9.使用ChatGPT-+-Midjourney-帮忙做了个App

    在当今数字化的时代 手机App已经成为人们生活的重要组成部分 开发一个优秀的手机App需要付出大量的时间和精力 特别是在设计和开发阶段 但是现在我们可以借助工具和技术来协助自己简化这个过程 在这篇教程中 我将介绍如何使用ChatGPT和Mi
  • 类模板以及赋值运算符重载、拷贝构造函数

    编译器默认的拷贝构造函数 是发生的浅拷贝 像指针的赋值就会让指针指向同一个地址空间 析构时就会对同一个地址空间释放两次 就会造成程序崩溃 自定义在模板内的拷贝构造函数 Queue const Queue
  • Mysql数据库笔记

    Mysql数据库 1 初识数据库 1 解决数据读取慢的问题 2 数据一致性 3 数据的安全性 4 解决了并发问题 数据库管理系统DBMS 数据库管理员DBA 数据库database db 表 table 数据库分类 1 关系型数据库 数据之
  • 数据库基础知识整理文档

    Oracle数据库基本数据类型 分类 数据类型 存储内容 存储空间 备注 数值 Number 数值 22个字节 number n 只能存储整数 精度n来指定 number n m 存储小数 n 代表整数位数 小数位数 m代表的小数位数 整数
  • C++ lambda自定义map,set,vector,list 排序规则

    Map和Set本质红黑二叉树 插入数据时可以自定义比较算法 list和vector链表插入时无需比较 所以一般全部插入完成后调用sort 核心代码 typedef struct MyStudent std string name int g
  • UGUI实现背包系统

    一 项目需求 1 可以生成物品 2 提示物品相关信息 3 能拖拽背包中的物品进行交换 丢弃操作 二 实现步骤 1 背包中的物品包括各种种类 如武器 消耗品 防具等 它们具备一些相同的属性 如ID 名字 描述 购买价格 出售价格 图标等 同时
  • jpg格式怎么转换成plt格式的_JPEG格式图片转PLT格式雕刻输出

    JPEG 格式图片转 PLT 格式雕刻输出 方法一 1 JPEG 格式图片用 PS 打开 先把图片转灰度 图像 模式 灰度 再转位图 输出 O 300 使用 U 50 阀值 图像 模式 位图 存储文件为 PSD 或 TIFF 2 打开 Ad
  • 跨5合并dnf无限连接服务器,不妨一试!跨5等跨区卡登陆卡黑屏解决办法分享

    今日我们怀着激动的心情 在10点登陆游戏 跨5 发现跨区并未更新 频道比原来还少了许多 登陆还 出现卡登陆和卡黑屏 故障分析 经过多次尝试 我们发现本次全服跨区更新 游戏客户端和服务器配置文件改变较多 本地客户端的旧配置 未自动清空 存储文
  • pandas 之unique()函数与nunique()函数区别

    很多功能函数自己试一试就全知道了 开始看别人的代码一直不太清楚两者的区别 总是模糊的以为它俩是一样的 是获取唯一值 其实从名字就能看出区别 unique 是以 数组形式 numpy ndarray 返回列的所有唯一值 特征的所有唯一值 nu
  • 第1篇:JVM运行原理

    文章目录 前言 一 类的生命周期 二 类加载原理 1 类加载的过程 2 代码示例 三 双亲委派原理 1 原理图 2 双亲委派的优点 四 Tomcat类加载机制 总结 前言 学习JVM 首先需要了解类的生命周期 以及类加载原理 并且需要扩展知