性能问答>Java多线程中static方法会被复制还是不复制?>
2回复

Java多线程中static方法会被复制还是不复制?



已经知道在没有共享变量的情况下多线程执行static方法是线程安全的。但是网上大致有两种观点,一种是线程会copy一份静态方法到线程内存,然后执行线程本地操作实现线程隔离。另外一种说法是无论是静态方法还是非静态方法,最终都是加载到方法区的,该部分代码不会被修改,只能传入数据进去。可能存在多个线程同时调用一份方法不同位置的情况。我个人比较倾向这种说法,但是对于单个线程来说,究竟是如何做到记录内部数据,保障数据安全性的我感觉理解的不是很深入。有没有非常懂jvm构造和多线程的大神详细的点拨一下?

2650 阅读
请先登录,再评论

JVM方法调用时会封装成栈帧入栈,栈帧内存储局部变量,任何方法内部的局部变量变量都是线程安全的。当然不止JVM会这样做,OS本身也会拿出一块内存作为程序执行的栈区,记录每个方法调用时的参数和局部变量。

1年前

不复制,共享值,用c++的概念就是引用。

1年前