一种带有垃圾收集和手动内存管理的编程语言

时间:2017-08-15 04:51:14

标签: memory-management garbage-collection

有没有使用垃圾收集的编程语言,但是还允许手动内存管理?例如,提供析构函数。编程语言是否有可能同时进行垃圾收集和手动内存管理?

此处有相关问题,但没有答案: Interpreted languages with manual memory management?

由于

1 个答案:

答案 0 :(得分:1)

这绝对是可能的,但它需要语言来支持两个(或更多)内存区域的对象分配(假设它是一种OO语言,这当然会让生活更轻松)。

支持此功能的平台示例是Java实时规范(RTSJ)。由于实时操作很容易受到非确定性GC的干扰,因此RTSJ会在应用程序代码可以使用的标准Java堆之外添加内存​​区域。 RTSJ使用了一个内存区域的概念,其中有三个:HeapMemory,ScopedMemory和ImmortalMemory。 ScopedMemory允许特定线程使用内存区域。当线程终止时,内存区域会自动释放。这依赖于开发人员小心不要在线程外共享对该区域的引用。 ImmortalMemory是一个永远不会被垃圾收集的记忆区域。一旦在该区域中分配了对象,就无法回收空间(没有free()调用)。

我不同意C和C ++是符合您描述的语言的评论。既不在托管环境中运行,也不会有任何形式的并发GC。

相关问题