是否有任何编程语言使用垃圾收集,但也允许手动内存管理?例如,提供析构函数。编程语言是否有可能同时进行垃圾收集和手动内存管理?
相关SO问题在这里,但没有答案:
Interpreted languages with manual memory management?
谢谢
最佳答案
这绝对是可能的,但它需要语言支持从两个(或更多)内存区域分配对象(假设它是一种面向对象语言,这肯定会让生活更轻松)。
支持此功能的平台示例是 Java 实时规范 (RTSJ)。由于实时操作很容易受到非确定性 GC 的干扰,因此 RTSJ 在标准 Java 堆之外添加了可供应用程序代码使用的内存区域。 RTSJ 使用内存区的概念,其中有三个:HeapMemory、ScopedMemory 和 ImmortalMemory。 ScopedMemory 允许特定线程使用内存区域。当线程终止时,内存区域会自动释放。这依赖于开发人员小心不要在线程外共享对该区域的引用。 ImmortalMemory 是一个永远不会被垃圾回收的内存区域。一旦在这个区域分配了对象,就不可能回收空间(没有 free() 调用)。
我不同意 C 和 C++ 是符合您描述的语言的评论。两者都没有在托管环境中运行,因此也没有任何形式的并发 GC。
关于memory-management - 一种具有垃圾收集和手动内存管理功能的编程语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45686683/