减少频繁的内存申请和释放

   有一些程序在运行过程中,会频繁申请和释放内存,例如Oracle 的Listener连接程序在使用Dedicated设置,并且连接属于短连接的情况下,会不断建立新连接,申请内存空间,完成客户端SQL请求,然后释放内存,退出。当系统繁忙的时候,表象就是系统建立很多新进程,进程号不断变化,同时有大量的sr和fr,而且fr与sr几乎相等(在系统内存很多的情况下,否则fr一般只有1/6-1/4sr大小,甚至更少。这说明检索了4-6块的物理内存,才发现一块内存可以释放)。这种情况下,即使系统有足够的内存进行调度,也会由于系统浪费了大量的CPU资源用于内存数据检索,而导致系统运行缓慢。解决方式是通过Oracle设置将短连接类型变成长连接,例如设置shared server/service;延长连接程序的空闲等待时间,甚至更改客户端的工作方式,避免不必要的内存扫描/请求和释放动作。

时间: 2025-01-19 02:46:42

减少频繁的内存申请和释放的相关文章

Unity内存申请和释放

转载自http://www.jianshu.com/p/b37ee8cea04c Unity内存申请和释放 发表于 Unity 2014-07-01 15:01 字数: 2396 阅读量: 43 1.资源类型 GameObject, Transform, Mesh, Texture, Material, Shader, Script和各种其他Assets. 2.资源创建方式 静态引用,在脚本中加一个public GameObject变量,在Inspector面板中拖一个prefab到该变量上,然

链表-为什么动态内存申请不了

问题描述 为什么动态内存申请不了 15行 struct 不明确 解决方案 程序中存在一个问题,malloc后未对内存初始化,24行有可能会死循环. 不知道你说的无法动态申请是否是这个原因导致的内存耗尽. 另外,你这程序的逻辑是有问题的,链表的长度怎么确定?需要有条件从循环中退出的. 解决方案二: 动态内存申请实例(一)如何申请对齐的动态内存?动态内存申请和释放

visual studio-有关DLL中申请的内存在外部释放的问题。

问题描述 有关DLL中申请的内存在外部释放的问题. 具体情况是这样的,我有应用程序,调用了一个DLL.在DLL中有一个函数,返回一个字符串指针,使用完了之后在应用程序中释放这个字符串指针. 在应用程序和DLL用同一个版本的VS编译的时候,调用是没有问题的. 当我用VS2010编译的应用程序去调用用VS2013编译的DLL时,在释放这个指针的时候应用程序就崩溃了. 有大婶知道这是怎么回事吗? 解决方案 关于在dll中申请内存,外部释放的问题关于在dll中申请内存,外部释放的问题Dll中开辟内存在外

linux驱动开发--内核空间中内存的申请与释放

1.Linux内存管理 linux内存最小管理单位为页(page),通常一页为4kb. linux系统中,在初始化时,内核为每个物理内存页建立一个page的管理结构,操作物理内存时实际上就是操作page页. 物理地址:出现在cpu地址总线上的寻址物理内存的地址信号,是地址变换的最终结果. 线性地址(虚拟地址):在32位cpu架构上,可以表示4G的地址空间,也就是0x00000000-0xFFFFFFFF. 逻辑地址:实际上是一个相对地址,是程序代码经过编译之后在汇编程序中出现的地址. linux

Apache Spark源码走读(五)部署模式下的容错性分析 &standalone cluster模式下资源的申请与释放

<一>部署模式下的容错性分析 概要 本文就standalone部署方式下的容错性问题做比较细致的分析,主要回答standalone部署方式下的包含哪些主要节点,当某一类节点出现问题时,系统是如何处理的. Standalone部署的节点组成 介绍Spark的资料中对于RDD这个概念涉及的比较多,但对于RDD如何运行起来,如何对应到进程和线程的,着墨的不是很多. 在实际的生产环境中,Spark总是会以集群的方式进行运行的,其中standalone的部署方式是所有集群方式中最为精简的一种,另外是Me

c++-C/C++谁申请谁释放原则

问题描述 C/C++谁申请谁释放原则 在C/C++中有一个原则"谁申请谁释放",那么下面的代码符合这个原则么? char *fun() { char *result = malloc(100); return result; } int main() { char *str = fun(); free(str); } 解决方案 不符合.应该主程序申请,将缓冲区指针传给函数,函数将结果填入. 例子:Windows API函数 GetWindowText,可以获取指定窗口的标题,函数原型

内存分配和释放

     自从学习了C语言,老师就教导我们说:对于动态内存的申请和释放,一定要遵守"谁申请,谁释放"的原则.在此原则的指导下,不仅是我.不仅是你,就连特级大师都设计了这样怪怪的函数: 函数 说明 评论 GetWindowText(HWND,LPTSTR,int) 取得窗口标题.需要在参数中给出保存标题所使用的内存指针,和这块内存的尺寸. 晕!我又不知道窗口标题的长度,居然还要我提供尺寸?!没办法,只能估摸着给一个大一些的尺寸吧. sprintf(char *,const char *,

C语言中的内存分配与释放

对C语言一直都是抱着学习的态度,很多都不懂,今天突然被问道C语言的内存分配问题,说了一些自己知道的,但感觉回答的并不完善,所以才有这篇笔记,总结一下C语言中内存分配的主要内容. 相关问题 刚刚在一篇博文看到一个简单的问题: //code1 char* toStr() { char *s = "abcdefghijkl"; return s; } int main() { cout << toStr() << endl; return 0; } //code2 c

C语言内存分配与释放的详解

什么是堆?说到堆,又忍不住说到了栈!什么是 栈? 1.什么是堆:堆是大家共有的空间,分全局堆和局部堆.全局堆就是所有没有分配的空间,局部堆就是用户分配的空间.堆在操作系统对进程 初始化的时候分配,运行过程中也可以向系统要额外的堆,但是记得用完了要还给操作系统,要不然就是内存泄漏. 2.什么是栈:栈是线程独有的,保存其运行状态和局部自动变量的.栈在线程开始的时候初始化,每个线程的栈互相独立.每个函数都有自己的栈,栈被用来在函数之间传递参数.操作系统在切换线程的时候会自动的切换栈,就是切换SS/ES