Java程序的运行过程是什么
本篇内容主要讲解“Java程序的运行过程是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java程序的运行过程是什么”吧!
Java程序运行过程
运行一个Java程序的步骤
编辑源代码xxx.java
编译xxx.java文件生成字节码文件xxx.class
JVM中的类加载器加载字节码文件
JVM中的执行引擎找到入口方法main(),执行其中的方法
一、从源码到字节码
从我们写的java文件到通过编译器编译成java字节码文件(也就是.class文件),这个过程是java编译过程;
字节码文件:真正实现了java语言的跨平台。各种不同平台的虚拟机都统一使用这种相同的程序存储格式。
更进一步说,jvm运行的是class字节码文件,只要是这种格式的文件就行,所以,实际上jvm并不像我之前想象地那样与java语言紧紧地捆绑在一起。
把一个简单的HelloWorld程序生成的字节码文件重定向为txt文件:
javap -v HelloWorld > HelloWorld.class.txt,部分信息如下
一份字节码文件包含了魔数与 Class 文件的版本,常量池,访问标志等等信息,总之,字节码文件很简单很强大,它存放了这个类的各种信息:字段、方法、父类、实现的接口等各种信息。
二、JVM虚拟机运行时数据区
Java虚拟机要运行字节码指令,就要先加载字节码文件,谁来加载,怎么加载,加载到哪里……谁来运行,怎么运行呢?
JVM在执行Java程序的过程中会把它所管理的内存分为若干个不同的区域,这些区域都有各自的用途。
程序计数器:可以看作是当前线程所执行的字节码的行号指示器(指示当前线程,所以是线程私有的),字节码解释器工作时需要通过改变这个程序计数器的值来选取下一条所需要执行的字节码指令,循环、跳转、异常处理、线程恢复等基础功能都要依赖它来完成。
JVM栈:描述的是Java方法执行的内存模型:每个方法在执行时都会创建一个栈帧,用于存储局部变量表,操作数栈,动态链接和方法出口等信息。每一个方法从调用直到执行完成的过程,就对应一个栈帧从虚拟机栈中入栈到出栈的过程。
本地方法栈:虚拟机栈执行的是Java方法(也就是字节码)服务,而本地方法栈则为虚拟机所使用到的Native方法服务。
堆:是被所有线程共享的一块区域,在虚拟机创建是创建,此内存的唯一目的是存放对象实例,它也是垃圾收集器管理的主要区域。
方法区:也是所有线程共享的一块区域,用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
方法区中有运行时常量池。
总结:JVM的功能模块主要包括类加载器、执行引擎和垃圾回收系统。
三、类加载器加载xxx.class到内存
虚拟机把描述类的数据从字节码文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。
四、虚拟机字节码执行引擎
执行引擎找到main()这个入口方法,执行其中的字节码指令。
执行引擎处理过程:输入字节码文件,进行字节码解析的等效过程,输出执行结果。
到此,相信大家对“Java程序的运行过程是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341