栈中只保存reference和基本变量的,其他的都在堆里,

解决方案 »

  1.   

    能够具体说说操作的步骤吗?
    比如 对象X实例化->在堆中放入X实例的引用,然后再在堆中分配空间给该实例,该实例中的方法A,B的代码部分是在 代码区?或者其他地方? 当调用X.A的时候,又是如何再堆栈中切换的?谢谢了!
      

  2.   

    能够具体说说操作的步骤吗?
    比如 对象X实例化->在堆中放入X实例的引用,然后再在堆中分配空间给该实例,该实例中的方法A,B的代码部分是在 代码区?或者其他地方? 当调用X.A的时候,又是如何再堆栈中切换的?谢谢了!
      

  3.   

    我看了vaminal和0xCafeBabe的回复 我这样理解对不对啊?
    对象实例先调用方法A(X.A),在当前线程的方法调用栈中分配一个新的栈帧,此时将A的地址、参数、局部变量...放入堆栈寄存器里面,当方法A调用方法B时,保存方法A中调用B的现场消息,push(A).就进入了方法B的入口地址了,push(B).直到方法B被调用完成返回后,pop(B),接着恢复现场。接着完成方法A。方法A完成后同样pop(A),完成整个过程.另外 to 0xCafeBabe:栈帧,操作数栈的概念是什么啊?
      

  4.   

    哦 刚看了一下:
    每个帧都包含变量数组,也就是我们所熟知的局部变量数组。每个帧都包含一个后进先出的堆栈,也就是它的操作数堆栈。操作数堆栈在刚刚被创建的时候是空的,JVM提供指令从局部变量或者成员加载常量或者值到堆栈,其它的JVM指令从操作数堆栈提取操作数,操作它们并将结果放回操作数堆栈。操作数堆栈也用于准备传递给方法的参数以及接收方法的结果。弱弱的问一下 这些都是在我们说C语言的堆中 进行的么? 栈贞是不是JVM在C语言中的堆中模拟的栈啊?如果是的话,又有哪些是在C语言的栈中的呢?谢谢:)
      

  5.   

    >弱弱的问一下 这些都是在我们说C语言的堆中 进行的么? 栈贞是不是JVM在C语言中的堆中模拟的栈啊?<
    可能是这样的吧
    据我所知,栈桢也是在java堆中分配