Zyklische Referenzen in PHP 7.4

Regen

In PHP 7.4 habe ich festgestellt, dass die Anzahl der von gc_collect_cycles zurückgegebenen gesammelten Zyklen immer Null ist, wenn es eine destructorMethode in einem zyklisch referenzierten Objekt gibt.

class A {
    public function __destruct() {

    }
}
gc_disable();

$a1 = new A;
$a2 = new A;

$a1->ref = $a2;
$a2->ref = $a1;

$a1 = $a2 = NULL;

echo('removed cycles: '.gc_collect_cycles()); // Output: removed cycles: 0

Wenn ich die __destructMethode entferne, lautet die Ausgabe:

removed cycles: 2

Sie können sehen, dass dieses Verhalten ab PHP 7.4.0beta4 gestartet wurde

Was geht hier vor sich ? Werden Müllzyklen im Destruktor gesammelt, auch wenn GC deaktiviert ist?

NikiC

Seit PHP 7.4 ruft der erste Speicherbereinigungslauf nur Destruktoren für Objekte auf, über die sie verfügen, und die tatsächliche Zerstörung des Objekts wird auf den nächsten GC-Lauf verschoben. Sie können dies sehen, wenn Sie zwei Aufrufe von gc_collect_cycles () ausführen: https://3v4l.org/0LIVn

Der Grund für dieses Verhalten ist, dass Destruktoren zusätzliche Verweise auf das Objekt einfügen können, sodass es nicht mehr gültig ist, es zu zerstören. Frühere Versionen verwendeten eine unzuverlässige Heuristik, um diesen Fall zu erkennen. PHP 7.4 verzögert stattdessen die Zerstörung auf einen separaten GC-Lauf.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Php extensions on centos7 php7.x

분류에서Dev

Is PHP 7.2 compatible with Windows 7

분류에서Dev

PHP7 on ubuntu 12.04

분류에서Dev

Facebook PHP SDK 4

분류에서Dev

Red Hat 7의 PHP 7.1에이 PECL 패키지 (PDO_4D)를 어떻게 설치합니까?

분류에서Dev

Sitecore 7 및 MVC 4 통합

분류에서Dev

폐지 된 PHP4 스타일 클래스 생성자의 사용이 PHP 7부터 지원되지 않습니까?

분류에서Dev

How to enable PostgreSQL driver for PDO for php 7?

분류에서Dev

how to configure wordpress to run with PHP 7

분류에서Dev

PHP7 does not install on Ubuntu with PPA

분류에서Dev

PHP7 FPM Refusing to Start

분류에서Dev

php7 설치 시도

분류에서Dev

Digitalocean에 PHP 7 설치

분류에서Dev

Cannot install php-curl on Ubuntu 16.04 & PHP 7

분류에서Dev

How to install php 7 to run beside php 5 on ubuntu with nginx

분류에서Dev

Docker는 Memcache 확장과 함께 PHP-7-fpm을 설치합니까? config.m4를 찾을 수 없음으로 실패

분류에서Dev

4 비트 BCD-7 세그먼트

분류에서Dev

OpenCV JavaCamera 버그? (Nexus 7의 OpenCV 4 Android)

분류에서Dev

Netty 4, Java 7 JVM SIGSEGV crash under load

분류에서Dev

NuGet Entity Framework 6.1.3 as default not 7 Beta 4

분류에서Dev

PHP 날짜 4 주 전

분류에서Dev

Log4php wrong time

분류에서Dev

PHP (Laravel 4) 및 PostgreSQL 검색

분류에서Dev

Installing obsolete libapache-mod-php4

분류에서Dev

laravel 4 HAML 파일 + php var

분류에서Dev

php.ini에 PHP 4 ~ 5 변경

분류에서Dev

PHP 5에서 PHP 7로 PHP imagecreatetruecolor를 구현하는 방법

분류에서Dev

IIS7 / PHP / Laravel에서 PUT 및 DELETE

분류에서Dev

PHP7 데비안 apt-get