java - 一般问题 : Java has the heap and local stack. 你能访问堆中的任何对象吗?

标签 java jvm stack heap-memory

我真的在研究按值传递与 Java 如何分配对象以及 java 将对象放入堆栈的方式之间的差异。

有没有办法访问分配在堆上的对象? java 执行什么机制来保证正确的方法可以访问堆外的正确数据?

看起来,如果您很狡猾,甚至可能在运行时操纵 Java 字节码,那么您可能能够在不应该的时候操纵堆外的数据?

最佳答案

JVM 指令集中没有指令可以任意访问堆。因此,字节码操作在这里对您没有帮助。

JVM 也有一个 validator 。它检查每个方法的代码(在加载类时)以验证该方法不会尝试从执行堆栈中弹出比它压入其中的值更多的值。这确保方法无法“看到”其调用方法指向的对象。

最后,局部变量存储在每个方法的数组中(称为“局部变量数组”)。同样, validator 确保从/到该数组的每个读/写指令指定一个小于数组大小的索引。请注意,这些 JVM 指令只能指定一个常量索引。他们不能采用计算值并将其用作索引。

总结一下,答案是否定的。

关于java - 一般问题 : Java has the heap and local stack. 你能访问堆中的任何对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/289138/

相关文章:

c++ - 不将函数的返回值分配给变量的含义

c++ - 构建并执行一堆 void 函数

java - 如何使用 Java 代码从 AWS 获取 EC2 定价?

java网络服务客户端

java - 无法将 java.lang.String 类型的属性值转换为属性 Phone 所需的 long 类型;嵌套的异常

java - JVM 可以看到多少代码?

java - 为什么虚拟机没有操作系统?

java - Java 运行时注解在内部是如何工作的?

c - 在更新顶级变量时使用堆栈错误中缀到后缀

java字节数组输出流什么都不给