我有一个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中做同样的事情。 : - )
任何人都知道解决方案而不写任何本机代码???
由于
答案 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也可以提供帮助。
这几乎就是我对这个主题的全部内容,我希望它会对你有所帮助