@cycap: JEGO: "kann mir jemand sagen ob man diesem Artikel glauben kann?"
Ankündigung
Einklappen
Keine Ankündigung bisher.
Garbage Collection
Einklappen
Neue Werbung 2019
Einklappen
X
-
@phphatesme: cycap: "kann mir jemand sagen ob man diesem Artikel glauben kann?"![COLOR="#F5F5FF"]--[/COLOR]
[COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
„Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
[URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
[COLOR="#F5F5FF"]
--[/COLOR]
Kommentar
-
cortex
Zitat von phphatesme Beitrag anzeigenBrauchst ihn also nicht, ohne Fakten aufzuführen, schlecht machen. Das ist das einzige, was ich von dir verlange.
1. ich habe zu beginn des threads meinen persönlichen eindruck geschildert; das hat mit schlecht machen nichts zu tun.
2. hör endlich auf, rumzuheulen und dich zu rechtfertigen; lerne statt dessen, mit kritik umzugehen.
3. erzähl mir nichts von 1000 fliegen und einem grossen haufen sch***
4. du hast gar nichts von mir zu verlangen, du machst doch auch, wozu du lust hast.
5. du solltest das ganze in deinem blog aufarbeiten - deine leser lieben dich und werden dir zuspruch spenden.
die diskussion ist an dieser stelle für mich beendet.
cx
Kommentar
-
Zitat von phphatesme Beitrag anzeigen@cycap: JEGO: "kann mir jemand sagen ob man diesem Artikel glauben kann?"Zitat von nikosch@phphatesme: cycap: "kann mir jemand sagen ob man diesem Artikel glauben kann?"!
Kommentar
-
Diesen Artikel von php hates me kannst Du prinzipiell schon ernst nehmen. PHP hat seit Jahr und Tag ein gewisses Problem mit zyklischen Referenzen. Auch richtig ist, dass es einen Patch dagegen gibt, der mit 5.3 übernommen wurde.
Allerdings: Man kann bei PHP extrem leicht Speicher verschenken. Zyklische Referenzen in adequater Menge um den Speicher vollaufen zu lassen, produziert man eigentlich nur im Ausnahmefall. Ich persönlich weiß nicht, was Du da machst, und ich kenne Deinen (Cycaps) Programmierstil nicht, ich würd aber vorher wirklich erstmal versuchen, alle anderen Ursachen auszuschließen.
Der Vollständigkeit halber kannst Du ja mal versuchen, die hier vorgeschlagene Userland Solution in Dein Projekt zu integrieren, aber wie gesagt...
Gruß Jens
Kommentar
-
Hallo Jens,
ich hatte bereits geschrieben was genau ich tue (haste vielleicht überlesen?) und da Doctrine anscheinend für das gleiche Problem einen workaround geschrieben hat liegts wohl nicht an meinem Programmierstil, mal abgesehen davon, das ich das ORM ja gar nicht selbst programmiert habe. Mein TESTscript dafür beinhaltet ja nicht viel:
PHP-Code:$step = 1000;
$start = 0;
$count = StockCollection::ProvideBySQL('SELECT COUNT(*) count,1 ident FROM stock')->GetEntry()->calculatedFields['count'];
$ways = ceil($count/$step);
for($x=0;$x<$ways;$x++){
$data = StockCollection::ProvideBySQL('SELECT * FROM stock LIMIT '.$start.','.$step);
$start = $start + $step;
unset($data);
}
Kommentar
-
Ja, sorry, das hatte ich wirklich überlesen. Dein Problem ist dann aber nicht von Deiner Seite aus lösbar, falls es sich denn wirklich um ein Problem mit zyklischen Referenzen handelt. Es kann ja durchaus auch sein, dass StockCollection sich wo ganz anders verfranst.
Der o.g. Skriptteil kann auf jeden Fall schon mal nicht für den Speicherwahnsinn verantwortlich sein. Wobei Du ja durchaus testen kannst, ob es sich um ein Problem mit zyklischen Referenzen handelt, indem Du einfach mal irgendwo eine 5.3er Version aufsetzt und schaust, was der optimierte GC daraus macht...
Gruß Jens
Kommentar
-
hi,
zunächst einmal ist festzuhalten, das PHP wirklich nicht immer direkt den speicher freigibt. dies ist nicht dem Garbage Collector direkt zuzuschreiben, sondern vor allen dingen den caches und typproblemen.
ein problem von PHP ist, das es speicher eben anhand der daten reservieren muss weil nichts weiteres - wie z.b. datentypen - definiertist. so wird PHP beim system bei folgendem bis script ende (wahrscheinlich) mindestens speicher für den ersten block reserviert:
PHP-Code:$a='asdfasdfasdfasdfasdfasdfasdf';
$a='a';
um zum artikel zu kommen:
PHP uses an array internally to store all objects. When you create more
objects, the array is grown. When you destroy some objects, the array is
not resized, so that creating other objects is faster.
This is the difference you see; ~32 bytes per object.
This is not due to the allocator. There is a few other caches of this
kind in PHP that make it running faster.
ein weiteres problem (besonders bei komplexen scripten) sind referenzen*, die genutzt werden um so wenig duplikate wie möglich zu erhalten. ich muss mal schauen, ob ich das PDF wieder finde.
* referenzen werden automatisch erzeugt, z.b.:
PHP-Code:$a=1;
$b=$a;
debug_zval_dump($a); // refcount(2)
[B]PHP4?!?[/B]>>>[B]Aktuelle[/B] PHP Version: [B]5.2.11 || 5.3.0
[URL="http://en.opensuse.org/Factory/News"]Suse 11.2 *vorfreude*[/URL]
[/B]
Kommentar
Kommentar