如何禁用 perl 的垃圾收集器?

How to disable perl's garbage collector?

我有一个短暂的(快速完成)perl 脚本,它仍然使用足够的内存来触发垃圾收集器。反过来,收集比其余处理花费更多。

有没有办法禁用垃圾收集并让 OS 在脚本退出时执行?

编辑 GC 在脚本中间暂停脚本,而不是在最后。 KILL没用。

在不执行全局销毁的情况下快速退出程序的两种方法:

  1. POSIX::_exit

This is identical to the C function _exit(). It exits the program immediately which means among other things buffered I/O is not flushed.

  1. kill 你的主进程 SIGKILL.

    kill 'KILL', $$;
    

如评论中所述,Perl 中的垃圾收集是一种引用计数机制,由不再被任何东西引用的值触发(无论是存储它的变量可能超出范围还是被分配了不同的变量)值、它所属的操作、它传递的子例程调用堆栈或实际的 reference).

所以为了防止一个值在程序退出之前被清除,最简单的方法是做与传统的内存意识智慧相反的事情:从全局存储中引用该值。

our $foo = $something_to_keep_alive;

或者,您可以(滥用)使用循环引用将阻止引用计数递减直到全局销毁的事实。

$something->{self} = $something;

这将导致值引用自身,即使通过另一层完成,直到循环中的引用之一被削弱、移除或达到全局破坏。同样,在正常情况下肯定会避免某些事情,因为这是设计使然的内存泄漏。