JVM之程序的程序运行过程

在调试JVM的过程中,多少需要了解点C语言的东西,多少又需要了解点汇编的知识,又多少需要了解点计算机底层的知识,真是学无止境。

1.过程

过程是软件中的一种很重要的抽象,提供了一种封装代码的方式(决定了程序的运行的方式),用一组指定的参数和一个可选的返回值实现了某种功能,然后,可以在程序中不同的地方调用这个函数。(说的太抽象了,有编程基础的就可以认为是方法调用过程)

但是编程语言有很多种,每种编程语言的运行过程又有什么差别呢?差别肯定是有,但是最终还是要机器支持不是,上面提到的过程就需要这样的机器级别的支持,要处理不同的属性等等。这里以C语言为例说明。

 

2.运行时栈

关于栈的结构这里不做过多赘述,满足后进先出(FILO)原则的一种数据结构,这里着重演示程序运行时与栈结合的运行过程。

C语言过程调用机制的一个关键特性(大多数其他语言也是如此)在于使用了栈数据结构提供的后进先出的内存管理原则。下面列举了一个调用过程(X86-64)的例子:

假设过程P调用过程Q,Q执行后返回到P。

过程描述如下:

在过程P调用过程Q后,当Q在执行时,P以及所有在向上追溯到P的调用过程链中的过程,都是被挂起的(白话就是当执行子方法的时候,调用方以及调用方的调用方都是在那等着的,是同步的,这也能理解一个同步调用的过程)。当Q运行时,它需要为局部变量分配新的存储空间;当Q返回时,任何它所分配的空间都可以被释放。

下面用一个图简单描述下这个过程,程序可以使用栈来管理它的过程所需要的存储空间,栈和程序寄存器存放着传递控制和数据、分配内存所需的信息。当P调用Q时,控制和数据信息添加到栈尾部,当P返回时,这些信息会被释放掉。

这里介绍的可能跟JVM没有关系,只是为了方便理解后面的东西。这里的介绍还是相对比较概念性的,关于运行过程中传递控制传递数据参见后面的文章。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值