文中将会出现两个人物,1.小虚,2.小象,对应现实中的虚拟机和对象
第一天
小象:小虚,我想出来做大事
小虚:哟?想出来啦?行啊,等着,我把你造出来。
小象:你要怎么把我造出来啊= =
小虚:这简单啊,加载你所在的类啊,解析然后初始化,你不就出来了吗。
小象:好!我等着
小虚:造好了,出来吧!
小象:耶!我终于可以站在内存大陆了,我要去闯荡一番!
第二天
小象:小虚,给我来几个兄弟姐妹,一起好干大事
小虚:等着,马上给你造出来
小虚:小象12345,都出来
小象:谢谢你,小虚
第三天
小象:小虚,再来几百个。。。
小虚:几百个?你要累死我啊!
小象:怎么了嘛
小虚:你是站着说话不腰疼,你给我造几百个试试,不累啊
小象:做这个工程人手不够嘛,大工程哟!
小虚:去你的大工程,我还是想想怎么快速建造吧
小象:等你好消息!
第四天
小象:怎么样,小虚,有进展吗
小虚:你还真别说,有!
小象:可以啊!打算怎么做?
小虚:我完全可以在创建之前判断一下你们家族是否已经被加载初始化过了啊,如果已经被初始化了,我直接创建不就完了吗?还费那功夫每次创建都要加载初始化。
小象:是啊,每次花那功夫加载初始化干嘛,如果需要加载再加载,不需要就直接创建啊
小虚:嗯,这样一来,速度就快多了
小象:再给我来几千个兄弟
小虚:你!
第五天
小象:小虚,兄弟太多了,乱糟糟的,内存大陆看着乱七八糟的,你是按什么规则规定我的兄弟都在内存大陆的那一块的啊
小虚:(冷汗)
小象:怎么了,小虚,你怎么出汗了啊
小虚:既然被你问到这个问题了,那我就告诉你吧。
小象:你说
小虚:其实,我有两个方案。第一,一个一个排着队站在内存大陆的空白区域,第二,第二。。。
小象:第二什么你说啊
小虚:(咽了咽口水)你也知道内存大陆乱糟糟的,大家都站在各种地方,你有些兄弟体格又大,有些时候空间站不下,我就把你的兄弟拆开了,手放这里,脚放那里。
小象:什么!什么!什么!你对我兄弟下毒手,亏你做得出来!
小虚:消消气嘛,内存大陆本来就小,我只好合理利用大陆面积了啊,你们如果被挤出大陆,那会发生灾难的啊,难道你忘了吗
小象:灾难?什么灾难?
小虚:算了,说了你也不知道,而且下次灾难发生后,你就会把我忘得一干二净。
小象:神神叨叨的,不知道你在说什么,话说我的兄弟没事吧
小虚:没事,他们手脚在什么地方我都记录着的呢,丢不了,而且可以正常工作。
小象:那我就放心了
第六天
小象:小虚,为什么我的兄弟莫名其妙消失了
小虚:消失?什么情况
小象:我明明看到这块地皮已经被我兄弟认领了,但是居然出现的其他人,这是为何
小虚:你有所不知,出现了两个制造机抢一块地皮的现象
小象:那是什么现象
小虚:说白了就是出现了线程安全,CPU大佬没有顾过来
小象:听不懂,你就说怎么解决吧。我以为那里是我兄弟,走过去差点吓死我!
小虚:你不用紧张,最近大陆出了新政策,让每个线程都预先留一块地,现在自己的地方创建对象,如果自己的地方满了,就分配一块新的地方,这个地方叫做本地线程分配缓冲(TLAB Thread local Allocation Buffer)
小象:分配新地方出现了你说的那个线程安全问题怎么办,那不是更大一块地方吗
小虚:你说的没错,所以会加上同步锁,保证这项操作的原子性
小象:那还不错嘛
小虚:对啊
第七天
小象:我要走了,小虚,下次见
小虚:嘀咕(下次你就不认识我了)
小象:嘀咕什么呢
小虚:没什么,下次见
小象:掰掰
小虚:拜拜
网友评论