memory-management - 一种具有垃圾收集和手动内存管理功能的编程语言

标签 memory-management garbage-collection

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

相关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/

相关文章:

iphone - 用于执行异步 Web 请求的便捷类的内存管理

c++ - C/C++ 中的并发编程、堆栈和堆

python - CPython 合并排序的意外性能曲线

java - 焊接实例<>和垃圾收集器

java - 单元化字段是否消耗内存?

ios - 如何管理 ios ARC 项目中的内存分配问题

ruby-on-rails - 如何使用 MongoMapper 追踪内存泄漏?

Python:当为变量分配新内容时, "old"内存是否已释放?

java - 为什么默认的java最大堆是物理内存的1/4?

c# - 为什么事件处理程序会阻止垃圾收集器的发生