JVM?干就完了!(一) - hello world

本文从简单的HelloWorld程序入手,介绍了Java程序的执行流程,包括从源代码到字节码的编译过程,以及JVM如何加载和执行类。详细解释了类加载的四个阶段:验证、准备、解析和初始化,并阐述了双亲委派机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、HelloWorld

小七作为一个半路出家的程序员,以前对JVM根本不敢有非分之想,但是癞蛤蟆只要坚持也会有吃到天鹅肉的那一天,所以小七从今天开始准备系统学习,并且记录下JVM相关知识。一句话:JVM?干就完了!

回想起和JVM见面的那一天,小七和JVM说得第一句话就是“hello world”。所以,咱们先准备一个HelloWorld.java的文件。

图片

内容如下:

class HelloWorld {
    public static void main(String[] args) {
        System.out.println("hello world");
    }
}

打开终端 执行命令:

图片

会发现目录下多了个HelloWorld.class文件

然后继续执行命令

图片

输出结果

图片

总结起来,程序的运行步骤如下:

1、首先把“.java”代码文件编译成“.class”字节码文件;

2、然后类加载器把“.class”字节码文件中的类给加载到JVM中 ;

3、接着是JVM执行类中的代码。

流程图为:

图片

2、类的加载

三个步骤

提到类的加载,就离不开一个问题——JVM什么情况下会加载一个类呢?答案是使用这个类的时候。那什么时候会使用到这个类呢?一个是程序的入口main函数,一个是实例化这个对象的时候。从下面这一段代码,我们分析一下这个过程:

public class Test {
    public static void main(String[] args){
        UpDownloaderFactory factory = new UpDownloaderFactory();
    }
}

(1)JVM进程启动之后,会加载Test.class到内存里;

(2)如果有“main()”方法,则从此入口开始执行程序;

(3)执行程序时,发现需要使用UpDownloaderFactory去实例化对象,所以得把UpDownloaderFactory.class加载到内存里面来。

四个环节

类的加载大概就是这样一个情况,当然在进行加载的过程中,我们有4个概念需要大概了解下。

(1)验证

这个环节主要是确定JVM加载的.class文件是符合规范的,就好比男人去男厕所,女人去女厕所,符合JVM规范的才能进入到JVM。

(2)准备

这个环节主要是给类以及类变量分配内存空间。

(3)解析

这个环节主要是把符号引用替换为直接引用。

(4)初始化

这个环节主要主要做的是赋值。

注:针对初始化有一个重要的规则,就是如果初始化一个类的时候,发现他的父类还没初始化,那么必须先初始化他的父类。

以上总结为一张图如下:

图片

双亲委派机制

所谓的双亲委派机制,就像儿子和爸爸一样。儿子遇事,先让爸爸去解决,爸爸解决不了,就又交给儿子去解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

第七人格

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值