从代码执行的角度理解JVM -- 各个部件及其之间的协作

31 篇文章 2 订阅
9 篇文章 0 订阅

参考1(这个相对完整,可以直接进去看详细),本文主要基于这篇文章进行个人的理解。

目录

前言:

1、一段代码如何通过JVM在一台计算机上执行


前言

首先需要知道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文件加载进入方法区后进行);
  • 一般成员方法和属性:在实例化第一个对象时分配内存空间。

 

以下是参考网上的资料画出的程序运行的大致流程图(字丑,纯粹为了自己理解,画了一下):

 

 

如果有不正确的地方,恳请交流指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值