我有一个用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();
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()'。我在脚本开始时运行它们,然后在结束时运行它们,然后在start结束时运行它们,最后将字节数转换为mb。
PHP使用0.00065 mb的内存,而Javascript使用0.25 mb但PHP需要4秒,而Javascript需要0.71秒。我已经在两台不同的机器上运行了结果。
有人知道为什么Javascript内存使用量会比PHP高得多(尽管Javascript的执行速度要快得多)?
我能想到的唯一解释是V8使用Hidden类的本质可以提高速度,但会增加内存消耗。
答案 0 :(得分:1)
因为它们是非常不同的执行环境。
在PHP的情况下,源被转换为一系列操作码 - 有点像p代码,而v8使用JIT编译器。后者将更倾向于使用内存,但我怀疑2内存使用的最大区别是由于不同的垃圾收集策略:
$test_array = split(" ", $test_string);
和
test_array = test_string.split(" ");
在堆栈上创建一个对象,在每次迭代结束时将其丢弃。
两者都没有提供对控制运行时内存使用的大量访问权。