Meta在程序语言Python提出PEP-683以加入Immortal Objects,使得对象可以绕过参照计数检查,成为在执行时持续存活的不朽对象,通过增加共享内存使用量,进而提高内存的使用效率,而这将有助于解除Python语言本身在平行运算上的局限。 目前PEP-683已经被接受。

Meta使用Python网页框架Django开发Instagram前端服务器,并且使用多程序架构以及Python标准函式库asyncio,以达到每个程序并行处理的目标,但因为Instagram无论是在业务逻辑还是处理的请求量,规模都十分庞大,这个方法对内存的大量需求,成为了系统的效能瓶颈。
随着系统运作,每个服务器程序的私有内存使用增加,而共享内存减少,这样的现象造成内存效率不彰。 开发人员分析发现,即便许多Python对象在整个执行时不可变,但是Python的参照计数和垃圾回收机制,仍然会试图管理并修改这些对象,在每次读取和垃圾回收周期仍会执行写入时复制(Copy-On-Write,COW),使得原本共享的内存分页变成私有,如此便减少了共享内存的效益,增加了不必要的CPU和内存开销。
PEP-683的出现便是为了解决这个问题,Immortal Objects在对象的参照计数字段中,标记特殊值以创建不朽对象,也就是核心对象状态永远不会改变的对象,Runtime会知道什么时候可以或是不可以改变参照计数字段和垃圾回收头。
不过,由于Immortal Objects的核心实作,在参照计数增加和减少的程序中添加了明确的检查,这两个程序是Runtime被频繁执行的代码,因此无法避免地造成代码效能下降,经过特殊的暂存器分配策略,可以最大程度减少效能降低,但是仍有约2%的效能影响。
在Instagram中,本来是通过减少写入时复制操作,提高处理请求内存和CPU效率,而由于Immortal Objects的加入,Instagram便可以通过增加共享内存使用量,来大幅减少私有内存的使用。 由于Immortal Objects可以跨执行绪共享对象,不在需要GIL(Global Interpreter Lock)达到执行绪安全性,Meta提到,这项功能影响了Python语言的发展,由于Immortal Objects保证堆对象真正的不可变性,因此也解除Python在平行运算的限制。