堆栈指针混乱

时间:2012-07-29 09:38:12

标签: java stack

我正在研究java堆栈,我只是对这个特定场景中的指针感到好奇。

当我们将一个对象或一个节点推到我们的堆栈上时,这一点在哪里:

  • 在第一个节点的前面?
  • 在第一个节点的后面?

任何人都可以帮我这个或者给出一些描述堆栈推送和弹出堆栈节点的演示链接吗?并详细说明指针指向任何给定时间的位置。

3 个答案:

答案 0 :(得分:3)

这就是堆栈的工作原理:

你可以像这样将元素推入其中。新添加的元素总是“在顶部”,因为它是后进先出(LIFO)结构。您只能访问顶部元素:

Stack push

然后你可以弹出这些元素,但pop总是删除顶部元素,如下所示:

enter image description here

如果我误解了你的问题,请写评论,我会删除这篇文章!

答案 1 :(得分:1)

  

我正在研究java堆栈,我只是对这个指针感到好奇。

Java使用虚拟机。字节码需要在真机上运行。这意味着在虚拟意义上,当它使用堆栈来推送和弹出值时,它被编译为使用多个寄存器(例如8到16)的本机代码,并且具有有选择地使用的CPU堆栈(因为它是慢)

您可以成为一名经验丰富的Java开发人员,而不了解Java堆栈或虚拟工作方式或如何转换为本机代码。作为初学者,可能还有其他更有用的知识。 ;)

答案 2 :(得分:1)

不幸的是,这个问题无法用Java来解答。

Java虚拟机确实有概念堆栈 - 一个用于线程的本地帧,另一个用于评估表达式时的操作数。但是,这些是概念堆栈,可能会也可能不会使用本机代码“堆栈指针”来实现。当然,任何使用本机代码堆栈/堆栈指针的都是实现细节

如果您想了解本机堆栈/堆栈指针的工作原理,您最好阅读处理器体系结构,指令集和汇编语言编程。或者,Call Stacks上的维基百科页面给出了ISA中性描述它们的工作方式。