作者 | 素年清时

责编 | 伍杏玲

出品 | 程序人生(ID:coder_life)

随着《冰与火之歌》第八季的开播,那震撼人心的主旋律一遍又一遍地激荡着老王的心田,看着剧中一个又一个的人物前仆后继地走向死亡,从事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销毁对象是随机的,不可预测的。就好比躲过前七季的死亡、顺利活到第八季的人物谁死谁活也是不确定的,只有作者乔治·马丁知道。

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

四大项目,挑战Python全栈工程师?

https://edu.csdn.net/topic/python115?utm_source=csdn_bw

作为码一代,想教码二代却无从下手:

听说少儿编程很火,可它有哪些好处呢?

孩子多大开始学习比较好呢?又该如何学习呢?

最新的编程教育政策又有哪些呢?

下面给大家介绍CSDN新成员:极客宝宝(ID:geek_baby)

戳他了解更多↓↓↓

 热 文 推 荐 

☞ 杨镭访谈:UCloud 的技术价值观

☞ Python、Java、C#、Perl 创始人聚首,编程语言要变天?

☞ JavaScript 中的垃圾回收和内存泄露如何处理?| 技术头条

☞ 19 岁当老板,20 岁 ICO 失败,编程少年的创业辛酸史

☞ 养生 996 的崛起:马云竟给他最痛恨的「兔子」站台?

☞ 打开阿兹海默之门:华裔张复伦利用RNN成功解码脑电波,合成语音 | Nature

☞ 澳洲生活7年, 前阿里程序员谈我们的区块链差距究竟在哪?

☞ 关于谷歌云,你应该知道的一切!| 技术头条

☞ 她说:为啥程序员都特想要机械键盘?这答案我服!

System.out.println("点个在看吧!");
console.log("点个在看吧!");
print("点个在看吧!");
printf("点个在看吧!\n");
cout << "点个在看吧!" << endl;
Console.WriteLine("点个在看吧!");
Response.Write("点个在看吧!");
alert("点个在看吧!")
echo "点个在看吧!"

你点的每个“在看”,我都认真当成了喜欢

Java 在「权力的游戏」里,能活到第几集?相关推荐

  1. jvm 系列(九):如何优化 Java GC 「译」

    本文由CrowHawk翻译,地址:如何优化Java GC「译」,是Java GC调优的经典佳作. Sangmin Lee发表在Cubrid上的"Become a Java GC Expert ...

  2. jvm系列(十):如何优化Java GC「译」

    本文由CrowHawk翻译,地址:如何优化Java GC「译」,是Java GC调优的经典佳作. Sangmin Lee发表在Cubrid上的"Become a Java GC Expert ...

  3. 你在「动森」里遇到的那些「丑动物」,后来怎么样了?

    那些被高价收购的网红动物,和那些被嫌弃赶走的小可怜 <集合啦!动物森友会>共有 383 位动物居民,但并不是每一只动物都深受玩家喜爱. 「怎么样才能让小动物主动提出搬家的请求?」 有玩家因 ...

  4. 咖说 | 潘超:数字货币「矩阵」里的「盗梦空间」

    *本文转载自公众号"Moneyness研究院",已获得转载授权. 收集一众行业大咖观点,探索区块链商业及应用.百家争鸣.百花齐放,说理.解密.预测和八卦,了解行业内幕,看咖说就够了 ...

  5. 华尔街和散户「权力的游戏」,留下一地怎样的「鸡毛」

    WSB 论坛有人说,梦想着股价有朝一日一飞冲天直奔月球.可惜,梦想破灭了. GameStop 已经连续暴跌 2 天了. 截止美股周二收盘,游戏驿站(GameStop)股价暴跌 60%,收于美股 90 ...

  6. 「咖啡馆」里的任正非:开放的技术和商业,不会遵循「丛林法则」

    https://www.toutiao.com/a6703450899445973511/ 2019-06-17 18:53:07 摘要:任正非的「咖啡馆」迎来了第一批客人,他们聊了聊「华为现在面临的 ...

  7. 大厂真题之京东Java实习生「二」

    9.如何将一个 Java 对象序列化到文件里? ObjectOutputStream.writeObject()负责将指定的流写入,ObjectInputStream.readObject()从指 定 ...

  8. 深入理解JVM(4)——如何优化Java GC「译」

    本文翻译自Sangmin Lee发表在Cubrid上的"Become a Java GC Expert"系列文章的第三篇<How to Tune Java Garbage C ...

  9. 阿里巴巴「藏经阁」里的两部绝密宝典

    loonggg 读完需要 4 分钟 速读仅需 2 分钟 我不知道大家作为程序员一般都浏览哪些技术社区呢?其实目前阿里和腾讯做的技术社区也都不错.可能大家不太经常写作,所以不太了解. 如果你一直在写技术 ...

最新文章

  1. 无线网络嗅探中的Radiotap
  2. java拳皇地下城_拳皇(Java简单的小程序)代码实例
  3. 第4章 Python 数字图像处理(DIP) - 频率域滤波1 - 傅里叶级数和变换简史
  4. Java NIO Channel
  5. java gbk文件转utf8_java 将GBK编码文件转为UTF-8编码
  6. p(y|x,z)=p(x,y,z)/p(x,z)的解释
  7. Android ProGuard 还原堆栈
  8. 服务器换主板要重装系统吗,换主板需要重装系统吗【解决方案】
  9. 生物信息分析中的reads是什么
  10. STM32——DCMI接口与OV2640原理与配置
  11. 数据挖掘基础学习笔记
  12. Y件DOOK: VSC 安装 谷歌浏览器调试 固件插件 Debugger for Chorme
  13. 第二章 Caché JSON 创建和修改动态实体
  14. C++ 使用Windows API 打开VSPD虚拟串口失败
  15. Mars3D开发基础学习:glTF小模型
  16. 1-关于单片机通信数据传输(中断发送,大小端,IEEE754浮点型格式,共用体,空闲中断,环形队列)
  17. 国际物联网展亮相中国苏州 成功促进产业链交流与合作
  18. rsync远程同步+inotify监控
  19. MBTI测试结果:您的性格类型倾向为“ ENFP ”
  20. Yolov7训练自己的数据-水果检测

热门文章

  1. [Linux] 动态库加载顺序
  2. Pytorch+opencv 手势识别
  3. php 分词技术,php实现的中文分词类完整实例
  4. 矩池云上如何安装nvcc
  5. 更换用户目录后conda环境配置
  6. python内置函数可以返回列表元组_十九、python内置函数汇总
  7. php object 对象不存在。增加对象_PHP 闭包那点事儿
  8. tensorrt报错 [F] [TRT] Assertion failed: Unsupported SM.
  9. Python的lambda函数
  10. Ubuntu16.04LTS安装XMind8并创建运行图标