当前位置: 首页 > news >正文

Java类加载过程

一、前言

我们都知道计算机的底层逻辑都是0和1的编码,当然除了现在所研究的量子计算除外。那么我们在计算机所做的一切操作,底层原理是不是都可以翻译到0和1呢。如果刨根问底的话,可以这么说,当然0和1的表示也属于逻辑门电路电的状态。大规模集成电路就是用来存储逻辑门电路的。那么一个Java的对象在计算机中是怎么存在的。我们通过一个java对象深入了解程序在计算机上的运行逻辑。

二、JAVA对象

JAVA作为高级编程语言,非常接近自然语言。比如声明一个对象 String s = new String();

s 为对象的引用,new String() 为声明对象。

比如我们编写如下代码:

public class Test {public static void main(String[] args) {String s = new String();System.out.println(s.getClass());System.out.println(s.getBytes());System.out.println(s.length());System.out.println(s.hashCode());System.out.println(new String());}}

编译成class文件

漱壕   4 3!  "  # <init> ()V Code LineNumberTable main ([Ljava/lang/String;)V 
SourceFile 	Test.java   java/lang/String  $ % & ' (  ) * + , - . / * 0 1 / * 2 Test java/lang/Object java/lang/System out Ljava/io/PrintStream; getClass ()Ljava/lang/Class; java/io/PrintStream  println (Ljava/lang/Object;)V getBytes ()[B length ()I (I)V hashCode (Ljava/lang/String;)V !  *? ?            	       n     >? Y? L? +? ? ? +?  ? ? +? ? 	? +? 
? 	? ? Y? ? 
?                    &  0 	 = 

运行class文件输出

C:\Users\lenovo\Desktop\test>java  Test
class java.lang.String
[B@15db9742
0
0

C:\Users\lenovo\Desktop\test>java  Test
class java.lang.String
[B@15db9742
0
0

 那么编译到class文件到执行class是一个怎样的过程。这里就要说到java虚拟机。

三、java虚拟机

类的加载过程

1.1 加载

Java的类加载器会根据类的全限定名来加载类,当需要使用某个类时,如果该类还未被加载进内存,则需要执行一下步骤进行加载:

1.1.1. 通过类的全限定名找到对应的class文件,这里的class文件可以是.java文件经过编译之后生成的.class文件,也可以是通过其他方式生成的.class文件。

1.1.2 将class文件中的二进制数据读取到内存中,并将其转换为方法区的运行时数据结构。

1.1.3 创建由该类所属的java.lang.Class对象。该对象可以理解为,是对类的各种数据(如名称、访问修饰符、方法、成员变量等)的封装。

在加载类时,类加载器除了加载某个具体的类外,还需要将这个类所依赖的类也加入到内存中。这种依赖性是多层级的,也就是说,被依赖的类又可能会去依赖其他类,所以在加载一个类时,通常需要将其类图中所有的类都加载进来。

相关文章:

Java类加载过程

一、前言 我们都知道计算机的底层逻辑都是0和1的编码&#xff0c;当然除了现在所研究的量子计算除外。那么我们在计算机所做的一切操作&#xff0c;底层原理是不是都可以翻译到0和1呢。如果刨根问底的话&#xff0c;可以这么说&#xff0c;当然0和1的表示也属于逻辑门电路电的…...

人脸活体检测技术的应用,有效避免人脸识别容易被攻击的缺陷

随着软件算法和物理终端的进步&#xff0c;人脸识别现在越来越被广泛运用到生活的方方面面&#xff0c;已经成为了重要的身份验证手段&#xff0c;但同时也存在着自身的缺陷&#xff0c;目前常规人脸识别技术可以精准识别目标人像特征&#xff0c;并迅速返回比对结果&#xff0…...

大数据发展史

一、hadoop发展史 hadoop创始人Doug Cutting&#xff0c;主要为了实现Google类似全文搜索功能,该功能是基于Lucene框架进行优化升级,索引引擎; 2001年底Lucence成为Apache基金会的一个子项目,当时为了解决存储海量数据困难,检索海量速度慢,可以说Google是hadoop的思想之源; GFS…...

有关范数的学习笔记

向量的【范数】&#xff1a;模长的推广&#xff0c;柯西不等式_哔哩哔哩_bilibili 模长 范数 这里UP主给了说明 点赞 范数理解&#xff08;0范数&#xff0c;1范数&#xff0c;2范数&#xff09;_一阶范数-CSDN博客 出租车/曼哈顿范数 det()行列式 正定矩阵&#xff08;Posit…...

如何通过MES系统提高生产计划效率?

导 读 ( 文/ 1730 ) 在现代制造业中&#xff0c;通过制造执行系统&#xff08;MES&#xff09;系统来提高生产计划效率是至关重要的。本文将介绍如何通过MES系统来优化生产计划&#xff0c;包括实时数据分析、智能排程和协同协作。通过这些关键方法&#xff0c;企业可以提高生产…...

持续提升信息安全运维保障服务能力,天玑科技助力企业快速实现数字化转型

近年来&#xff0c;以互联网、云计算、大数据、物联网为代表的新一代信息技术快速发展。给人们的生产生活方式带来方便的同时&#xff0c;也给信息系统的安全带来了严峻的挑战。我国信息化和信息安全保障工作的不断深入推进&#xff0c;以应急处理、风险评估、灾难恢复、系统测…...

【PostgreSQL启动,停止命令(重启)】

找到 /usr/lib/systemd/system文件夹路径看是否包含 postgresql服务 关闭服务&#xff1a; systemctl stop postgresql-12.service启动服务 systemctl start postgresql-12.service重启服务 systemctl restart postgresql-12查看状态 systemctl status postgresql-12.servi…...

TLS 详解

目录 TLS 定义HTTPS HTTP over TLS.加密记录层分片 (Fragmentation)记录压缩和解压缩 (Record compression and decompression)空或标准流加密 (Null or standard stream cipher)CBC 块加密 (分组加密)记录有效载荷保护 (Record payload protection)密钥计算 (Key calculation…...

【重拾C语言】十、递归程序设计

目录 前言 十、递归程序设计 10.1 计算n&#xff01;——递归程序设计 10.2 程序设计实例 10.2.1 汉诺塔 10.2.2 齿轮 10.2.3 组合 10.3 计算算术表达式的值——间接递归 10.4 递归程序执行过程 前言 递归程序设计是一种编程技术&#xff0c;其中一个函数通过调用自身…...

SQL日期字段去时分秒

substring( convert(varchar,[申请日期],120),1,10) AS 申请日期 运行结果对比展示 申请日期申请日期2022-12-24 00:00:00.0002022-12-24 说明&#xff1a; substring(...): 这是SQL中用于提取字符串一部分的函数。 convert(varchar, 申请日期, 120): 这部分将日期值&#…...

NLP项目:维基百科文章爬虫和分类【02】 - 语料库转换管道

一、说明 我的NLP项目在维基百科条目上下载、处理和应用机器学习算法。相关上一篇文章中&#xff0c;展示了项目大纲&#xff0c;并建立了它的基础。首先&#xff0c;一个 Wikipedia 爬网程序对象&#xff0c;它按名称搜索文章&#xff0c;提取标题、类别、内容和相关页面&…...

如何在Ubuntu 20.04.6 LTS系统上运行Playwright自动化测试

写在前面 这里以 Ubuntu 20.04.6 LTS为例。示例代码&#xff1a;自动化测试代码。 如果过程中遇到其他非文本中提到的错误&#xff0c;可以使用搜索引擎搜索错误&#xff0c;找出解决方案&#xff0c;再逐步往下进行。 一、 环境准备 1.1 安装python3 1.1.1 使用APT安装Py…...

c++ sort函数cmp比较参数传入

开始 假定有一个结构体 struct node{int p,r,val; };第一种 定义cmp函数&#xff0c;sort直接传入cmp bool cmp(node a,node b){return a.p<b.p;} sort(vec.begin(),vec.end(),cmp);第二种 lamada表达式&#xff1f;&#xff1f;这个中括号里面可以不为空&#xff0c;但是…...

【计算机网络笔记】什么是计算机网络?

前言计算机网络的定义交换网络什么是Internet从组成细节角度看从服务角度看 最后感谢 &#x1f496; 本篇文章总字数&#xff1a;1342字 预计阅读时间&#xff1a;5~10min 建议收藏之后慢慢阅读 前言 计算机网络通信技术计算机技术。 计算机网络是通信技术与计算机技术紧密结…...

极简C++(2) 类与对象

类与对象的基本概念 CLASS类将数据以及数据上的操作封装在一起 OBJECT对象是有具体类类型的变量 打个比方&#xff0c;类就像一个制作月饼的摸具&#xff0c;那么我们可以通过这个摸具来放入面粉和馅料编程一个月饼&#xff0c;那么摸具就是类&#xff0c;而各种各样的月饼便是…...

【Java 进阶篇】JavaScript流程控制语句详解

JavaScript是一门高级编程语言&#xff0c;具备丰富的流程控制语句&#xff0c;用于控制程序的执行流程。在本篇博客中&#xff0c;我们将深入探讨JavaScript的流程控制语句&#xff0c;包括条件语句、循环语句、以及其他一些控制语句。这篇博客将逐步介绍这些概念&#xff0c;…...

【Page-level Heap Fengshui -- Cross-Cache Overflow】corCTF2022-cache-of-castaways

前言 什么叫 Cross Cache 呢&#xff1f;其实就是字面意思&#xff0c;我们知道内核中的大部分结构体都有自己的专属 slab 内存池。那现在我们可以想象一下这个场景&#xff0c;我们拥有一个特定 kmem-cache 的溢出漏洞&#xff0c;那么我们该如何利用呢&#xff1f; 程序分析…...

vue-mixin

1.vue中&#xff0c;混入(mixin)是一种特殊的使用方式。一个混入对象可以包含任意的组件配置选项(data, props, components, watch,computed…)可以根据需求"封装"一些可复用的单元&#xff0c;并在使用时根据一定的策略合并到组件的选项中&#xff0c;使用时和组件自…...

力扣刷题 day43:10-13

1.完全平方数 给你一个整数 n &#xff0c;返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数&#xff0c;其值等于另一个整数的平方&#xff1b;换句话说&#xff0c;其值等于一个整数自乘的积。例如&#xff0c;1、4、9 和 16 都是完全平方数&#xff0c;而 3 …...

3、在docker 容器中安装tomcat

&#xff11;、在服务器上查找tomcat镜像,查看前5条 docker search tomcat --limit 5​​​​​​​ 2、拉取镜像到本地 拉取官方的tomcat到本地 docker pull tomcat:9.0.34-jdk8 3、查看本地镜像 docker images |grep tomcat 4、启动tomcat 服务 使用默认配置 docker ru…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...