【知识总结】关于内存管理
2011-05-30 23:12
239 查看
1.VM管理
一般操作系统的用的都是基于VM的内存管理,这样可以扩展有效的物理内存,热点数据在物理内存中,非热点数据会进去页面文件后等后备存储中,需要时中断取出,对于系统或应用来说这一机制是透明的。
目前有些性能较好的缓存应用也在使用VM进行内存管理,例如redis,真正没有测试过,据说性能提升明显,从理论上说,缓存的热点数据和非热点数据应该分别对待,这种机制还是可取的。
2.内存池
这里所说的内存池就是指一些应用上程序上的内存池,例如c语言开发的程序一般会有专门的内存池来管理内存,例如nignx的内存池。内存池存在的意义主要在于减少频繁的分配和释放内存(一般是操作系统的VM内存管理中保留和归还操作),这一部分相对于IO来说消耗比较少,但是对于内存的频繁使用消耗就会比较明显。还有就是可以减少内存泄漏和内存碎片的产生。
3.GC管理
一些很高级的语言提供了GC管理的机制,例如C#或Java等,其实GC本身就是一个大的内存池,托管堆就是GC管理的对象,只不过这个内存池来说比较高级而已,算法比较适合于业务语言的需求。其实C#使用特殊的函数完全可以从非托管堆上分配内存,也可以实现一个高性能的内存池,这样GC的压力就会降下来,当然这都是对于大量而且频繁的内存使用而言,否则完全没有必要。
4.对象池
对于一些使用C#或Java开发的应用来说,如果面临着同一种类型的大量对象的new操作,而且马上使用完了,GC可能就可以回收的情形来说,可以尝试使用一下对象池(连接池,线程池也可以算)。对象池一般是给一个初始的容量参数,一次性或多次创建很多对象,每次需要创建时取一个即可使用,使用完了主动归还,如果不归还可能也会内存泄漏,因为对象池还在引用它(如果算法写好了应该可以收回),对象池对于以上频繁的创建生命周期很短的对象来说很有效,可以明显降低GC的压力,留出更多的CPU时间给业务使用。
5.总结
频繁的内存申请,释放,拷贝应该得到优化!
一般操作系统的用的都是基于VM的内存管理,这样可以扩展有效的物理内存,热点数据在物理内存中,非热点数据会进去页面文件后等后备存储中,需要时中断取出,对于系统或应用来说这一机制是透明的。
目前有些性能较好的缓存应用也在使用VM进行内存管理,例如redis,真正没有测试过,据说性能提升明显,从理论上说,缓存的热点数据和非热点数据应该分别对待,这种机制还是可取的。
2.内存池
这里所说的内存池就是指一些应用上程序上的内存池,例如c语言开发的程序一般会有专门的内存池来管理内存,例如nignx的内存池。内存池存在的意义主要在于减少频繁的分配和释放内存(一般是操作系统的VM内存管理中保留和归还操作),这一部分相对于IO来说消耗比较少,但是对于内存的频繁使用消耗就会比较明显。还有就是可以减少内存泄漏和内存碎片的产生。
3.GC管理
一些很高级的语言提供了GC管理的机制,例如C#或Java等,其实GC本身就是一个大的内存池,托管堆就是GC管理的对象,只不过这个内存池来说比较高级而已,算法比较适合于业务语言的需求。其实C#使用特殊的函数完全可以从非托管堆上分配内存,也可以实现一个高性能的内存池,这样GC的压力就会降下来,当然这都是对于大量而且频繁的内存使用而言,否则完全没有必要。
4.对象池
对于一些使用C#或Java开发的应用来说,如果面临着同一种类型的大量对象的new操作,而且马上使用完了,GC可能就可以回收的情形来说,可以尝试使用一下对象池(连接池,线程池也可以算)。对象池一般是给一个初始的容量参数,一次性或多次创建很多对象,每次需要创建时取一个即可使用,使用完了主动归还,如果不归还可能也会内存泄漏,因为对象池还在引用它(如果算法写好了应该可以收回),对象池对于以上频繁的创建生命周期很短的对象来说很有效,可以明显降低GC的压力,留出更多的CPU时间给业务使用。
5.总结
频繁的内存申请,释放,拷贝应该得到优化!
相关文章推荐
- Halcon PDF文档(hdevelop_users_guide)学习总结之三——关于变量窗口的小知识
- 关于AS版本控制总结的小知识-待补充
- 关于初学PHP时的知识积累总结
- 关于JavaScript知识的个人总结
- Oracle关于锁的知识总结
- 内存管理、野指针、读写字符的函数、预编译处理、宏定义及条件编译的知识总结
- OC语言自学《十一》---- OC(内存管理知识总结)
- 关于前端一周知识的总结
- 关于实现磁盘灵活性管理LVM中的PV,PE,VG,LV知识总结
- jvm关于内存管理和垃圾回收的学习总结
- 关于s标签的一些知识总结
- 关于Android知识的杂乱总结
- 自己总结的关于电脑维护的一些知识
- 关于内存管理思考方式的一些学习总结
- NetWork——关于HTTP、HTTPS的知识总结
- jvm关于内存管理和垃圾回收的学习总结
- 关于.NET知识体系结构图总结
- linux_apache服务知识总结(二)(关于用户的访问控制及编译安装)
- MySQL_知识总结01(基本数据库语句+关于Mysql面试题+select语句的练习)
- 关于JavaScript、javascript与html交互的知识总结