社区
Java SE
帖子详情
线程的工作内存 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
打赏
收藏
线程的工作内存 jvm的主存
我看到 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
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
不同线程产生不同的对象,当然访问不同的区域了
如果是同一个对象,就是共享的
02、
jvm
(21题)1
1. PC寄存器: 2. 方法区: 3. 堆: 4. 栈: 1. 每一个
线程
有一个
工作
内存
,和
主存
独立 2.
工作
内存
存放
主存
中变量的值的拷贝 3. 对于普通变
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.视图对象负责渲染返回给客户端。
java核心面试技术点
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.视图对象负责渲染返回给客户端。
jvm
主
内存
与
工作
内存
原文地址:https://blog.csdn.net/lovetea99/article/details/53375649一、
jvm
主
内存
与
工作
内存
首先,
JVM
将
内存
组织为主
内存
和
工作
内存
两个部分。 主
内存
主要包括本地方法区和堆。每个
线程
都有一个
工作
内存
,
工作
内存
中主要包括两个部分,一个是属于该
线程
私有的栈和对
主存
部分变量拷贝的寄存器(包括程序计数器PC和cup
工作
的高速缓存区)。...
【Java】【
JVM
】主
内存
和
工作
内存
Load(加载):作用于
工作
内存
中的变量,把read操作从主
内存
中得到的变量的值放入
工作
内存
的变量副本中。Write(写入):作用于主
内存
中的变量,把store操作从
工作
内存
中得到的变量的值放入主
内存
的变量中。Assign(赋值):作用于
工作
内存
中的变量,把一个从执行引擎接收到的值赋值给
工作
内存
中的变量。Read(读取):作用于主
内存
中的变量,把一个变量的值从主
内存
传输到
线程
的
工作
内存
中。Store(存储):作用于
工作
内存
中的变量,把
工作
内存
中的一个变量的值传送到主
内存
中。
Java SE
62,614
社区成员
307,326
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章