迭代脚本上的内存消耗

Cra*_*aub 9 javascript php memory node.js

我有一个用PHP编写的脚本和用Javascript编写的相同脚本.
它迭代一百万次,每次将一个字符串剥离成一个数组,并将第一个数组项分配给一个新变量.

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();
Run Code Online (Sandbox Code Playgroud)

而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();
Run Code Online (Sandbox Code Playgroud)

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

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

PHP使用0.00065 mb的内存,而Javascript使用0.25 mb,但PHP需要4秒,而Javascript需要0.71秒.我已经在两台不同的机器上运行了结果.

有没有人知道为什么Javascript内存使用量会比PHP高得多(尽管Javascript的执行速度要快得多)?

我能想到的唯一解释是V8使用隐藏类的性质可以提高速度,但会增加内存消耗.

sym*_*ean 1

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

对于 PHP,源代码被转换为一系列操作码 - 有点像 p 代码,而 v8 使用 JIT 编译器。后者在内存使用方面往往会更加浪费,但是我怀疑两者在内存使用方面的最大区别是由于垃圾收集策略不同:

$test_array = split(" ", $test_string);
Run Code Online (Sandbox Code Playgroud)

test_array = test_string.split(" ");
Run Code Online (Sandbox Code Playgroud)

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

两者都没有提供太多控制运行时内存使用的权限。