yellow7ming

Results 6 comments of yellow7ming

> 至少我知道两个项目在用11.8的V8_COMPRESS_POINTERS,没问题 感谢大佬回复。我说漏了一些,我们也是拿11.8重新编译的。主要是沙盒 V8_ENABLE_SANDBOX 带来的问题。报这个: Fatal error in v8_ArrayBuffer_NewBackingStore When the V8 Sandbox is enabled, ArrayBuffer backing stores must be allocated inside the sandbox address space. Please use an appropriate...

好的。我们发现指针压缩要用到外部实体表,如果不开沙盒,这个实体表就不会回收。如果js对象比较多且频繁创建,随着时间推移越来越大(比如挂机10小时),V8会自己判定自己OOM。所以才开沙盒配套解决这个问题 如果必须得开,FJsEnvImpl::BindStruct 中直接传递裸指针的处理有比较好的建议吗?

> > 好的。我们发现指针压缩要用到外部实体表,如果不开沙盒,这个实体表就不会回收。如果js对象比较多且频繁创建,随着时间推移越来越大(比如挂机10小时),V8会自己判定自己OOM。所以才开沙盒配套解决这个问题 > > 如果必须得开,FJsEnvImpl::BindStruct 中直接传递裸指针的处理有比较好的建议吗? > > 我们项目是用的11.8,没有开沙盒模式。即 v8_enable_pointer_compression=true v8_enable_sandbox=false > > "指针压缩要用到外部实体表,如果不开沙盒,这个实体表就不会回收",请问这里的实体表,指的是什么呢,具体代码在哪里? 是ExternalPointerTable超出最大限制了,v8自己抛OOM错误,用logcat才能看到。具体代码就是你楼下说的那部分SweepAndCompact。

> 我们11.8版本也遇到v8_enable_pointer_compression=true v8_enable_sandbox=false下,挂机指针压缩表的内存会泄露,10小时1个GB的水平(iOS 6GB)。查了代码就是 ExternalPointerTable里的SweepAndCompact调用必现打开 V8_ENABLE_SANDBOX宏。 关闭 v8_enable_pointer_compression V8内存泄露问题解决,但基础内存增加不少。 我们尝试打开这两个宏,构建的版本会到了登录页面自动Crash(4/4),没有Crash堆栈上报,日志也没有体现,内存才600MB占用,看Perfdog像是 上下文切换过多导致。 两个都打开的时候我们也崩溃,你用logcat看就能看到有报错堆栈,就是我帖子里贴出来那些。开沙盒后,内存分配相关代码需要调整

> 你那里的提示,说明打开沙盒宏的时候,需要在v8构建参数里指定 array_buffer_allocator 为ArrayBuffer::Allocator v8::Isolate::CreateParams CreateParams; static v8::ArrayBuffer::Allocator* DefaultAllocator = v8::ArrayBuffer::Allocator::NewDefaultAllocator(); CreateParams.array_buffer_allocator = DefaultAllocator; > > 再看了一下V8的源码,发现不打开沙盒宏的时候,ArrayBuffer::Allocator::NewDefaultAllocator的分配是系统分配,所以打开指针压缩宏(不打开沙盒宏),这个指定分配器代码也没有效果 是的,按源码来看,指针压缩还是得配套沙盒宏一起开。后续你们方案是如何