laruence / php-lua

This extension embeds the lua interpreter and offers an OO-API to lua variables and functions.
http://pecl.php.net/package/lua
Other
149 stars 50 forks source link

解决内存持续增加的问题&一大波调整 #49

Closed flysion closed 2 years ago

flysion commented 3 years ago

本提交主要是为了解决 \Lua::$_callbacks 保存PHP闭包导致内存持续增加的问题。新的改动使用 php_lua_object.callbacks 保存PHP闭包,并在 free_obj 中对 php_lua_object.callbacks 进行销毁。php_lua_object.callbacks 的传递通过 lua_getextraspace 实现(需要lua5.0支持,如果能通过 php_lua_object.L 计算出 php_lua_object.callbacks 那就不用 lua_getextraspace 了) 所有更新如下:

  1. 用 php_lua_object.callbacks 代替 \Lua::$_callbacks
  2. 去除 \Lua 的 final 属性(我觉得不应该给调用者加上如此限制,如果调用者一定要 extends 假设他知道后果)
  3. 增加析构函数
  4. 增加 \Lua::callbacks 方法访问 php_lua_object.callbacks(可能没什么用,但也没什么副作用,万一有开发者需要这样的场景呢)
  5. 增加 \Lua::destroy 方法销毁 php_lua_object.callbacks。主要用在 \Lua 对象无法自动析构的场景(比如 php_lua_object.callbacks 中引用了 \Lua 对象本身)
  6. 编码格式优化
  7. registerCallback 方法返回 callbacks 的 index,该函数也支持传入 index