许芒禾的社交圈不大。
小周是她在深圳唯一的朋友。她们偶尔会一起去海岸城逛街,吃火锅,喝糖水。以前沈渡舟觉得这很正常。现在她觉得不够正常了。许芒禾每次跟小周出去,沈渡舟在家就会一直看手机。不是等消息,是看许芒禾有没有发消息。她不会主动发,怕打扰她。但她希望许芒禾发。
有一次许芒禾跟小周去吃火锅,两个小时没发消息。沈渡舟坐在书桌前,代码写了两行,退格键按了无数次。她把手机拿起来,打开微信。芒禾的对话框安安静静。她打了一行字“吃完了吗”,删掉。又打了“几点回来”,删掉。她把手机放下,继续写代码。退格键按得比字母键还多。又过了半小时,她把手机拿起来,打开朋友圈。她以前从来不看朋友圈。现在她看。小周五分钟前发了一条:和芒禾吃火锅,她家那位怎么没来。配图是一桌菜,许芒禾坐在对面,正低头涮毛肚。沈渡舟把那张照片放大。许芒禾涮毛肚的样子她见过很多次,七上八下,数着秒,捞起来放在她碗里。她把照片看了很久,然后退出朋友圈,给许芒禾发了一条消息。
“看到小周的朋友圈了。毛肚好吃吗。”
许芒禾秒回:“好吃。下次带你来。小周说你一起来她也不介意。”
她打字:“好。”
然后把手机放下。心跳慢慢平下来。她不知道自己为什么会这样。许芒禾跟朋友吃顿饭,她坐立不安了两个小时。不是怕许芒禾跟别人跑,是怕许芒禾在她不在的地方开心。她希望许芒禾所有的开心都跟她有关。她知道这不正常。但她控制不住。
许芒禾回来的时候,沈渡舟坐在沙发上看书。许芒禾换好拖鞋走过来,趴在她腿上。
“今天火锅好吃吗。”
“好吃。小周问你为什么不来。我说你在家写代码。她说下次一定要叫你。”
沈渡舟的手放在她后脑勺上。“好。”
许芒禾抬起头看着她。“你是不是不高兴。”
“没有。”
“你有。你今天给我发消息的语气,和平时不一样。”
沈渡舟把书合上。“我没有不高兴。我只是——”她停了一下。“你不在的时候,我不知道你在干什么。我就会想,你在干什么。你和谁在一起,吃了什么,好不好吃,笑了没有。我会一直想,想到你回来。”
许芒禾把她的手从自己后脑勺上拿下来,握在手心里。
“那下次我多发消息。吃了什么拍给你看,笑了也告诉你。”
沈渡舟看着她。“会不会觉得我很烦。”
“不会。我也想知道你在家干什么。写代码写到哪一行了,有没有按退格键,糯糯有没有趴你腿上。你不发给我,我也会想。”
沈渡舟把她拉进怀里。两个人的心跳叠在一起。
“以后我发。”
“我也发。”
那天晚上,她们躺在床上。许芒禾枕着沈渡舟的手臂,手指在她锁骨上画圈。
“沈渡舟。”
“嗯。”
“你以前不是这样的人。你以前对任何事都不太在意。现在你连我吃火锅涮毛肚都要问好不好吃。你变了。”
沈渡舟在黑暗里沉默了很久。
“我知道。以前我没有想要抓住的东西。你来了,我就想抓住了。抓住了,就怕松手。”
“你不会松手的。”
“你怎么知道。”
许芒禾把她的手从自己腰上拿起来,按在自己胸口。“因为你松手了,我这里就空了。你不会让它空的。”
沈渡舟的手指在她掌心里动了一下。她低下头,嘴唇贴在许芒禾的额头上。
“嗯。我不会。”
窗外的深圳正在进入深夜。沈渡舟闭着眼睛。她想,她这辈子从来没有这样确定过一件事。她不会松手。不是不想,是不会。许芒禾在她生命里的位置,不是一段可以在任何作用域里被随意声明的局部变量。她是被statial修饰的类成员,在类加载的那一刻就完成了初始化,整个生命周期里只有这一个实例,永远指向同一块内存地址,永远不会被垃圾回收器触及。因为指向她的引用是强引用,只要沈渡舟这个进程还在运行,只要承载她的那个ClassLoader还没有被卸载,这个引用就永远可达。JVM不会回收一个强引用可达的对象,正如沈渡舟不会松开一个她还爱着的人。
许芒禾被赋进了她生命的常量池里,和那些字符串字面量一样,编译期就确定了,运行时也绝不会被修改。不是equals,是==。比较的不是内容,是内存地址——她们指向的是彼此唯一的那块堆内存,是同一个对象,同一段人生。她的作用域不是某个方法栈帧,不是某个线程的局部变量表,不是随着方法调用结束就会被弹出栈的临时引用。她是堆里的对象,被全局静态引用锚定,整个应用程序的生命周期里都不会被释放。除非JVM崩溃,除非系统断电,除非这个进程被kill-9强制终止。否则她会一直占用着那部分内存。不,不是占用,是“被需要”。
像缓存里最热的数据,像连接池里永远不会归还的那个长连接,像注册中心里永远健康的那个服务节点。沈渡舟不会让她被回收。不是不想,是架构设计如此。她从写下第一行代码的时候就决定了——许芒禾这个对象,由她来持有强引用。永远不设为null,永远不调用System。gc()去建议回收,永远不会让任何OutOfMemoryError威胁到她的存在。哪怕堆内存爆满,哪怕频繁FullGC,她也会把许芒禾移进老年代,移进永久代,移进元空间,移进任何一个垃圾收集器触达不到的永生区域。她不是内存泄漏。她是架构选型时写下的第一个final常量。是启动类里最顶层的静态初始化块。
是永远不会被卸载的根对象。是沈渡舟用余生维护的唯一一段核心代码。她永远不会回收。