你怎么知道机器的堆栈是否在内存中增长或减少? (JAVA)

我有一个C程序来检查机器堆栈是否在内存中增长或减少。

它是这样的:

#include  void sub(int *a) { int b; if (&b > a) { printf("Stack grows up."); } else { printf("Stack grows down."); } } main () { int a; sub(&a); } 

现在我想在Java中做同样的事情。 🙂

没有写任何本机代码,任何人都知道一个解决方案

谢谢

如果您没有使用任何本机代码,那么我无法想象在纯Java代码中它可能重要的情况。 毕竟,Java堆栈可能在任何方向上分配,而不是严格连续的内存块(如机器堆栈)。

Java源代码编译为Java字节代码,这是一种在JVM上运行的类似汇编的语言。 JVM是一个虚拟机,因此在使用堆栈和堆栈的机器上,它看起来完全相同。

因此,无法知道特定机器堆栈是否从Java代码增长或减少。

这不能在Java代码中完成。 它也不能用C代码完成。 您发布的代码调用未定义的行为(&b > a) 。 根据标准,除非指针指向同一数组中的元素,否则比较两个指针的结果是未定义的。 该标准没有说明堆栈增长的方向或堆栈是否存在。

哇,你将无法从Java中的这些简单代码中获取任何有用的信息,至少不是我所知道的。

你所拥有的代码做了很多假设,即使在C中实际上也可能是也可能不是。 它取决于运行程序的平台和操作系统。

在Java中,您将完全依赖于JVM的寻址实现,因此无法做到这一点。

我的第一个答案是使用分析器。 您还可以使用提供的API(JVMTI)为此创建自己的性能分析代理。 它肯定比你的方法复杂得多,但你应该能够得到你需要的东西。

IBM的这个页面也可以提供帮助。

这几乎就是我在这个问题上的全部内容,我希望它会对你有所帮助