《高级--Java内存与多线程》

问题描述

JVM的内存管理参见下图既然只有堆区和方法区是各线程共享的,那为什么按照JMM,见下图jvm系统中存在一个主内存,Java中所有变量都储存在主存中,对于所有线程都是共享的。每条线程都有自己的工作内存(WorkingMemory),工作内存中保存的是主存中某些变量的拷贝,线程对所有变量的操作都是在工作内存中进行,线程之间无法相互直接访问,变量传递均需要通过主存完成。现在问题来了。根据JVM内存管理提到的,只有堆内存和方法区是各线程共享的,那在JMM提到的“主内存”是不是就是指上述2个区域?另外,对于普通int变量是存放在栈中的,那按照JVM的内存管理中说应该是线程独立的,那JMM中的主内存把变量拷贝到工作内存中该如何理解?多谢各位

解决方案

本帖最后由 iamczr 于 2010-11-04 16:33:21 编辑
解决方案二:
该回复于2010-11-05 10:00:09被版主删除
解决方案三:
第一个问题,主内存包括了堆内存和方法区,还应该包括其他所有变量啊。第二个问题,我举例说明:主内存存在变量A=0;线程1:需要用到A,于是把主内存中的变量A复制过来为A',假设操作之后A'=1;线程2:也需要用A,虽然此时线程1中的A'=1,但线程2是从主存中复制的A=0,即线程2中,A''=0。
解决方案四:
区分主内存和副内存(线程工作内存),是为了提高运行效率一般来说,如果没有同步要求,线程运行时,直接使用拷贝到副内存里的变量,要比每次使用时从主内存拷贝,效率要高很多
解决方案五:
我是路过看帖的,顺便拿走每日可用分10分
解决方案六:
过来学习的,顺便拿分,呵呵
解决方案七:
该回复于2010-12-03 10:18:20被版主删除
解决方案八:
没人回答么?
解决方案九:
围观群众
解决方案十:
不是很明白!愿闻其详
解决方案十一:
该回复于2010-11-19 13:49:57被版主删除
解决方案十二:
该回复于2010-11-20 09:58:12被版主删除
解决方案十三:
理解是:每个线程有自己的栈和pc,方法调用通过栈帧的pop和push来实现。栈帧里面有局部变量、操作数等等。这些栈都可以访问一个JVM实例里面的方法区和堆。不知道这样理解对不对,期待大牛。
解决方案十四:
1.所有数据都在主内存中。2.线程运行时从主内存取数据,这里才到栈中,最后刷新回主内存(同多CPUcache模型),JAVA语言规范定义了6个原子操作:load,save,read,write,use,assign,用于线程内存同步。如果有synchronized,每个同步变量的操作先上锁-->read-->use/assign-->write-->解锁,完成同步过程。如果没有synchronized,不会上锁,都在线程本地操作,不保证数据的一致性。
解决方案十五:
该回复于2010-12-30 13:33:04被版主删除
解决方案:
过来学习的,顺便拿分,呵呵
解决方案:
ipnu天天学习
解决方案:
不太懂就谦虚点,网上和书上找来的,都每个人说清楚的;文字几经一样,浪费时间;都不想发帖问这些问题,基本上大陆没人知道;译书,写书的都不例外;哈哈!有点愤青,但是网络上的现实摆在面前,就是在抄文字,懂不懂都在抄/转;
解决方案:
哥想挨骂,都把哥搞火了,网上那些转帖,改贴的都烦透了;赚人气/赚积分却不认真处理问题的吃屎去吧!
解决方案:
推荐你看几个文章:JLS第三版第17章——权威之作jsr133——JMM规范
解决方案:
引用

jvm系统中存在一个主内存,Java中所有变量都储存在主存中,对于所有线程都是共享的。每条线程都有自己的工作内存(WorkingMemory),工作内存中保存的是主存中某些变量的拷贝,线程对所有变量的操作都是在工作内存中进行,线程之间无法相互直接访问,变量传递均需要通过主存完成。

1.主内存是什么?2.变量是那些变量,全部的变量?3.变量是怎样存储在主存中(怎么存入,取出(不同变量特征都不一样吧),什么样的分布情况);4.线程是否是说线程对象,从上文中表述,超出了对象的特性了,到底是个什么东西呢?5.线程为什么要拷贝,拷贝谁,怎么拷贝;总之.请不要千遍一律地说线程共享了主内存就导致了不安全,当明白了线程共享主内存的前前后后的相详细,当然就能明白是不安全的啦;不是随便在网上乱骂的,刚好找到个在问这些问题的了,还有一大把人不明白;
解决方案:
喔,图还蛮多的
解决方案:
这样的问题讨论有什么意思啊!!你们哪些人工作中遇到过这些???

时间: 2024-10-11 15:34:01

《高级--Java内存与多线程》的相关文章

《I'm a Mac:雄狮训练手册》——2.4 快速用户切换

2.4 快速用户切换 I'm a Mac:雄狮训练手册 传统的用户切换需要登出系统重新登录,这样一方面耗时较长,另一方面一次只能登录一个用户,再者会关闭原用户已打开的程序和窗口. 而快速切换则用于不登出系统就切换到另外一个用户,使得多账户同时运行.切换到另一个用户时,前一用户的所有已打开程序和窗口都将暂停并保持原装,不受干扰.当再次切回时,所有一切都像原来一样,所不同的只是时间变了. 2.4.1 在菜单栏上显示快速用户切换菜单 打开"系统偏好设置",点击"用户与群组→解锁→登

《I'm a Mac:雄狮训练手册》——2.3 账户类型

2.3 账户类型 I'm a Mac:雄狮训练手册 用户的社会属性并不决定它的计算机角色,虽然这个世界上有成千上万的Mac用户,形形色色,但是Mac认不过来,它才不管你是美国总统还是平头百姓.用户是指人,账户是指OS分配给用户的系统角色. Mac下的账户类型有五种:超级用户(Super User),管理员,普通用户,客人用户和仅限共享. 2.3.1 超级用户 超级用户也叫root用户,享有对计算机的绝对控制权限,可以任意删除和移动任何文件,所以Mac默认不启用.因为权力太大.当一个人的权力大到无

《I'm a Mac:雄狮训练手册》——2.2 用户账户

2.2 用户账户 I'm a Mac:雄狮训练手册 用户和账户是两个概念,用户是指人,账户是指赋予用户的系统身份,也就是登录凭证,Mac ID.一个用户要登录系统首先要有一个账户,以下为方便说明,假设二者一致. Mac下所有账户和登录都是通过"用户与群组"偏好设置来进行设置.所以要对登录和账户进行设置,首先要打开"用户与群组"偏好设置. 2.2.1 "用户与群组"偏好设置 打开"用户与群组"偏好设置,有五种方式. (1)打开&

《I'm a Mac:雄狮训练手册》——序章 0.1 Mac

序章 0.1 Mac I'm a Mac:雄狮训练手册 苹果电脑共有3种类型:掌上型.膝上型和桌面型. 掌上型也叫平板电脑,膝上型也叫笔记本,桌面型也叫台式机. 0.1.1 笔记本 笔记本原来有3种:MacBook.MacBook Air和MacBook Pro,分别简称MB.MBA和MBP.Macbook是苹果的入门级电脑产品,因塑料全白外壳而得名小白,但小白的命运比较坎坷,曾经一度被拿掉,后来又上,又被拿掉,2012年苹果宣布不再生产白色塑料外壳的MacBook.因为和MBA和MBP相比,小

《I'm a Mac:雄狮训练手册》——0.2 OS X

0.2 OS X I'm a Mac:雄狮训练手册 用乔布斯的话说,Mac之所以是Mac,是因为Mac OS.硬件是骨架,软件是灵魂,正是因为Mac OS才让Mac是Mac.否则,它与PC没有什么不同,只是漂亮一些,电路板整齐一些. Mac是苹果电脑,OS X是装在苹果电脑上的操作系统.以前叫做Mac OS X,Lion之后叫做OS X,去掉Mac的概念是因为苹果想淡化Mac的概念.搭载在Mac上的操作系统可以有很多,OS X是原配,最新版本是10.7,叫做Lion. Mac OS有两个版本,一

《I'm a Mac:雄狮训练手册》——1.7 shift键在开机时的作用

1.7 shift键在开机时的作用 I'm a Mac:雄狮训练手册shift键在开机时的作用有三:①在开机"咚"声时按住shift键将以安全模式启动:②在屏幕闪烁时按住shift键将取消自动登录:③在白屏时按住shift键将取消系统重返和停止加载登录项. 1.7.1 以安全模式启动在开机"咚"声时按住shift直到看到灰色的Apple Logo和进度指示器表示以安全模式启动.所谓安全模式是仅加载核心进程,强制对启动卷宗进行目录检查,并停用一切与系统核心无关的应用,

《I'm a Mac:雄狮训练手册》——0.6 如何快速熟悉Mac

0.6 如何快速熟悉Mac I'm a Mac:雄狮训练手册(1)要了解系统相关的设置,请看"系统偏好设置". (2)要查看程序的功能,请看菜单栏. (3)想知道程序都可以做那些设置,请看程序"偏好设置"(按command,或者点击"'程序'菜单→偏好设置"). (4)要了解电脑的信息,请查看"系统信息"("Launchpad/实用工具/系统信息"或者按住option点击"图片 19菜单→系统信息

《I'm a Mac:雄狮训练手册》——1.6 查看开机信息

1.6 查看开机信息 I'm a Mac:雄狮训练手册Mac的一个设计原则就是隐藏一切与用户无关的信息,不需要你知道的不让你知道,不需要你看到的不让你看到,一切从简,所以在开机的时候你只会听见一个简单的"咚"声和看到一个简单的画面,但其实在这些简单的表面背后有很多复杂的操作.只不过用幕布遮起来不需要用户看到,因为用户关注应用,而不需要看到内核. 如果你要查看Mac的启动过程和开机信息,就可以Verbose模式启动. 开机时按command-V,将以Verbose模式,也就是详细模式启动

《I'm a Mac:雄狮训练手册》——1.8 以32位模式启动

1.8 以32位模式启动 I'm a Mac:雄狮训练手册Lion是64位系统,如果你想以32位模式启动,就可以在开机"咚"声时同时按住数字键3和2以32位模式启动.Mac下的开机设置,都是一次设置,单次有效,下次开机时则正常启动,所以下次开机时系统则以默认的64位方式启动. 查看系统是32位还是64位如果你没有以32位模式启动,则默认是64位. 打开"系统信息"(按住option点击"→系统信息..."),点击"软件",就可

《I'm a Mac:雄狮训练手册》——1.9 恢复磁盘助理

1.9 恢复磁盘助理 I'm a Mac:雄狮训练手册Lion内置了恢复功能,让你可以无须安装盘即可恢复Mac.在开机"咚"声时按住command-R将会直接打开Lion的恢复磁盘助理(相当于按住option,然后选择Recovery HD磁盘). 通过此Recovery HD你可以修复磁盘.重装系统.在外部驱动器上创建Lion恢复,从TimeMachine备份恢复或使用Safari浏览网页. 注:要创建外部Lion恢复,请下载Lion恢复磁盘助理应用程序.插入外部驱动器并启动Lion