关于 python 内存管理的一些想法

2016-02-19 23:46:59 +08:00
 SlipStupig
看了一下 python 的代码内存申请释放使用的的 glibc 的 new 和 free ,看了国外测试换成 jemalloc 能提升一些性能(看起来还不错),但是都是使用的 LD_PRELOAD 去载入 jemalloc ,但是实际测试情况下来看好像没有什么用,难道只能改代码重新编译么?

参看:
http://derek.nodeconf.org/posts/why-im-switching-to-jemalloc-in-python/
http://nuald.blogspot.com/2013/06/memory-reclaiming-in-python.html
3072 次点击
所在节点    Python
8 条回复
samuel
2016-02-20 02:31:40 +08:00
http://derek.nodeconf.org/posts/why-im-switching-to-jemalloc-in-python/
这篇文章里的测试 case 并不是特别能体现 jemalloc 的优势:大量的碎片内存分配和多线程操作,测试里只是跑一个进程,连续申请很多相同大小的内存而已。

LD_PRELOAD 只是把 malloc 的函数地址指向了 jemalloc 的动态库,这个过程不会有任何性能损耗,所以没必要重新编译
fy
2016-02-20 17:55:43 +08:00
按需优化吧,这不是热点吧? glibc 的实现也很不错了
SlipStupig
2016-02-21 00:21:09 +08:00
@fy malloc 内存申请性能真心不怎么样看一下测试结果就知道了
http://img.ph.126.net/MnzyhfLLyEesD98wHZIZZA==/2298806134796631393.jpg
SlipStupig
2016-02-21 00:21:42 +08:00
@samuel 不是性能损耗的问题,那个主要是没有生效
pynix
2016-02-21 04:18:30 +08:00
顶层优化更重要, python 貌似有内存块的实现。。。
fy
2016-02-21 18:28:31 +08:00
@SlipStupig 你找个大量小块内存的例子再试试?要看场景啊
SlipStupig
2016-02-22 01:12:29 +08:00
@pynix python 不是内存块, python 内存管理采用的是内存池技术 对于小块内存也强制用 4K 页面对齐,这个帖子先放这吧,我先看一下修改代码看一下结果
pynix
2016-02-22 09:59:39 +08:00
@SlipStupig 。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/257773

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX