Java类加载过程

刺骨的言语ヽ痛彻心扉 2024-02-22 09:14 176阅读 0赞

一、前言

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

二、JAVA对象

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

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

比如我们编写如下代码:

  1. public class Test {
  2. public static void main(String[] args) {
  3. String s = new String();
  4. System.out.println(s.getClass());
  5. System.out.println(s.getBytes());
  6. System.out.println(s.length());
  7. System.out.println(s.hashCode());
  8. System.out.println(new String());
  9. }
  10. }

编译成class文件

  1. 漱壕 4 3
  2. ! " # <init> ()V Code LineNumberTable main ([Ljava/lang/String;)V
  3. 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 !
  4. *? ? n >? Y? L? +? ? ? +? ? ? +? ? ? +?
  5. ? ? ? Y? ?
  6. ? & 0 =

运行class文件输出

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

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

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

三、java虚拟机

b0e5a83a37f94e849865657145f16214.png

类的加载过程

1.1 加载

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

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

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

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

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

发表评论

表情:
评论列表 (有 0 条评论,176人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java过程

    目录 概述 类加载时机 类加载过程 加载 验证 文件格式验证 元数据验证 字节码校验 符号引用校验 准备 解析 初始化 类加载器 双亲委派模型

    相关 Java过程

    一、前言 我们都知道计算机的底层逻辑都是0和1的编码,当然除了现在所研究的量子计算除外。那么我们在计算机所做的一切操作,底层原理是不是都可以翻译到0和1呢。如果刨根问底的话,

    相关 Java 过程

    在Java中,类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成:装载、链接和初始化,其中链接又可以分成校验、准备、解析 装载:查找和导入类或接口的二进制数据;

    相关 Java过程

    类的加载简介 1.类加载一般分为三大阶段:加载、连接和初始化 ![类加载三个大阶段(图来自zejian\_)][zejian] 加载阶段:主要查找class文件(二

    相关 Java过程

    Java类加载过程 首先是加载过程(Loading),它是 Java 将字节码数据从不同的数据源读取到 JVM 中,并映射为 JVM 认可的数据结构(Class 对象),...