如果实现了一种不用暂停世界的GC算法,会对现在编程语言产生什么影响?
▍ℛ如果实现了一种不用暂停世界的GC算法,会对现在编程语言产生什么影响?
要做到不需要STW的GC算法,个人觉得还是可以做到的,但是只是考虑STW对性能影响而完全关注STW,必然会对GC本身的有效粒度,内存清理度的有效性产生影响,目前java和golang的GC的处理已经非常的优化了,即便程序对性能的要求非常的苛刻,在程序层面也有非常多的方法在代码即便上对gc造成的影响进行优化。这两者个人感觉就是一个时间和空间的权衡而已。 不是完全做不到, 得一方面,就会失去一方面。
▍↞如果实现了一种不用暂停世界的GC算法,会对现在编程语言产生什么影响?
Java和golang的最新的gc处理耗时已经极低了,又想有gc,又不想暂停世界,可能比较困难。
如果想智能回收内存,可以选择rust,思路是所有权机制。
所谓所有权机制,就是任何内存都是有主的,由主人自己在销毁的时候来释放,别人想使用不属于自己的内存,需要通过借用来实现,借出去的东西必须还回来。
然后在编译阶段保证所有权机制的安全,不允许出现有借无还的情况。
这是一种新的语言,新的编程思想,你可以研究一下。
▍⇞如果实现了一种不用暂停世界的GC算法,会对现在编程语言产生什么影响?
rust的所有权机制了解一下?这是在编码层面上管理内存,并且防止内存泄露的一种方式,rust出现前,内存管理有2种方式,手动管理和gc管理,rust是第三种,介于gc和手动管理之间,即避免了手动管理中尝尝遇到的内存泄漏的问题(万恶之源),又避免了gc这种会耗费巨大的操作(其实gc还有实时性问题,在处理量巨大的情况下,gc并不能快速释放内存,gc是周期性的操作)
语法仍然是rust推广困难的重要因素,习惯了gc类语言,rust使用起来真的是相当的奔溃,如果你用rust来做web开发,你会更奔溃,原先清晰的mvc模式,在借来借去之后,编码变得异常复杂[捂脸][捂脸][捂脸]
▍%如果实现了一种不用暂停世界的GC算法,会对现在编程语言产生什么影响?
从某种意义上来说,即使不gc,世界也是无时无刻都在暂停,因为性能不是无限的,执行每一个操作都需要时间,等待操作完成和暂停世界没有本质区别,如果可以让gc的时间足够短,那gc的时间就可以忽略了
现在ibm已经有gc时间非常非常非常短的算法了,主要缺点是费内存
▍▤如果实现了一种不用暂停世界的GC算法,会对现在编程语言产生什么影响?
理论来说不停顿就会影响程序本身的吞吐量,因为如果gc线程全阶段和应用程序线程并发的话就会抢占CPU资源。
其实个人认为是可以做到的,但有没有必要就视情况而定了。譬如zgc本身停顿时间一般就在十到几十毫秒左右,如果gc roots不是特别多的话,其实这时间已经算非常短了,也基本能满足比较苛刻的需求了。
其实你可以换个角度想,如果全程并发gc其实回收效率并不会有stw高,而垃圾回收率不该就意味着简介地增加了gc的次数,所以我个人认为适当的stw还是有一定需要的,因此即使研发出了感觉也不会有多大改变,因为调优本身都是等价交换的思想,即得到了并发就降低吞吐量。
除非硬件以后发展到非常强大(或远超应用程序所需的资源)否则不可能改变这现象。因为软件到瓶颈后还是得看硬件性能
------------------
推荐阅读: