虚拟机类加载机制

类的生命周期

类的生命周期指的是在Java程序中,一个类从编写到被加载、连接、初始化、使用、卸载的整个过程。类的生命周期可以分为以下几个阶段:

加载,验证,准备,解析,初始化,使用,卸载。

类的加载过程

加载,验证,准备,解析,初始化

加载阶段:加载阶段是指将类的字节码文件加载到内存中,并生成一个代表该类的Class对象; 加载阶段的工作由类加载器(ClassLoader)来完成,包括通过类的全限定名查找字节码文件,并将字节码文件加载到内存中。

连接阶段:连接阶段包括验证、准备和解析三个步骤

验证:确保被加载的类符合Java虚拟机规范,不会造成安全问题。

准备:为类变量(静态变量)分配内存,并设置默认初始值。(不包括实例对象)

解析:将类、接口、字段和方法的符号引用解析为直接引用。

初始化阶段:初始化阶段是类加载过程中的最后一个阶段;执行<clinit>方法,Java虚拟机会按照程序员的要求执行类的初始化操作,例如执行静态变量的赋值操作、执行静态代码块等。

使用阶段:当类成功加载并初始化后,就可以在程序中使用该类,创建对象实例、调用方法等。

卸载阶段:如果一个类不再被引用,该类的对象和类加载器实例被垃圾回收,那么这个类可能会被卸载,释放内存空间。

类的生命周期包括了加载、连接、初始化、使用和卸载等阶段,这些阶段都是类在程序运行过程中所经历的重要阶段。

类加载器

将类的字节码文件加载到内存中,并生成对应的Class对象。类加载器通常负责从文件系统、网络或其他来源加载类的字节码,并将其转换为可执行的Java类。

类加载器分为哪些呢?

启动类加载器(Bootstrap Class Loader):加载核心类库,java_home/lib或-Xbootclasspath指定路径存放的类库,比如:java.io,java.util等;扩展类加载器(Extension Class Loader):加载java_home/lib/ext目录下或java.ext.dirs指定路径的类库,比如:JDBC,Java Image I/O API;应用程序类加载器(Application Class Loader):加载用户类路径的类库

什么是双亲委派机制?

类加载器收到类加载请求后,不会自己去尝试加载,而是交给父类加载器进行加载,因此最后类加载的请求会转送至启动类加载器。当父类加载器加载不了的时候,才会交给子类加载器进行加载。其优点在于避免类的重复加载;避免Java核心类被破坏;

如何破坏双亲委派机制

重写loadclass()方法

摘自:《深入理解Java虚拟机》第三版 周志明著

        

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

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

相关文章

2023年郑州轻工业大学软件学院数据结构实验五-查找与排序(详解+源码C语言版+运行结果)

实验要求 一、实验目的 1&#xff0e;掌握常用的查找和排序算法思想&#xff1b; 2&#xff0e;能够用所学过的查找和排序算法解决生活中的实际应用问题。 二、课程目标 支撑课程目标&#xff08;4&#xff09;&#xff1a;能够在软件开发过程中&#xff0c;针对特定需求综…

Nginx 代理静态资源,解决跨域问题

&#x1f602; 背景&#xff1a;移动端 H5 项目&#xff0c;依赖了一个外部的 JS 文件。访问时&#xff0c;出现跨域&#xff0c;导致请求被 block。 当前域名&#xff1a;https://tmcopss.test.com要访问的 JS 文件&#xff1a;https://tm.test.com/public/scripts/y-jssdk.j…

漏洞复现-海康威视网络对讲广播系统远程命令执行漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

基于Java (spring-boot)的在线培训考试系统

一、项目介绍 在线培训系统是一款基于SpringBootVue开发的考试系统。一款多角色在线培训考试系统&#xff0c;系统集成了用户管理、角色管理、部门管理、题库管理、试题管理、试题导入导出、考试管理、在线考试、错题训练等功能&#xff0c;考试流程完善。 多角色&#xff1a;多…

SQL基础知识(一)

SQL 是一种非常常见的用于管理关系型数据库的语言。下面是一些最常见的 SQL 语句&#xff1a; SELECT: 用于从数据库中选择数据。 例子: SELECT column1, column2 FROM table_name;这将选择 table_name 中的 column1 和 column2。 如果你想选择所有列&#xff0c;可以使用 …

基于蝴蝶算法优化的Elman神经网络数据预测 - 附代码

基于蝴蝶算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于蝴蝶算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于蝴蝶优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针…

【DOCKER】详细介绍以及如何创建管理DOCKER

介绍 Docker 什么是 Docker&#xff1f;简要介绍 Docker 的定义和基本概念。Docker 的优势和应用场景。为什么 Docker 在软件开发和部署中如此受欢迎&#xff1f; Docker 的核心概念 Docker 镜像&#xff1a;什么是 Docker 镜像&#xff1f;如何创建和管理 Docker 镜像&#xf…

100天精通Python(实用脚本篇)——第111天:批量将PDF转Word文档(附上脚本代码)

文章目录 专栏导读1. 将PDF转Word文档需求2. 模块安装3. 模块介绍4. 注意事项5. 完整代码实现6. 运行结果书籍推荐 专栏导读 &#x1f525;&#x1f525;本文已收录于《100天精通Python从入门到就业》&#xff1a;本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整教…

前端Vue日常工作中--Vue路由相关

前端Vue日常工作中–Vue路由相关 文章目录 前端Vue日常工作中--Vue路由相关1.路由模式2.router和$route3.路由跳转4.路由守卫5.路由传参6.问题&#xff1a;Vue路由解决页面刷新参数丢失的问题 1.路由模式 Vue 路由模式主要有两种&#xff1a;哈希模式&#xff08;Hash Mode&am…

GRU算法

前置知识&#xff1a;RNN&#xff0c;LSTM LSTM需要训练的参数很多&#xff0c;极消耗计算资源。GRU是一种LSTM的改进算法&#xff0c;参数更少&#xff0c;更容易训练。 它将忘记门和输入门合并成为一个单一的更新门&#xff0c;同时合并了数据单元状态和隐藏状态&#xff0…

CSS 缩减顶部动画

<template><!-- mouseenter"startAnimation" 表示在鼠标进入元素时触发 startAnimation 方法。mouseleave"stopAnimation" 表示在鼠标离开元素时触发 stopAnimation 方法。 --><!-- 容器元素 --><div class"container" mou…

c++ 变量详细解释

C 变量&#xff1a;详细解释 1. 变量声明和初始化 声明&#xff1a;告诉编译器变量的类型和名称。int number;初始化&#xff1a;为变量指定一个初始值。int number 10; // 声明并初始化2. 变量类型 基本类型&#xff1a;包括整数&#xff08;int, short, long&#xff09…

MATLAB指令

01--根据数学公式进行绘制 1.绘制连续函数 ①一元函数 t0:0.1:10; y3*t2; plot(t,y) ②一元二次函数 t0:0.1:10; yt.*t; plot(t,y) 注意此处应为点乘 ③一元3次 t0:0.1:10; yt.*t.*t; plot(t,y) ④y1/t t0:0.1:10; y1./t; plot(t,y) ⑤yexp(t) t0:0.1:10; yexp(2*t); p…

计算机基础面试题 |03.精选计算机基础面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

Python爬虫---selenium基本使用

为什么使用selenium&#xff1f; 使用urllib.request.urlopen()模拟浏览器有时候获取不到数据,所以使用selenium (1) selenium是一个用于web应用程序测试的工具 (2) selenium 测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样 (3) 支持通过各种driver (FirfoxDri…

封装、继承、多态、重载:C++中的强大特性与代码设计

这里写目录标题 封装C语言封装风格C封装 继承多态多态的实现虚函数概念&#xff1a;虚表指针overloadoverwriteoverride抽象类 重载 封装 C中的封装是一种面向对象编程的概念&#xff0c;它将数据&#xff08;成员变量&#xff09;和操作&#xff08;成员函数&#xff09;封装…

23种设计模式Python版

目录 创建型模式简单工厂模式工厂方法模式抽象工厂模式单例模式原型模式建造者模式 结构型模式适配器模式桥接模式组合模式装饰器模式外观模式享元模式代理模式 行为型模式职责链模式命令模式解释器模式迭代器模式中介者模式备忘录模式观察者模式状态模式策略模式模板方法模式访…

改进YOLO系列 | YOLOv5/v7 更换主干网络之 ResNet50/ResNet101

论文地址:https://arxiv.org/abs/1512.03385v1 更深层的神经网络更难以训练。我们提出了一个残差学习框架,以便于训练比以往使用的网络更深层的网络。我们明确地将层重构为学习相对于层输入的残差函数,而不是学习无参考的函数。我们提供了全面的实证证据,表明这些残差网络…

接口测试工具Postman接口测试图文教程

一、前言 在前后端分离开发时&#xff0c;后端工作人员完成系统接口开发后&#xff0c;需要与前端人员对接&#xff0c;测试调试接口&#xff0c;验证接口的正确性可用性。而这要求前端开发进度和后端进度保持基本一致&#xff0c;任何一方的进度跟不上&#xff0c;都无法及时完…

APP UI自动化测试常见面试题,或许有用呢~

1.Android APP 内存不足时&#xff0c;如何获得内存&#xff1f; 系统优先结束被挂起&#xff08;暂停&#xff09;的进程&#xff0c;释放内存。 2.APP 测试常见问题有哪些&#xff1f;原因有哪些&#xff1f; 常见的有 crash、ANR&#xff08;应用无响应、卡死&#xff09…