线程的工作内存 jvm的主存

yipianchuyun 2010-04-11 01:29:19
我看到
public class classA {
String a;
String b;
public void method() {
string c;
}
}
回复了ab在主存中c在工作内存中并有ab的拷贝

我想问一下 如果ThreadA中new了一个classA
ThreadB中new了一个classA 主存中岂不是有了两个a和两个b
而上面提到: Java中所有变量都储存在主存中,对于所有线程都是共享的 两个进程到底访问哪个ab
...全文
95 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zx8813443 2010-04-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yipianchuyun 的回复:]
两个线程各自的私有的对象引用找到各自的对象,
那主存中对象对每个线程都是共享的,那threadA只要有别的对象的引用那也能引用了??即使这个对象不是threadA创建的
[/Quote]
主存中存储的是所有的程序的变量,而不是对象
线程持有对象的引用是私有的,不是共享的,如果主存中也存在指向相同对象的引用,那的确是所有线程都共享的,如果你把私有的引用值赋给主存中的一个同类型的引用,其他的所有线程就应该都可以访问到这个对象了,因为主存中的引用是被所有线程共享的
这是我的理解,我在看《深入JAVA虚拟机》,这本书挺好的,推荐你看一下
yipianchuyun 2010-04-11
  • 打赏
  • 举报
回复
还想问一个:
在一个方法中new一个对象,如果调用该方法,调用完该方法中该方法中分配的内存即方法栈内存会被回收(在没有外界的引用的情况下),
我想问的是如果在该方法中new一个Thread类型的对象,那方法调用完毕后,Thread类型的对象所在的内存又是怎样处理的
yipianchuyun 2010-04-11
  • 打赏
  • 举报
回复
三楼哦 我想听听你的看法
yipianchuyun 2010-04-11
  • 打赏
  • 举报
回复
两个线程各自的私有的对象引用找到各自的对象,
那主存中对象对每个线程都是共享的,那threadA只要有别的对象的引用那也能引用了??即使这个对象不是threadA创建的
zx8813443 2010-04-11
  • 打赏
  • 举报
回复
既然是在线程中new的,那这两个对象的引用变量应该分别在两个线程的工作内存中,是私有的局部变量。
ThreadA与ThreadB分别通过自己拥有的ClassA对象的引用找到各自的对象,所以,是访问各自new的对象中的ab
ublearning 2010-04-11
  • 打赏
  • 举报
回复
进程访问当前调用对象的ab
liu_siat 2010-04-11
  • 打赏
  • 举报
回复
不同线程产生不同的对象,当然访问不同的区域了
如果是同一个对象,就是共享的
线程 单例模式下的线程安全http://blog.sina.com.cn/s/blog_75247c770100yxpb.html map集合 集合数据结构及方法的使用 多线程 线程进程 线程状态 线程状态的改变 sql :临时表、游标、存贮过程、触发机制http://www.cnblogs.com/SkySoot/archive/2012/04/09/2439190.html jvm工作原理 JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。 1说说JVM原理?内存泄露与溢出区别,何时产生内存泄露? 编译源代码为本地机器码执行。 内存泄露是一部分内存无法回收。溢出是说内存不够用了。泄露可能在将来会导致溢出 当对象在程序中不会被使用,但却有其他对象持有该对象时会发生溢出。比如出现持有的环的情况。 java并发面试题 .内存存储锁控制 http://blog.csdn.net/geolo/article/details/8670900 4.请说明下java的内存模型及其工作流程。 答:Java把内存划分成两种:一种是栈内存,一种是堆内存。 栈内存:存放对象:函数中基本类型的变量和对象的引用变量、静态类方法 ;特点:栈有一个很重要的特殊性,就是存在栈中的数据可以共享。 堆内存:存放对象:用来存放由new创建的对象和数组;特点:在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。 java 内存模型 ( java memory model ):根据Java Language Specification中的说明, jvm系统中存在一个主内存(Main Memory或Java Heap Memory),Java中所有对象成员变量都储存在主存中,对于所有线程都是共享的。每条线程都有自己的工作内存(Working Memory),工作内存中保存的是主存中某些对象成员变量的拷贝,线程对所有对象成员变量的操作都是在工作内存中进行,线程之间无法相互直接访问,变量传递均需要通过主存完成。 (1) 获取对象监视器的锁(lock) (2) 清空工作内存数据, 从主存复制对象成员变量到当前工作内存, 即同步数据 (read and load) (3) 执行代码,改变共享变量值 (use and assign) (4) 将工作内存数据刷回主存 (store and write) (5) 释放对象监视器的锁 (unlock) spring框架原理 10. spring工作机制及为什么要用? 1.spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。 2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller. 3.DispatcherServlet请求提交到目标Controller 4.Controller进行业务逻辑处理后,会返回一个ModelAndView 5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象 6.视图对象负责渲染返回给客户端。
java核心面试技术点 线程 单例模式下的线程安全http://blog.sina.com.cn/s/blog_75247c770100yxpb.html map集合 集合数据结构及方法的使用 多线程 线程进程 线程状态 线程状态的改变 sql :临时表、游标、存贮过程、触发机制http://www.cnblogs.com/SkySoot/archive/2012/04/09/2439190.html jvm工作原理 JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。 1说说JVM原理?内存泄露与溢出区别,何时产生内存泄露? 编译源代码为本地机器码执行。 内存泄露是一部分内存无法回收。溢出是说内存不够用了。泄露可能在将来会导致溢出 当对象在程序中不会被使用,但却有其他对象持有该对象时会发生溢出。比如出现持有的环的情况。 java并发面试题 .内存存储锁控制 http://blog.csdn.net/geolo/article/details/8670900 4.请说明下java的内存模型及其工作流程。 答:Java把内存划分成两种:一种是栈内存,一种是堆内存。 栈内存:存放对象:函数中基本类型的变量和对象的引用变量、静态类方法 ;特点:栈有一个很重要的特殊性,就是存在栈中的数据可以共享。 堆内存:存放对象:用来存放由new创建的对象和数组;特点:在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。 java 内存模型 ( java memory model ):根据Java Language Specification中的说明, jvm系统中存在一个主内存(Main Memory或Java Heap Memory),Java中所有对象成员变量都储存在主存中,对于所有线程都是共享的。每条线程都有自己的工作内存(Working Memory),工作内存中保存的是主存中某些对象成员变量的拷贝,线程对所有对象成员变量的操作都是在工作内存中进行,线程之间无法相互直接访问,变量传递均需要通过主存完成。 (1) 获取对象监视器的锁(lock) (2) 清空工作内存数据, 从主存复制对象成员变量到当前工作内存, 即同步数据 (read and load) (3) 执行代码,改变共享变量值 (use and assign) (4) 将工作内存数据刷回主存 (store and write) (5) 释放对象监视器的锁 (unlock) spring框架原理 10. spring工作机制及为什么要用? 1.spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。 2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller. 3.DispatcherServlet请求提交到目标Controller 4.Controller进行业务逻辑处理后,会返回一个ModelAndView 5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象 6.视图对象负责渲染返回给客户端。

62,614

社区成员

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

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