精彩牛耳,用心缔造
您的位置:主页 > 牛耳资讯中心 > 行业资讯 >

《权力的游戏》即将大结局,Java在里面能活过几

作者:牛耳教育 编辑:陈老师 来源:未知 发布日期:2022年01月16日
信息摘要:
随着《冰与火之歌》第八季的开播,那震撼人心的主旋律一遍又一遍地激荡着老王的心田,看着剧中一个又一个的人物前仆后继地走向死亡,从事Java开发多年的他不禁由此联想到了Ja...

随着《冰与火之歌》第八季的开播,那震撼人心的主旋律一遍又一遍地激荡着老王的心田,看着剧中一个又一个的人物前仆后继地走向死亡,从事Java开发多年的他不禁由此联想到了Java虚拟机(JVM)中对象的创建与消亡。


创建


自第一季伊始,眼看着一个个人物华丽丽地登场了,当然其中也有灰溜溜地出场的,安达尔人、先民、森林之子、瓦力亚人、多斯拉克人,人物多得让人眼花缭乱,还有三条巨龙。


 


而作为面向对象的编程语言,整个Java开发就是围绕对象进行的,每个程序都要创造许多大大小小、各种各样的对象。这么多对象如果一直存活着,是非常占据内存的,势必要造成资源的白白浪费,所以放在JVM中的对象免不了“凡人皆有一死”。究竟怎么个死法?被毒死被射死被砍头被割喉被烧死被血影杀死?都不是。


新生代


大部分Java对象刚被创造出来的时候就被放置在了这里,它们自己并不知道日后的命运,就像维斯特和呃索斯大陆上被创造的无数生命并不知道自己何时会死亡一样。


新生代中的对象们安安静静地等待着程序的调遣,然后本本分分地发挥着自己的作用,正如北境的小姐怀着她的王后梦坐在壁炉前安静地做着刺绣,英俊的骑士与爱人在快活地调着情,慈爱的母亲怀着身孕参加一场浪漫的婚礼,谁能想到自己即将成为无辜的冤魂呢?


 


Java对象们也不知道,它们并不知道老王何时会在程序中丢弃它们,老王也不知道将它们丢弃后,死神一般的垃圾回收器何时会找到它们。


JVM毫无预备地发起了一次Minor GC,不少对象被消亡了,奈德·史塔克和劳勃国王这对曾经的好基友就死于这次GC,一言不合被安排领了便当。


活下来的对象被JVM从Eden区转移到了Survivor 区,然后历经一次又一次的Minor GC,15次(默认进入老年代的值,可以通过参数–XX : Max Tenuring Threshold 来设定)之后,80%以上的对象都死了。


这是什么概念?


放在权力的游戏中,可不是小恶魔把他的父亲射死在马桶上,然后勒死自己的情妇那么简单,加起来就两条人命,也不是获得重生后的雪诺处决掉的几条叛乱者的性命,而是私生子战役中,被堆成小山包似的尸首,是龙母御驾亲征时,被熊熊烈焰烧成灰烬的兰尼斯特大军,更是寒冬降临之后,无数死于饥寒的平民。


只有战争和凛冬带来的灾难才能与这样的GC相提并论。


新生代中的对象颠沛流离,从一个区域被转至另一个区域,更要面临着随时被干掉的危险,老王由此想到了斯塔克家的两个女孩,一个在维斯特大陆辗转流离,一个在自由城邦——一片完全陌生的土地上历经磨难,过着朝不保夕的生活。


老年代


可是,一旦躲过了这样的灾难,在这样的灾难下艰难地挺了过来的人,将会变得更加强大。临冬城史塔克家的几个孩子有的经不住考验挂了,有的历经磨难活了下来。拜拉席恩家的几个男性继承人不堪一击,反而色后出色地活了下来,并且登上了铁王座。


新生代中那些侥幸躲过15次GC的Java对象终于进入了老年代,一旦进了老年代的门,它们是不会那么容易就“死掉”了的,做一次 Full GC 要比进行一次 Minor GC 的时间更长。


例如二丫如果想刺杀色后,必得费一番功夫。二丫和三傻也没有人能将她们轻易杀死,除非夜王领着他的异鬼大军举兵南下,那时无人幸免。



也不是非得经过层层磨难才可以存活下来,JVM中的一些大对象在创建之初就被直接扔进了老年代,比如String字符串

龙母就是这样的大对象,她生来不凡,“风暴降生”的名号可不是浪得虚名,何况她浴火重生,整个维斯特大陆都在等着她去收复呢!她要是挂了,谁去和色后争夺铁王座?雪诺也是一样,谁叫他是“预言中的王子”呢!


永久代


姑且把夜王和他的异鬼大军放在这里吧,原因有二,一是永久代比较特殊,它存放的是程序需要的应用元数据而非对象,二是永久并不代表永久不死。


异鬼不是人类,而且他们虽然不会生老病死,但是同样会死于火焰、龙晶和守夜人的刀剑之下。相比与维斯特大陆和狭海对岸的死亡,异鬼中的死亡并没有给老王留下什么深刻的印象,死了谁都是一个样。


 


无论是老年代还是永久代中的对象都不是安全的,因为“凡人皆有一死”,只不过何时死并不知道,因为JVM销毁对象是随机的,不可预测的。就好比躲过前七季的死亡、顺利活到第八季的人物谁死谁活也是不确定的,只有作者乔治·马丁知道。


那么问题来了,你觉得终结季里哪些角色会躲过一劫而顽强地活下来呢?

牛耳推荐资讯
湖南工程学院计算科学与

湖南工程学院计算科学与

【产教融合育人才校企合作谋发展】湖南工程学院计算科学与电子学院与牛耳科教集团签约共建实习基地...
2022年11月30日
嵌入式学习路线怎么规划

嵌入式学习路线怎么规划

随着人工智能领域的兴起和发展,嵌入式开发技术也随之受到关注。近几年,学习嵌入式开发的学生越来越多,有的选择自学,有的选择去培训班。不管做...
2022年11月30日
Web前端框架有哪些?哪个

Web前端框架有哪些?哪个

Web前端框架是前端开发中一个非常重要的开发工具。功能强大的框架可以让前端人员更加清晰的看见现有代码的结构,也能快速检查一些代码错误,极大的...
2022年11月30日
软件测试培训多少钱?学

软件测试培训多少钱?学

目前市面上软件测试培训的费用大概在0.8-2.3万之间,为什么费用差别会这么大?影响因素有很多,主要是课程内容、上课方式、地理位置等。...
2022年11月28日
为什么要学习软件开发?

为什么要学习软件开发?

随着时代的进步,国家的发达,信息时代的到来,对于软件开发的需求也越来越大了!普遍性的需要,那么什么是软件开发?...
2022年11月25日
 牛耳教育的教学模式是怎

牛耳教育的教学模式是怎

牛耳教育采取独特的“企业化管理”的教学模式,从专业技能、项目能力和职业素质三方面帮助学生全面提升职业竞争力,完善的软件人才培养体系基础上,同时拥有完善的软件人才考...
2022年11月22日

咨询热线

400-0731-162