Birisi lütfen gc_collect_cycles işlevinin hangi durumlarda yararlı olabileceğini açıklayabilir mi? Önemli bir bellek kullanımı gerçekleşmeden önce çağrılmalıdır?Ne gc_collect_cycles işlevi yararlıdır?
cevap
PHP'de "Çöp Toplayıcısı" varsayılan olarak etkindir. "Çöp" tarafından kullanılan belleği boşaltmak için kullanılır. gc_collect_cycles()
mevcut herhangi bir çöp çevriminin toplanmasını zorlar. Toplanan (serbest) döngülerin sayısını döndürür (nesneler, değişken değerler ...). Etkinleştirilmiş Çöp Toplayıcı, bu işlevi dahili olarak zaman zaman serbest kaynaklara çağırır. Çoğu durumda PHP betiği çok kısa bir süre yaşıyor. Bu durumda tüm çöpler işin sonunda hiçbir çöp toplama olmadan imha edilecek.
Bazen elle GC yönetmek için ihtiyaç duyulan:
gc_disable()
bazı uzun işlemlerini hızlandırmak değil, aynı zamanda bazı bellek genel giderler ile sonuçlanır olabilir. GC'nin doğru anlarını belirtmek içingc_collect_cycles()
kullanılabilir.
gc_collect_cycles()
- debugging işlevini kullanmanın bir başka nedeni. Varsayalım, memory_get_usage()
ile bir kod bloğunun hafıza tüketiminin ne olduğunu bilmek istersiniz. İlk önce GC'yi devre dışı bırakmanız gerekir, başka bir yerde yanlış sonuçlar elde edersiniz. Bundan sonra, GC ve uygulamanız tarafından tüketilen zamanı ayırmak istersiniz. Yani gc_collect_cycles()
'u arayın ve zamanlamaları/belleği önce ve sonra ölçün.
Küçük bir örnek:
class A {
public $ref;
public $name;
public function __construct($name) {
$this->name = $name;
echo($this->name.'->__construct();'.PHP_EOL);
}
public function __destruct() {
echo($this->name.'->__destruct();'.PHP_EOL);
}
}
gc_disable();
$a1 = new A('$a1');
$a2 = new A('$a2');
$a1->ref = $a2;
$a2->ref = $a1;
$b = new A('$b');
$b->ref = $a1;
echo('$a1 = $a2 = $b = NULL;'.PHP_EOL);
$a1 = $a2 = $b = NULL;
echo('gc_collect_cycles();'.PHP_EOL);
echo('// removed cycles: '.gc_collect_cycles().PHP_EOL);
echo('exit();'.PHP_EOL);
Will çıkışı:
$a1->__construct();
$a2->__construct();
$b->__construct();
$a1 = $a2 => $b = NULL;
$b->__destruct();
gc_collect_cycles();
$a2->__destruct();
$a1->__destruct();
// removed cycles: 4
Bu sorulduğunda sadece $b
tahrip edildi anlamına gelir. Diğer $a1
ve $a2
döngüsel referanslara sahiptir ve name
özellikleri de bellek tüketir. İki nesne + iki dizgi = 4 (gc_collect_cycles()
tarafından kaldırıldı).
- 1. Yaralar ne için yararlıdır?
- 2. RExcel yararlıdır? veya
- 3. Segmentasyon nasıl yararlıdır?
- 4. .subscribe() işlevi ne yapar
- 5. (Kestrel) K-birleştirici: neden yararlıdır?
- 6. PHP'de _ ($ string) işlevi ne yapıyor?
- 7. Bu Ruby işlevi ne yapıyor?
- 8. SQL, Postgres OID'ler, Nelerdir ve neden yararlıdır?
- 9. HTML5'te tuval etiketi nasıl yararlıdır?
- 10. "Bu durumu" javascript işlevi içinde ne yapar?
- 11. jQuery ajax ve "ne zaman" işlevi
- 12. CasperJS'de "test.begin()" işlevi ne anlama geliyor?
- 13. Php PDO işlevi ne kadar güvenli: lastInsertId?
- 14. boş Javascript işlevi? Bunun anlamı ne?
- 15. Niçin "uçucu int * p" gibi bir uçtan uca işaretçi yararlıdır?
- 16. Kalıtsal üyelere "yoluyla" miras alınan türlere erişmek neden yararlıdır?
- 17. "BODMAS" terimi ne anlama geliyor?
- 18. php işlevi 'aşırı yüklenme' ne yapar? PHP belgelerine göre
- 19. javascript işlevi bir dönüş ifadesi olmadan ne döndürür?
- 20. İşaretçi yoksa, fabrika işlevi işaretçisini alırsa ne olur?
- 21. GCC'nin __builtin_malloc() işlevi ne tür iyileştirmeler düz `malloc()` sağlar?
- 22. Birden çok ok işlevi javascript'te ne anlama geliyor?
- 23. Aşağıdaki LISP değerlendirme işlevi verildi - defmacro eklemek için ne gerekiyor?
- 24. Çalışma zamanı platformunda bulunmayan bir işlevi DllImport ettiğimde ne olur?
- 25. Bir işlevi başka bir adama ne zaman bağlayabilirim? tercüman çalışırken
- 26. CDialog.DoModal() işlevi, iletişim kutusu oluşturulamadığında ne zaman başarısız olur?
- 27. jquery seçici döngü işlevi aynı işlevi kullanma
- 28. C++ Çağrı İşlevi Üye İşlevi
- 29. C++: İşaretçi işlevi işlevi işaretçi
- 30. Php işlevi
Bu yardımcı olur mu? http://php.net/manual/en/features.gc.collecting-cycles.php –
gc_collect_cycles sadece GC * * devre dışı * için gerçekten yararlıdır. – user2864740