java 线程的内存模型疑问

javaendless 2010-03-23 02:32:07
class Act {

private static int k=1;

public static void doMathForever() {
for (int i=0;i<10;i++) {
k+=i;
}
}
} jvm执行 k+=i;的时候,由于k

是类变量 存储在方法区,而线程是有自己的stack的 ,那这个时候k的值 是先去方法区去取的 然后保存在线程 stack 的那个地方 ? 因为一个线程stack 是又stack frame 组成的,一个stack frame 相当于一个方法的调用,stack frame 是又 localvariable ,Operand Stack 和Frame Data
组成 那个k 是放到哪里的

如果k 是一个 对象 那这个对象的应用是放在当前stack frame的哪里的

...全文
122 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
friendmine 2010-03-24
  • 打赏
  • 举报
回复
是这份文档,里边应该会论述这个东西怎么用的.
http://java.sun.com/docs/books/jvms/
qybao 2010-03-23
  • 打赏
  • 举报
回复
我觉得k没有被放到栈里或者说没有被复制到栈里,对k的操作应该是对k直接寻址操作
当然栈会生成一个临时变量放在栈的数据区,用于保存k+i的结果,然后直接寻址找到k,把结果写到k的地址。
javaendless 2010-03-23
  • 打赏
  • 举报
回复
你有在规范上找到吗,我在看inside jvm 上没有看到
friendmine 2010-03-23
  • 打赏
  • 举报
回复
看看,兄弟讨论的真有深度.
这个得看JVM的具体规范才能知道.

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧