通过 HelloWorld 了解 Java 程序执行过程以及运行时内存

本文介绍了 Java 代码的运行过程,先调用 Java 编译命令,编译器根据源文件生成字节码文件,再通过 Java 命令执行生成的文件,系统加载字节码文件到方法区等。还提及了内存图、相关概念,如源文件、字节码文件、对象、变量和方法等。

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

public class HelloWorld {
	public static void main(String[] args) {
		String s;
		s = "HelloWorld";
		System.out.println(s);
	}
}
复制代码

运行过程

那么 Java 是如何执行这段代码的呢?

1.调用 Java 的编译命令

javac HelloWorld.java

  • Java 编译器首先找到源文件中的 public class ,再找根据 public class 找到源文件中的其他类,Java 编译器会根据每一个类生成一个字节码文件( JVM 可以读懂的文件类型)

2.通过 Java 命令执行刚才生成的 .class 文件

java HelloWorld

  • 系统找到文件中唯一的主类 public class
  • public static关键字找到跟主类关联可执行的 main 方法。
  • String [] args:系统会传递一个空的字符串数组给主方法。系统加载 String [].class 字节码文件到方法区,系统会为 args 变量在主线程的栈帧中开辟一块空间(存放 String [] 数据的地址)指向堆中存放的数据。
  • String s:系统加载 String.class 字节码文件到方法区,在主线程栈帧中为 s 变量开辟一块空间(存放数据的地址),此时 s 的值还没有确定(垃圾值,编译无法通过)。
  • s="HelloWorld" :字符串 "HelloWorld" 被存放到方法区的常量区中,并让 s 指向该地址。
  • System.out.println(s) :系统加载 System.class 字节码文件到方法区,并且系统会默认在堆区创建 System.outSystem.inSystem.err 三个对象。
  • 字符串在被输出时会自动调用 toString() 方法。

内存图:

3.得到输出结果

HelloWorld

相关概念

  • 1 个源文件:HelloWorld.java
  • 4 个字节码文件:HelloWorld.class、String[].class、String.class、System.class
  • 5 个对象:"HelloWorld"、String[]、System.out、System.in、System.err
  • 2 个变量:args、s
  • 3 个方法:main()、System.out.println()、toStting()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值