欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

hello world 执行原理

程序员文章站 2022-05-08 18:12:25
① 使用 javac 对 HelloWorld.java 源文件进行编译为 HelloWorld.class 字节码文件。( jdk 开发工具箱中包含 javac 编译工具和 jre 运行时环境) ② 类的加载阶段,加载至JVM内存中,Main方法就是程序的入口,然后由JVM虚拟机来解释执行,在一些 ......
1 public class helloworld {
2     public static void main(string[] args)
3     {    
4             string  s ;
5               s = “hello world!”;  //定义字符串s
6           system.out.println(s); 
7     }
8 }
↑↑↑是一个简单的java程序 helloworld 
java代码编译是由java源码编译器来完成,流程图如下所示:

hello world 执行原理

java字节码的执行是由jvm执行引擎来完成,流程图如下所示:

hello world 执行原理

程序执行分析如下: 

①  使用 javac  对 helloworld.java 源文件进行编译为 helloworld.class 字节码文件。( jdk 开发工具箱中包含 javac 编译工具和 jre 运行时环境)

 ②  类的加载阶段,加载至jvm内存中,main方法就是程序的入口,然后由jvm虚拟机来解释执行,在一些虚拟机的实现中,还会被jvm利用字节码解释器特定系统的机器码执行,从而提高执行效率。

hello world 执行原理

  java语言里负责解释执行字节码文件的是java虚拟机,既 jvm(java virtual machine)。(jvm是可运行java字节码文件的虚拟计算机)

 ③  虚拟机通过类找到helloworld的主方法(程序的入口方法),访问权限为public(公有可用),虚拟机传递string[](字符串数组对象:空数组)类型参数的地址到主方法的args中去,并在栈区为args开辟内存空间,返回一个void的返回值;

  jvm 将内存区域划分为 method area(non-heap)(方法区) ,heap(堆) , program counter register(程序计数器) ,   vm stack(虚拟机栈,也有翻译成java 方法栈的),native method stack  ( 本地方法栈 ),其中method area 和  heap 是线程共享的  ,vm stack,native method stack  和program counter register  是非线程共享的。

hello world 执行原理

 jvm 内存中线程是否共享示意图:

hello world 执行原理

④  定义一个string(标准类库中的)类型的变量(在栈区开辟空间)s,s的值不确定(垃圾值,编译无法通过);

 ⑤  s = “hello world!”,对象“hello world!”在方法区的常量数据区开辟空间,属性即为:hello world!,方法即为:tostring(),变量s存放对象“hello world!”的地址;

 ⑥  虚拟机找到标准类库中的system.class类并加载到内存中(即方法区的类代码区中),system.out为标准字节输出流对象(),并调用println()方法将变量s的值打印到屏幕上。

 

ps: 虚拟机调用主方法时会创建三个默认对象:system.out(标准字节输出流对象)、system.in(标准字节输入流对象)和system.error(标准字节出错流对象).

以上共涉及:

1个java文件:helloworld.java

4个class类: helloworld.class、string[].class、string.class、system.class

5个对象: “hello world!”、string[]、system.out、system.in、system.error

2个变量:args、s

3个方法:main()、tostring()、println()