Closed stackia closed 9 years ago
还有 Rime 每创建一个 session 都会有些资源重复加载,图上显示的 Rime 在每个 session 都让 opencc load/parse 了一次词典,并且 session destroy 之后资源不会释放。
今天发现 XIME 使用一天后内存占用达到了400多MB,发现问题主要在这个地方。上面提到的内存泄漏影响还不是很大。
@BYVoid 有些可能發生在 OpenCC 代碼裏,大家都來分析一下。
我的印象是鼠鬚管在重新部署之後內存佔用會迅速攀升。平時打打字內存佔用的變化倒不太明顯。
Oh,原來下面那張圖是說資源重複加載的。@BYVoid 失敬。
我已經用valgrind檢查過OpenCC了,你也可以試試。
I guess this issue has been resolved by this commit https://github.com/stackia/XIME/commit/952ca18660a7673462d2ddcc2755366db4331681
@lotem trime現在也遇到內存問題: 每次部署和維護時,會多佔用幾十M,字典越多,用的越多。這都400M了。有沒有API可以回收利用啊?
** MEMINFO in pid 12459 [com.osfans.trime] **
Pss Private Private Swapped Heap Heap Heap
Total Dirty Clean Dirty Size Alloc Free
------ ------ ------ ------ ------ ------ ------
Native Heap 390855 390788 0 0 386297 386297 25350
Dalvik Heap 2235 2200 0 0 5447 1427 4020
Dalvik Other 336 336 0 0
Stack 136 136 0 0
Other dev 3160 2912 4 0
.so mmap 3268 396 2372 472
.apk mmap 44 0 0 0
.ttf mmap 1 0 0 0
.dex mmap 180 0 176 0
code mmap 1197 0 452 0
image mmap 5264 668 4172 0
Other mmap 210 4 88 0
Unknown 156 156 0 0
TOTAL 407042 397596 7264 472 391744 387724 29370
RimeFinalize
和RimeCleanupAllSessions
作用不明顯啊
又試驗了下:同步功能,內存可以回收;維護和部署功能,都回收不了。是因爲多線程?
有趣的發現 Mac 版也是這樣 部署完顯示進程的內存佔用很高
目前的解法是部署和維護之後,讓java程序退出,回收所有內存。 還有一個發現,可能跟這個也有關係。
RimeSetNotificationHandler設定的回調函數,set_option等操作session_id>0,可以正常調回java。部署操作session_id=0,調不回java。猜測此時librime與java通信中斷,librime的內存就再也無法回收了。
在 Instruments 里监视了一下,发现多处内存泄漏: 每一处具体的调用栈 Instruments 也指出了。 我使用的是develop分支编译出的最新版。