We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
根据v8的标准做法,原生对象通过FunctionTemplate来封装。 但FunctionTemplate->GetFunction之后,这个Function会被缓存下来(在一个slow_template_instantiations_cache对象里,在用inspector的memory snapshot可以看到),甚至FunctionTemplate不引用,Function也一直不释放。
在unity的这个版本 668369e 可以很容易的观察到这现象: pesapi_create_function可以构造一个函数,并且期望这个函数释放时,能够触发finalize回调,但实际上这回调一直不释放,而同样通过SetWeak去注册gc回调的c#对象是可以触发回调的。
而有个项目通过看v8源码发现,这个行为默认如此,也没发现直接的接口可以调整这个行为,但有个hacker的方式:如果FunctionTemplate Set了一个ObjectTemplate后,这个FunctionTemplate 就会变成不cache函数。
可以通过这个来实现函数的回收。
The text was updated successfully, but these errors were encountered:
对于pesapi_create_function直接用这个hacker方式是安全的,但其它地方需要考虑no_cache后,每次函数都会是新的问题。
Sorry, something went wrong.
[unity]解决pesapi_create_function内存不回收的问题,原因见: #1945
09cfff3
[unity]解决pesapi_create_function内存不回收的问题,原因见: Tencent#1945
e48a664
No branches or pull requests
detail | 详细描述
根据v8的标准做法,原生对象通过FunctionTemplate来封装。
但FunctionTemplate->GetFunction之后,这个Function会被缓存下来(在一个slow_template_instantiations_cache对象里,在用inspector的memory snapshot可以看到),甚至FunctionTemplate不引用,Function也一直不释放。
在unity的这个版本 668369e 可以很容易的观察到这现象:
pesapi_create_function可以构造一个函数,并且期望这个函数释放时,能够触发finalize回调,但实际上这回调一直不释放,而同样通过SetWeak去注册gc回调的c#对象是可以触发回调的。
而有个项目通过看v8源码发现,这个行为默认如此,也没发现直接的接口可以调整这个行为,但有个hacker的方式:如果FunctionTemplate Set了一个ObjectTemplate后,这个FunctionTemplate 就会变成不cache函数。
可以通过这个来实现函数的回收。
The text was updated successfully, but these errors were encountered: