public class some_class
{
public static void som_func() {
var some_object = new SomeObject();
var ret = 0;
do
{
ret = some_object.DoSomething();
} while(ret != 1);
System.out.printf("Return value: %d", ret);
}
}
现在在C++中,如果我这样调用:
auto some_cls = g_env->FindClass("some_class");
auto some_func = g_env->GetStaticMethodID(some_cls, "som_func", "()V");
g_env->CallStaticVoidMethod(some_cls, some_func);
有什么方法可以访问那个吗 some_object
变量 var some_object = new SomeObject();
或者 ret
变量 var ret = 0;
通过jni或任何jvm内存访问技巧?
我想做一些类似的事情:
auto some_object_class = g_env->FindClass("SomeObject");
/*
and then some way this 'some_object_class' will be a reference to that local variable 'some_object'
* /
我想我是想知道如何访问jvm的堆内存?我听说jvm在堆上分配一个对象,而对该分配对象的引用存储在堆栈上,如果是这样,我可以访问该堆栈内存并检索引用吗?我很困惑,我想我不知道我到底在说什么。请引导我走正确的路。
1条答案
按热度按时间bvuwiixz1#
不行。请注意,您也不能从常规java方法访问这些局部变量。部分问题在于该方法不知道这些局部变量在哪里。它们可以在堆栈帧中分配,也可以在寄存器中分配。即使您实现了一些汇编代码来直接访问堆栈和寄存器,您也不知道应该在哪里查找,而且由于jvm代码编译的动态特性,位置可能会发生变化。