Itapon at tapusin

Anonim

Sa mga programming language, ang isang bagay ay maaaring magkaroon lamang ng variable sa panahon ng pagkakaroon nito, pagkatapos instantiation hindi ito maaaring baguhin. Ang parehong memory cell ay hindi maaring ilaan sa mga bagong halaga, kaya ang isang uri ng automated memory management ay kinakailangan upang pamahalaan ang hindi nagamit na mga puwang. Ang mga hindi ginagamit na puwang ay tinatawag na basura at ang buong proseso ng mahusay na pamamahala ng memorya ay tinatawag na koleksyon ng basura.

Ang pangunahing layunin ng isang kolektor ng basura ay upang paghiwalayin ang mga patay na bagay mula sa mga live na bagay at ibalik ang espasyo para sa muling paggamit. Talaga, ang buong bagay ay gumagana sa pinamamahalaang bunton, na walang anuman kundi isang bloke ng memorya at ang tagakolekta ng basura ay regular na sumusuri sa memory ng magbunton upang maglaan ng memorya sa mga bagong bagay. Mayroong dalawang mga paraan upang pakawalan ang mga mapagkukunan na hindi pinamamahalaan tulad ng mga file at mga koneksyon sa database: Magtapon at Magtapos.

Tinutulungan ka ng artikulong ito na maunawaan ang pagkakaiba ng dalawa.

Ano ang Paraan ng Itapon?

Itatapon ang isang standard na paraan para sabihin ng mga user ang mga bagay upang palabasin ang kanilang mga mapagkukunan at hindi upang subukang i-access muli ang mga bagay. Ang paraan ng pagtatapon ay nagbibigay ng kontrol sa tahasang paglilinis ng memorya sa pamamagitan ng pag-render ng mga bagay na hindi magamit.

Kapag tinawagan ng mga user ang Dispose () method, ang bagay ay dapat na palayain ang lahat ng mga mamahaling mapagkunan nito at sa gayon ginagawa itong magagamit para sa muling paggamit. Ito ay hindi kailanman tinatawag sa pamamagitan ng kolektor ng basura na kung saan ay dumating lamang upang i-play kapag pinamamahalaang memorya ay nagiging mahirap makuha. Ang isang espesyal na interface na tinatawag na "IDisposable" ay ginagamit upang magpasya kung saan at kung paano ipatupad ang Itapon (). Ngunit ano ang nangyayari kapag ang dispose method ay hindi na tinatawag?

Ano ang Paraan ng Finalize?

Kung ang paraan ng pagtapon ay hindi matawag, ang plano ng fallback ay ang paggamit ng Finalize () na paraan para sa paglilinis. Tinatawag ito ng kolektor ng basurahan upang magsagawa ng panghuling pag-aalis ng mapagkukunan bago mapalaya ang memorya. Ang konsepto ng napapanahong paglilinis ay naging di-angkop dito dahil sa halip na de-allocating ang memorya kaagad, ang bagay ay idaragdag sa finalize queue lamang upang malilipol mamaya. Ang pagtatapos ay mas katulad ng isang pananggalang na inilalagay sa lugar kung ang isang error sa programming at ang itatapon ay hindi linisin ang mga mapagkukunan kung saan ang paraan ng Finalize () ay tinatawag ng kolektor ng basura upang alisin ang mga hindi maabot na mga bagay sa anumang pagkakasunud-sunod na kagustuhan nito.

Pagkakaiba sa pagitan ng Itapon at I-Finalize

Mga Pangunahing Kaalaman ng Pagtapon at Pagkumpleto

Ang paraan ng pagtatapon ay tinatawag upang pabilisin ang paglabas ng mga mapagkukunang hindi pinamamahalaan na gaya ng mga humahawak sa database, mga humahawak ng file, mga semaphore, at iba pang mga bagay na inilaan ng operating system. Ang paraan ng pagtatapon ay ginagamit upang maisagawa ang kinakailangang code upang linisin ang hindi nagamit na memorya at mga kakulangan ng mapagkukunan tulad ng mga GDI na humahawak. Sa madaling salita, ang paraan ng pagtatapon ay nagbibigay ng kontrol sa tahasang paglilinis ng memorya. Ang paraan ng pagwawakas, sa kabilang banda, ay bahagi ng koleksyon ng basura na ginagamit upang maisagawa ang panghuling paglilinis sa isang bagay bago ito nakolekta. Sa simpleng paraan, tinatapos ang paraan upang makumpleto ang mga mapagkukunan na hindi pinamamahalaan ng isang bagay bago ito sirain.

Pag-invoke ng Itapon at Pagkukumpleto

Ang paraan ng pagtapon ay maaaring tawagin nang tahasan ng user code at ng klase na nagpapatupad ng paraan upang magtapon ng mga mapagkukunan. Gayunpaman, ang memorya ay hindi maaaring palayain hanggang ang kolektor ng basura ay gumaganap sa proseso ng paglilinis. Ang pamamaraan ay maaaring tawagin kahit na ang iba pang mga sanggunian sa bagay ay umiiral pa rin. Ang panghuling pamamaraan, sa kabaligtaran, ay maaaring mahawakan ng kolektor ng basura pagkatapos na ito ay tumutukoy na ang pangwakas na pangwakas na bagay ng memorya ay nawasak at wala nang mga sanggunian sa bagay na umiiral. Pagkatapos na maisakatuparan ang paraan ng pag-finalize, ang bagay ay aalisin mula sa memorya ng heap.

Pagpapatupad ng Dispose and Finalize

Ang proseso ng pagtatapon ng isang bagay mula sa memorya ay tinatawag na dispose pattern, na maaaring magamit para sa mga bagay na mag-access ng mga mapagkukunan na hindi pinamamahalaan dahil hindi maibabalik ng basurero ang mga mapagkukunan na hindi pinamamahalaan. Ang interface na "IDisposable" kasama ang isang karagdagang Dispose (Boolean) na pamamaraan ay ipinatupad na humihingi ng pagpapalabas ng mga mapagkukunang hindi pinamamahalaan. Ang isang paraan ng pag-finalize ay papatayin kapag ang isang bagay ay nawasak bago ang deallocation nito. Ito ay isang non-deterministic na pamamaraan na nangyayari sa paghuhusga ng kolektor ng basura at maaaring hindi mangyari. Hindi ito dapat ipatupad sa mga pinamamahalaang bagay hanggang sa lubos na kinakailangan.

Pagganap ng Pagtatapon at Pagkukumpleto

Ito ay mas mabilis na gumamit ng paraan ng pagtatapon sa halip na makatapos para sa instant na pagtatapon ng mga bagay. Ang mga destructor ay awtomatikong na-convert upang i-finalize ang pamamaraan sa runtime. Ito ay awtomatikong tinataw ng kolektor ng basura kapag ang bagay ay lumabas sa saklaw, na kadalasang nangyayari kapag nawala ang pangyayari ng bagay na iyon. Ang problema sa paraan ng pagsasakatuparan ay na ito ay di-deterministikong kahulugan na ito ay hindi tiyak kung kailan ibabalik ang memorya na hindi na naka-reference sa pamamagitan ng pagkolekta ng basura. Gayunpaman, maaaring hindi ito agad na malaya ang memorya; sa katunayan, hindi ito maaaring tawagin at hindi ito maaaring sapilitang malinaw.

Itapon kumpara sa Finalize: Chart ng Paghahambing

Buod ng Dispose vs Finalize

Ang pangunahing pagkakaiba sa pagitan ng pagtapon at pagtatapos ng mga pamamaraan ay ang dating ay isang deterministikong pamamaraan na agad na nagtatapon ng mga bagay kapag hindi na ginagamit ang mga ito, habang ang huli ay isang di-deterministikong paraan para sa paglalaan ng mga mapagkukunang hindi pinangangasiwaan na nangangahulugang ito ay isang paraan ng pag-back up upang palayain Mga bagay na memory na pangyayari kapag lumabas sila ng saklaw bago ang kanilang deallocation.Laging maipapayo na gamitin ang paraan ng pagtapon sa pagtatapos maliban kung lubos na kinakailangan.

Sa ibang mga termino, i-finalize ang isang pananggalang na inilalagay sa lugar upang linisin ang mga mapagkukunan na hindi pinamamahalaan kung ang paraan ng pagtatapon ay hindi maaaring tawagan sa kaganapan ng ilang error sa programming. Ang paraan ng pag-finalize ay tinatawag ng kolektor ng basura kapag ang isang bagay ay malapit nang maipaalis ng memorya ng heap.