为什么样下面的操作会导致Java虚拟机崩溃呢?如何看待阿里在JVMLS介绍的JVM三个方面的创新:多租户、协程和预热

发表时间:2018-01-07 17:00:02 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《什么样相机滤镜好看?有没有单反相机使用教程》相关知识。本篇中小编将再为您讲解标题为什么样下面的操作会导致Java虚拟机崩溃呢?如何看待阿里在JVMLS介绍的JVM三个方面的创新:多租户、协程和预热。

咱们抛开Java不说,从函数调用的角度来说说其中①种可能会导致崩溃的原因。

程序运行时,CPU读入程序机器命令并执行。程序运行中的各种变量被保存在寄存器中。

①个CPU有为数不多的寄存器(大概是⑧-①⑥个,记不清了)。以X⑧⑥架构为例,约定每个寄存器分别存储不同类型的数据:有的寄存器存储机器指令,有的存储函数栈指针,有的寄存器存储调用函数的返回位置。

比如以下程序:

void foo(){ bar(); // do foo}void bar(){ // do something}

这里要提①下函数栈(function stack)。 每个函数在执行自己代码的时候是有自己的栈帧的(stack frame)。当它调用另①个函数时,程序会创建①个新的栈帧并\"push\"到程序栈的栈顶。比如foo 执行时有自己的栈帧,当调用bar时,操作系统会给bar创建①个栈帧并push到函数栈中。当bar执行完毕,bar的栈帧被pop出栈,函数栈的栈顶又变成了foo的栈帧。

程序栈是存在在①个连续的数组上的。入栈和出栈操作都是指针的移动。指针就是CPU的寄存器:有①个叫做ebp, 它指向当前栈的起始位置。还有①个esp,它指向栈顶地址。

以X⑧⑥为例,大部分函数栈是向下生长的,所以esp和ebp 的地址随着栈越来越深而逐渐变小。

程序运行之前编译器会将程序翻译成机器代码,大概长这样:

内存地址 机器命令⓪x①②③④⑤⑥⑦⑧ call ⓪x⑧⑦⑥⑤④③②①

编后语:关于《为什么样下面的操作会导致Java虚拟机崩溃呢?如何看待阿里在JVMLS介绍的JVM三个方面的创新:多租户、协程和预热》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《在淘宝买到了次品之后我能给差评么?有没有哪位朋友在淘宝网上保修过电脑组机配件》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题