参考1(这个相对完整,可以直接进去看详细),本文主要基于这篇文章进行个人的理解。
目录
前言
首先需要知道JVM是一个虚拟机。而虚拟机呢,可以安装操作系统,然后通过操作系统的指令和底层硬件打交道。
JVM是Java Virtual Machine(Java虚拟机)的缩写。既然是虚拟机,则需要建立在操作系统之上。JVM有很多种,目前被运用最广泛的为HOTSPOT,本文以HOTSPOT虚拟机来讲,所以接下来的JVM均为HOTSPOT。
以下是JVM的框架和一般的运行流程(字丑,略过):
1、一段代码如何通过JVM在一台计算机上执行
一段程序涉及的无非这几个部分:
- 主函数;
- 成员变量:静态、其他;
- 成员函数:静态、其他;
- 可能还涉及其他类的对象及其方法。
针对这几部分,JVM都在相应的步骤进行处理。以下为一段java程序在JVM中的运行顺序:
- 1. 分配执行入口。加载主方法的class文件Main.class进入方法区,为static main()分配执行入口(即内存空间)。
- 2. 主方法入栈。发现static main()是主方法,则主方法加载入栈。
- 3. 处理类文件、静态变量、静态方法。加载一般类文件A.class进入方法区,给有static修饰的静态变量分配内存空间,给static修饰的静态方法分配执行入口(即地址)。
- 4. 处理对象。在堆中实例化对象A,并初始化A的属性信息(如果A是子类此时不会初始化父类对象),A的第一个对象实例化完成后,给A的所有成员方法分配执行入口。
- 5. 处理对象的方法。将实例化对象引用的成员方法加载入栈运行,完毕后出栈。
- 6. 主方法static main()出栈。程序执行完毕。
注意:
- 静态成员属性、方法:在实例化对象之前就分配了内存空间(该类class文件加载进入方法区后进行);
- 一般成员方法和属性:在实例化第一个对象时分配内存空间。
以下是参考网上的资料画出的程序运行的大致流程图(字丑,纯粹为了自己理解,画了一下):
如果有不正确的地方,恳请交流指正。