为什么v8 :: JSON :: Parse从v8比NodeJS JSON :: parse慢得多?

时间:2016-10-08 21:08:14

标签: javascript c++ json node.js v8

我知道NodeJS建立在V8之上。这就是为什么它看起来很奇怪,当我的c ++包装器在394秒内解析json文件(2 Mb)并且NodeJS脚本在167秒内解析同一个json文件时。

在C ++中,我以这种方式调用parse json

v8::MaybeLocal<v8::Value> jsonData = v8::JSON::Parse(isolate, v8::String::NewFromUtf8(isolate, data));

并在NodeJS JSON.parse(data)

当我在这样的循环中调用v8::JSON::Parse

for (int i = 0; i < 1000; i++) {
  v8::JSON::Parse(isolate, v8::String::NewFromUtf8(isolate, data));
}
它占用了我所有的记忆,而OOM杀手杀死了我的应用程序。为什么它以这种方式工作?也许这个函数包含内存泄漏或我需要释放一些东西。

非常感谢!

1 个答案:

答案 0 :(得分:1)

我只敢打赌,在纯v8使用中,从'JSON :: parse'返回的json会立即被销毁,而在node.js中,它会在循环外部异步收集垃圾。尝试在重新生成的向量中对返回的jsons进行块化,看看性能是否会提升。