内存消耗迭代脚本

我有用PHP编写的脚本和用Javascript编写的相同的脚本。
它迭代一百万次,每次将一个string剥离到一个数组中,并将第一个数组项赋给一个新的variables。

PHP是:

class First { public function Iterate() { $count = 1000000; $test_string = ''; $test_array = ''; $first_word = ''; for($i=1; $i <= $count; $i++){ $test_string = 'This is a test string'; //could use explode but no explode in js $test_array = split(" ", $test_string); $first_word = $test_array[0]; } } } $first = new First(); $first->Iterate(); 

而Javascript是:

 function First() { this.Iterate = function() { count = 1000000; test_string = ''; test_array = ''; first_word = ''; for(var i=1;i <= count; i++){ test_string = 'This is a test string'; test_array = test_string.split(" "); first_word = test_array[0]; } } } first = new First(); first.Iterate(); 

我用PHP-CLI 5.3.10运行PHP,用节点v0.6.12运行Javascript。

对于PHP,我使用'memory_get_usage()',对于Javascript我使用'process.memoryUsage()'。 我在脚本的开始处运行它们,然后在最后,然后减去结束,最后将字节数转换为mb。

PHP使用0.00065 mb的内存,而JavaScript使用0.25 mb,但PHP需要4秒,JavaScript需要0.71秒。 我已经在2个不同的机器上运行结果。

有谁知道为什么Javascript的内存使用率会比PHP高很多(尽pipeJavascript的执行速度非常快)。

我能想出的唯一解释是V8的本质使用隐藏类提高了速度,但增加了内存消耗。

因为它们是非常不同的执行环境。

在PHP的情况下,源代码被转换成一系列的操作码 – 类似于p代码,而v8使用JIT编译器。 后者将更倾向于内存使用的profilgate,但是我怀疑内存使用的2之间的最大区别是由于不同的垃圾收集策略:

 $test_array = split(" ", $test_string); 

 test_array = test_string.split(" "); 

在堆栈上创build一个在每次迭代结束时被丢弃的对象。

既不提供太多的访问来控制运行时的内存使用情况。

Interesting Posts