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

时间:2009-07-22 08:58:47

标签: java c

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

就是这样:

#include <stdio .h>

void sub(int *a) {
 int b;

 if (&b > a) {
    printf("Stack grows up.");
 } else {
    printf("Stack grows down.");
 }
}

main () {
 int a;
 sub(&a);
}

现在我想在Java中做同样的事情。 : - )

任何人都知道解决方案而不写任何本机代码???

由于

4 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:6)

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

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

答案 2 :(得分:6)

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

答案 3 :(得分:2)

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

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

在Java中,您将完全依赖于JVM的寻址实现,因此无法实现此目的。

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

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

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