幸运蛋蛋pc开奖
今天小编就为大家分享一篇关于perl6垃圾收集的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

参考计数

在perl 5中,通过参考计数。当在Perl 5中创建某物时,它的引用计数为1或更多,这使它保持活力。在最简单的情况下,如下所示:

# reference count of $a = 1, because lives in lexical pad
# lexical pad is gone, reference count to 0

在Perl 5中,如果该值是一个对象,则DESTROY方法将被调用。

Foo->
# $a->DESTROY called

如果不涉及外部资源,及时销毁只是管理程序使用的内存的另一种方式。作为一个程序?#20445;?#20320;不需要关心如何以及什么时候被回收。话虽如此,如果您需要处理外部资源,例如数据库句柄(数据库服务器提供的数据库句柄通常只有有限的数量),那么及时销毁是一个非常好的特性。参考计数可以提供这一点。

然而,引用计数有几个缺点。它采用了perl 5核心开发人员。许多数年才能使参考计数正常工作。如果你在工作Xs,您总是需要知道引用计数,以防止内存泄漏或过早

在多线程环境中保持同步变得更加困难,因为您不希望同时丢失来自多个线程的引用的任何更新(因为这会导致内存泄漏和/或外部资源不被释放)。为了避免这种情况,需要进行某种锁定或原子更新,两者都不便宜。

    请注意,perl 5 ithread更像是在解释器之间具有未共享内存的内存分叉,而不是像C这样的编程语言中的线程,因此,它仍然不需要对其引用计数进行任何锁定。

引用计数还有一个基本缺点:如果两个对象包含彼此的引用,它们将永远不会被销毁,因为它们将对方的引用计数保持在0以上(循环引用)。在?#23548;?#20013;,这往往要深入得多,更像是A -> B -> C -> A,其中A,B和C都保持着彼此的生存。

a的概念弱参考是为了避开Perl 5中的这些情况而开发的。虽然这个能,会,可以修正循环引用问题,它具有性能含义,而不是首先解决循环引用(和查找)的问题。你需要知道哪里弱引用可以方式使用?#29615;?#21017;,您可能会得到不必要的过早对象销毁。

可达性分析

由于Perl 6的核心是多线程的,所以在早期阶段就决定了引用计数在性能和维护方面都是有问题的。相反,当需要更多内存时,对象就会从内存中被逐出。和该对象可以安全地移除。

在Perl 6中能,会,可以创建一个DESTROY方法,就像在Perl 5中一样。但是你。不可能确定何时(如果有的话)它将被调用。
不进则退太多细节,Perl 6中的对象只有在垃圾收集运行启动时才被销毁,例如,当达到一定的内存限制时。只有这样,如果内存中的其他对象无法再访问一个对象和它有一个DESTROY方法,它会在对象被移除之前调用吗?

当程序退出时,Perl 6不进行垃圾回收。适用相位器(如LEAVE和END) 将要GET调用,但除了在阶段程序中运行的代码(间接)启动的垃圾收集之外,不会进行任何垃圾收集。

如果您始终需要有序关闭程序所使用的外部资源(例如数据库句柄),则可以使用位相器确保以正确和及时的方式释放外部资源。

例如,可以使用END相位器(称为END块(在Perl 5中),?#21592;?#22312;程序退出时(无论出于何种原因)正确断开与数据库的连接:

DBIishconnect "Couldn't connect"
END disconnect

注意,END相位器不需要有块(如{ ... })在Perl 6中。如果没有,则相位器中的代码与周围的代码共享词法块(Lexpad)。

上面的代码有一个缺陷:如果程序退出以前数据库连接已经建立,或者如果数据库连接由于任何原因而失败,它将仍然尝试调用.disconnect方法中的任?#25991;?#23481;。$dbh,这将导致执行错误。那里是然而,在perl 6中有一个简单的成语可?#21592;?#20813;这种情况。用与.

END disconnect with  

后缀with只有在定义给定值(通常是实例化对象)并将其主题化为$_。.disconnect是缩写$_.disconnect.

如果您希望随时清理外部资源,那么?#27573;?#36864;出,您可以使用LEAVE?#27573;?#20869;的相位。

DBIishconnect -> 
  LEAVE disconnect # no need for `with` here
  # do your stuff with the database
say "Could not do the stuff that needed to be done"

作用域if是左边的,任何LEAVE相位器将被执?#23567;?#22240;此,每当代码在该?#27573;?#20869;运行时,数据库资源将被释放。

摘要

尽管perl 6没有及时销毁perl 5用户习惯的对象,但是是吗?具有易于使用的替代方法,以确保外部资源的管理,类似于Perl 5中的方法。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对爱安网的支持。如果你想了解更多相关内容请查看下面相关链接

最新资讯
人民日报批视频网站VIP额外付费?#22909;?#35270;用户权益

人民日报批视频网站VI

VIP之外设置VVIP,额外掏钱才能享受超前点播,视频网站是
小鹏汽车股东集体出质全部股权

小鹏汽车股东集体出质

据国家企业信用信息公示系统显示,小鹏汽车运营主体广州
商汤与?#20351;?#25991;化推互动展览 AI如何赋能传统文化?

商汤与?#20351;?#25991;化推互动

商汤科技与?#20351;?#25991;化携手合作,将创新的人工智能技术与中
一线明星纷?#36164;?#19994; 整个2019年65%的演员无剧播出

一线明星纷?#36164;?#19994; 整

演员们到底面临怎样的生存状况?什么样的演员才有?#36153;藎?
挪威电信公司宣布 华为爱立信为5G网络供应商

挪威电信公司宣布 华

挪威电信运营商Telenor在其官网上宣布,公司在5G网络建
最新快递业务量公布:1-11月累计完成567.9亿件

最新快递业务量公布:1-

数据显示,1-11月,?#25910;?#34892;业业务收入(不包括?#25910;?#20648;蓄银行直
最新文章
将Perl5代码迁移到Perl6上的解决方案

将Perl5代码迁移到Per

今天小编就为大家分享一篇关于将Perl5代码迁移到Perl6
Perl 批量添加Copyright版权信息

Perl 批量添加Copyrig

?#36816;?#26377;输入文件,如果没有版权信息则加上版权信息,否则什
Perl字符串处理函数大全

Perl字符串处理函数大

本文重点?#33268;跴erl字符串处理函数的用法,每种函数都有
Perl中常见符号与操作

Perl中常见符号与操作

这篇文章主要介绍了Perl中常见符号与操作,需要的朋友
Perl学习教程之单行命令详解

Perl学习教程之单行命

这篇文章主要给大家介绍了关于Perl学习教程之单行命令
使用Perl生成随机密码

使用Perl生成随机密码

本文给大家分享的是使用perl生成随机密码的方法示例,而
幸运蛋蛋pc开奖 篮球世界杯 小镇彩票投注站赚钱吗 河南快3开奖号码今天专家推测 双色球机选号码 西甲皇马3比1巴萨录像 一元赚钱新闻提现 华东15选5注册 2008年上证指数走势图 贵州11选5综合走势图 重庆欢乐生肖走势图爱彩乐