人文艺术 > 如果实现了一种不用暂停世界的GC算法,会对现在编程语言产生什么影响?

如果实现了一种不用暂停世界的GC算法,会对现在编程语言产生什么影响?

2020-10-14 07:04阅读(65)

如果实现了一种不用暂停世界的GC算法,会对现在编程语言产生什么影响?:Java和golang的最新的gc处理耗时已经极低了,又想有gc,又不想暂停世界,可能比较困难。

1

Java和golang的最新的gc处理耗时已经极低了,又想有gc,又不想暂停世界,可能比较困难。

如果想智能回收内存,可以选择rust,思路是所有权机制。

所谓所有权机制,就是任何内存都是有主的,由主人自己在销毁的时候来释放,别人想使用不属于自己的内存,需要通过借用来实现,借出去的东西必须还回来。

然后在编译阶段保证所有权机制的安全,不允许出现有借无还的情况。

这是一种新的语言,新的编程思想,你可以研究一下。


2

从某种意义上来说,即使不gc,世界也是无时无刻都在暂停,因为性能不是无限的,执行每一个操作都需要时间,等待操作完成和暂停世界没有本质区别,如果可以让gc的时间足够短,那gc的时间就可以忽略了

现在ibm已经有gc时间非常非常非常短的算法了,主要缺点是费内存

3

理论来说不停顿就会影响程序本身的吞吐量,因为如果gc线程全阶段和应用程序线程并发的话就会抢占CPU资源。

其实个人认为是可以做到的,但有没有必要就视情况而定了。譬如zgc本身停顿时间一般就在十到几十毫秒左右,如果gc roots不是特别多的话,其实这时间已经算非常短了,也基本能满足比较苛刻的需求了。

其实你可以换个角度想,如果全程并发gc其实回收效率并不会有stw高,而垃圾回收率不该就意味着简介地增加了gc的次数,所以我个人认为适当的stw还是有一定需要的,因此即使研发出了感觉也不会有多大改变,因为调优本身都是等价交换的思想,即得到了并发就降低吞吐量。

除非硬件以后发展到非常强大(或远超应用程序所需的资源)否则不可能改变这现象。因为软件到瓶颈后还是得看硬件性能

4

那就用苹果的arc,就是开发者长点心

5

即使实现了,也毫无意义。 原因,在多线程中,或云计算的虚拟CPU的核 都有权限挂起一段程序的某个线程,再以后的时间片再切换回来。 这是现代处理器多任务的本质特点,无法避免。只有少数实时处理程序能够幸免,比如声音和图像的实时编辑软件。你没有办法避免世界停下来,甚至软件本身都不容易察觉自己的时间片被挂起。

6

暂停是因为需要冻结当前的内存状态,来判断哪些内存是可以gc的…一直处于动态的内存分配状态下,gc是难以实现的…只能尽可能降低这个时间,但不能完全消灭…你gc算法执行需要时间,只要要保障这段时间内内存不能变动。

7

那得等量子计算机了吧大概。现有架构的计算机无论如何也是会暂停世界的,不管你用什么GC算法,cpu处理本质就是中断……中断……中断……

8

从内存角度来看,永远不可能。除非自己回收管理。内存交给系统管理,他必须将现有线程工作内容搬迁到新的地方去。假设内存无限大,系统线程随着在空闲内存上复制一模一样的数据和大小,那么GC暂停将会在一瞬间完成迁移。不过意义就是空间和拷贝的浪费。