我知道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杀手杀死了我的应用程序。为什么它以这种方式工作?也许这个函数包含内存泄漏或我需要释放一些东西。
非常感谢!
答案 0 :(得分:1)
我只敢打赌,在纯v8使用中,从'JSON :: parse'返回的json会立即被销毁,而在node.js中,它会在循环外部异步收集垃圾。尝试在重新生成的向量中对返回的jsons进行块化,看看性能是否会提升。