Speicherverbrauch in einem Iterationsskript

9

Ich habe ein Skript in PHP geschrieben und das gleiche Skript in Javascript geschrieben.
Es wiederholt sich millionenfach und löscht jedes Mal eine Zeichenfolge in ein Array und ordnet das erste Array-Element einer neuen Variablen zu.

Das PHP ist:

%Vor%

Und das Javascript ist:

%Vor%

Ich betreibe PHP mit PHP-CLI 5.3.10 und das Javascript mit Knoten v0.6.12.

Für PHP verwende ich 'memory_get_usage ()' und für Javascript verwende ich 'process.memoryUsage ()'. Ich führe sie am Anfang des Skripts, dann am Ende, dann minus Ende mit Start und schließlich die Anzahl der Bytes in mb umwandeln.

Die PHP verwendet 0,00065 MB Speicher, während Javascript 0,25 MB verwendet, aber PHP dauert 4 Sekunden und Javascript dauert 0,71 Sekunden. Ich habe die Ergebnisse auf 2 verschiedenen Maschinen ausgeführt.

Weiß jemand, warum die Javascript-Speicherbelegung so viel höher ist als die der PHPs (trotz der Tatsache, dass Javascript so viel schneller ausgeführt wird)?

Die einzige Erklärung, die ich mir einfallen lassen könnte, ist die Tatsache, dass der V8 durch die Verwendung von Hidden Classes die Geschwindigkeit erhöht, aber den Speicherverbrauch erhöht.

    
Craig Taub 14.01.2013, 14:04
quelle

1 Antwort

1

Weil sie sehr unterschiedliche Ausführungsumgebungen sind.

Im Fall von PHP wird die Quelle in eine Reihe von Opcodes umgewandelt - ähnlich wie p-Code, während v8 einen JIT-Compiler verwendet. Letzteres neigt dazu, mit der Speicherauslastung profilgate zu sein, aber ich vermute, dass der größte Unterschied zwischen den beiden für die Speicherauslastung auf unterschiedliche Richtlinien für die Speicherbereinigung zurückzuführen ist:

%Vor%

und

%Vor%

Erstellen Sie ein Objekt auf dem Stapel, das am Ende jeder Iteration verworfen wird.

Beide bieten keinen großen Zugriff auf die Steuerung der Laufzeitspeicherbelegung.

    
symcbean 14.01.2013, 17:09
quelle

Tags und Links