精华内容
下载资源
问答
  • 物理内存优化小软件 释放内存、发挥最大内存性能软件 加速系统运行
  • malloc申请最大运行内存

    千次阅读 2018-11-17 20:06:27
    贴一个在Windows平台下,关于malloc申请最大运行内存的代码,运行很费时间,可能是一个byte去读,效率比较低吧。 #include<stdio.h> #include<stdlib.h> unsigned maximum = 0; int...

    贴一个在Windows平台下,关于malloc申请最大运行内存的代码,运行很费时间,可能是一个byte去读,效率比较低吧。

    #include<stdio.h>
    #include<stdlib.h>
    
    unsigned maximum = 0;
    
    int main()
    {
    	unsigned blocksize[] = { 1024 * 1024, 1024, 1 };
    	int i, count;
    	for (i = 0; i < 3; i++)
    	{
    		for (count = 1;; count++)
    		{
    			void *block = malloc(maximum + blocksize[i] * count);
    			if (block)
    			{
    				maximum = maximum + blocksize[i] * count;
    				free(block);
    			}
    			else
    			{
    				break;
    			}
    		}
    	}
    	printf("maximum mallco size = %u G \n", maximum/1024/1024/1024);
    }
    

    关于这个内存管理问题,似乎还比较复杂,也很重要,为了在以后的工作较少雷区,还是很有必要深入学习一番。贴一个链接,http://dev.yesky.com/108/2380608.shtml

    虚拟内存是内存管理技术的极其实用的创新。它是一段程序(由操作系统调度),持续监控着所有的物理内存中的代码段,数据段,并保证他们在运行中的效率以及可靠性,对于每个用户层的进程分配一段虚拟内存空间。当进程建立时,不需要在物理内存件之间搬移数据,数据存储于磁盘内的虚拟内存空间,也不需要为改进程去配置主内存空间,只有当该进程被调用的时候才会被加载到主内存。

    虚拟内存是由什么产生的呢?内存可以通过许多媒介实现,例如磁带或是磁盘,或是小阵列容量的微芯片。从1950年代开始,计算机的更复杂,它的内部由许多种类的内存组成。内存管理的任务也变得更加复杂,甚至必须在一台机器同时执行多个进程。

    对于Win32平台,操作系统中的虚拟内存最大只有4G。但是给程序用的内存大概在1.5G左右,Linux系统会多些。

    常见的内存错误及其对策

    * 内存分配未成功,却使用了它。常用解决办法是,在使用内存之前检查指针是否为NULL。如果指针p是函数的参数,那么在函数的入口处用assert(p!=NULL)进行检查。如果是用malloc或new来申请内存,应该用if(p==NULL) 或if(p!=NULL)进行防错处理。

    * 内存分配虽然成功,但是尚未初始化就引用它。 内存的缺省初值究竟是什么并没有统一的标准,尽管有些时候为零值,我们宁可信其无不可信其有。所以无论用何种方式创建数组,都别忘了赋初值,即便是赋零值也不可省略,不要嫌麻烦。

    * 内存分配成功并且已经初始化,但操作越过了内存的边界。

    * 忘记了释放内存,造成内存泄露。动态内存的申请与释放必须配对,程序中malloc与free的使用次数一定要相同,否则肯定有错误(new/delete同理);
     

     有三种情况:
      (1)程序中的对象调用关系过于复杂,实在难以搞清楚某个对象究竟是否已经释放了内存,此时应该重新设计数据结构,从根本上解决对象管理的混乱局面。
      (2)函数的return语句写错了,注意不要返回指向“栈内存”的“指针”或者“引用”,因为该内存在函数体结束时被自动销毁。
      (3)使用free或delete释放了内存后,没有将指针设置为NULL。导致产生“野指针”。


      【规则1】用malloc或new申请内存之后,应该立即检查指针值是否为NULL。防止使用指针值为NULL的内存。
      【规则2】不要忘记为数组和动态内存赋初值。防止将未被初始化的内存作为右值使用。
      【规则3】避免数组或指针的下标越界,特别要当心发生“多1”或者“少1”操作。
      【规则4】动态内存的申请与释放必须配对,防止内存泄漏。
      【规则5】用free或delete释放了内存之后,立即将指针设置为NULL,防止产生“野指针”

    内存有三种分配方式

    静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。(数据段:存放程序中已初始化的全局变量的一块内存;代码段(正文段):存放程序执行代码的一块内存区域;BSS段:存放程序中未初始化的全部变量和静态变量的一块内存区域,程序结束后,静态变量资源由系统自动释放)。

    栈区:在执行函数时,函数(包括main函数)内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。

    堆区:亦称动态内存分配。程序在运行的时候用malloc或new申请任意大小的内存,程序员自己负责在适当的时候用free或delete释放内存。

    展开全文
  • idea释放运行内存,提升开发体验

    千次阅读 2019-01-22 16:59:38
    前言:IntelliJ IDEA 作为开发者最常用的开发工具之一,里面很多使用小技巧,包括很多快捷键和settings中的设置项等,这次主要介绍一下里面的内存释放功能,开发中我们俗称为小火箭的功能。 背景:很多开发者经常...

            前言:IntelliJ IDEA 作为开发者最常用的开发工具之一,里面很多使用小技巧,包括很多快捷键和settings中的设置项等,这次主要介绍一下里面的内存释放功能,开发中我们俗称为小火箭的功能。
            背景:很多开发者经常碰到编辑器内存超载,然后页面直接动不了,就看到系统小圈圈转起来,尤其是很多朋友的电脑配置差一点的,直接闪退idea编辑器,严重影响写代码的体验感,抓狂好嘛。。。。。。下面就介绍下如何设置。

    1. 首先按顺序找到idea菜单栏中 File => Settings => Appearance & Behavior => Appearance中的window options选项,勾选show memory indicator选项卡。

     

     2.然后找到编辑器顶部菜单栏中的Help => Edit custom VM Options,如果没有设置过就按提示create。 

    3.然后修改里面的配置信息如下:

    # custom IntelliJ IDEA VM options

    -Xms256m

    -Xmx2048m

    -XX:ReservedCodeCacheSize=240m

    -XX:+UseConcMarkSweepGC

    -XX:SoftRefLRUPolicyMSPerMB=50

    -ea

    -Dsun.io.useCanonCaches=false

    -Djava.net.preferIPv4Stack=true

    -XX:+HeapDumpOnOutOfMemoryError

    -XX:-OmitStackTraceInFastThrow

    上面的xms xmx就是设置内存最小分配量和最大分配量的

             最后,在编辑器底部回出现内存占用比例,点击一下,就会自动释放内存,优化性能,类似于360的清理内存的小圈圈,点一点,清一下,一个小火箭动效往上加速跑。所以同事都戏称它为小火箭功能。

    展开全文
  • SilverLight内存释放(内存释放1)

    千次阅读 2011-08-15 16:59:32
    alamiye010朋友的将内存释放到底分享: WPF/Silverlight应用程序长时间运行后会产生非常多的内存垃圾(内存泄露例外),特别是在经常需要进行Remove操作的粒子、动画、游戏等方面的应用,国外高手们提出的方案我...
      
    

     

    alamiye010朋友的将内存释放到底分享:

    WPF/Silverlight应用程序长时间运行后会产生非常多的内存垃圾(内存泄露例外),特别是在经常需要进行Remove操作的粒子、动画、游戏等方面的应用,国外高手们提出的方案我归纳了一下主要有:

    1)  UIElement控件实例= null

    2)  定时调用GC.Collect()

    3)  让控件继承Idisposable接口,并实现相应逻辑

    这三种方法都有一定的作用,但是实际使用中均往往难以达到预期效果。特别是在Silverlight应用中,目前的Flash/Flex制作的RPG网页游戏都有一个通病:内存不断增加导致运行二、三十分钟后浏览器即进入假死状态,Silverlight如果无法处理好内存的释放,命运或许终究一样。

    那么我们是否还有其他更好的方法实现内存垃圾的释放?大家不妨做这么一个测试,以IE浏览器为例,当我们打开一个运行有Silverlight应用程序的页面后,记录下任务管理器中该IEXPLORE.EXE的内存使用量,然后运行一段时间,再记录此时的内存使用量,最后将该页面最小化再还原回来,大家将看到该IEXPLORE.EXE的内存使用量已被完全的释放干净,如同新开的网页一般。这老掉牙的东西已算不上什么技巧,但是却给了我们一条内存彻底释放的思路:既然Silverlight应用程序是镶嵌在网页中的,我们能否通过该方法去释放内存呢?答案是肯定的。

    以我的Silverlight游戏引擎Demo为例,刚加载完时内存使用约56M:

    然后我刷了80个怪,并将它们全部消灭干净后内存使用量约为132M:

    接着将此页面最小化再还原,内存瞬间释放到约20M:

    并且在不刷出新怪的前提下,我环绕整个地图走完每个角落后,内存最大时不超过56M,从而证明了IE最小化后将瞬间释放完Silverlight内存垃圾的观点是正确的。至于例如FireFox浏览器如何最小化时释放内存大家可以参考:让火狐浏览器最小化时释放内存这篇文章。

     

    其实我想和大家说的,这仅仅是一条思路。大家不妨想想,其实我们是完全可以将这种方法无缝的嵌入到页面中去的。

    在Winform/WPF中,实现该方法仅仅只需通过下面一段代码即可实现模拟释放内存(原文地址):

         [DllImport("kernel32.dll")]

         public static extern bool SetProcessWorkingSetSize(IntPtr proc, int min, int max);

         public void FlushMemory() {

             GC.Collect();

             GC.WaitForPendingFinalizers();

             if (Environment.OSVersion.Platform == PlatformID.Win32NT) {

                 SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);

             }

         }

          但是Windows的API无法在Silverlight中使用,我们该怎么办呢?

    再看下面这段代码:
    我们可以使用一个Js的setInterval方法每间隔一段时间去自动释放内存,该方法原理为将浏览器最小化后再找回焦点,我们肉眼看到仅是页面闪了一下,再无任何其他感觉。就这么一瞬间,就算Silverlight应用程序导致浏览器占用了数百M的内存,照样完全释放无误。这是该例子Demo,有兴趣的朋友可以下载体验一下。

    <script type="text/javascript">

        function intervalFlushMemory() {

            setInterval(FlushMemory, 60000);

        }

        function FlushMemory() {

            min.Click();

            window.focus();

        }

    </script>

    <body οnlοad="intervalFlushMemory();">

        ……

    <object id="min"

    type="data:application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">

            <param name="Command" value="Minimize" />

        </object>

    <button οnclick="FlushMemory();">释放内存</button>

    ……

    </body>

    非常不幸的是,通过<object>实现内存释放的方法目前只能在IE中使用,而且由于诸多限制还无法很好的广泛使用,解决的最终方法目前我只想到两个:

    1)  能否有相关的Silverlight的API直接实现类似功能,或者后台代码C#中去实现呢?

    2)  通过将该<object>制作成控件并打包成cab,并加上数字签名,以ActiveX的形式让用户使用,实在是够麻烦的…

    文章要结尾了,但是我无法兴奋起来,C 开发者的冷眼嘲笑让我始终有种沉痛的感觉:Silverlight的内存垃圾本是可以轻松释放的,为何MS就不能让我们畅快一点?托管是否能更绅士些?

    最后,我想告诉大家的是,本文的目的并没有真正达到,因为这所有的方法都不是完美的解决方案,作为一些思路,我希望大家能给予我更多的指点,欢迎大家留言参与Silverlight内存的相关讨论,因为我们的最终目的只有一个:誓将内存释放到底!

    展开全文
  • SQL Server 缓存清除与内存释放

    万次阅读 2018-05-23 13:43:52
    Sql Server系统内存管理在没有配置内存最大值,很多时候我们会发现运行SqlServer的系统内存往往居高不下。这是由于他对于内存使用的策略是有多少闲置的内存就占用多少,直到内存使用虑达到系统峰值时(预留内存根据...

    Sql Server系统内存管理在没有配置内存最大值很多时候我们会发现运行SqlServer的系统内存往往居高不下这是由于他对于内存使用的策略是有多少闲置的内存就占用多少直到内存使用虑达到系统峰值时预留内存根据系统默认预留使用为准至少4M),才会清除一些缓存释放少量的内存为新的缓存腾出空间

    这些内存一般都是SqlServer运行时候用作缓存的例如你运行一个select语句执行个存储过程调用函数

    1. 数据缓存执行个查询语句SqlServer会将相关的数据页SqlServer操作的数据都是以页为单位的加载到内存中来下一次如果再次请求此页的数据的时候就无需读取磁盘了大大提高了速度

    2.执行命令缓存在执行存储过程自定函数时SqlServer需要先二进制编译再运行编译后的结果也会缓存起来再次调用时就无需再次编译

    在我们执行完相应的查询语句或存储过程如果我们不在需要这些缓存我可以将它清除DBCC管理命令缓存清除如下

     

      --清除存储过程缓存  

    DBCC FREEPROCCACHE      

    --注:方便记住关键字 FREEPROCCACHE可以拆解成 FREE(割舍,清除) PROC(存储过程关键字简写),CACHE(缓存) 

     

    --清除会话缓存 

     DBCC FREESESSIONCACHE  

    --注: FREE(割舍,清除) SESSION(会话) CACHE(缓存)  

     

    --清除系统缓存 

     DBCC FREESYSTEMCACHE('All') 

    --注:FREE SYSTE MCACHE 

     

    --清除所有缓存 

     DBCC DROPCLEANBUFFERS 

    --注: DROP CLEAN BUFFERS 

    虽然我们已经清除了缓存但是sql并未释放相应占用的内存它只是腾出新的空间为之后所执行脚本所用SqlServer  并没有提供任何命令允许我们释放不用到的内存因此我们只能通过动态调整Sql Server可用的物理内存设置来强迫它释放内存

    操作原理是调整内存配置大小手动操作方法:

    1.打开SqlServer Management(企业管理器);

    2.打开SqlServer实例的属性面板;

    3.找到内存设置改变其中的最大服务器内存使用即可

    使用脚本操作

     

    --强制释放内存 

    CREATE procedure[dbo].ClearMemory   

    as  

    begin 

    --清除所有缓存 

    DBCC DROPCLEANBUFFERS 

    --打开高级配置 

    exec sp_configure'show advanced options',

    --设置最大内存值,清除现有缓存空间 

    exec sp_configure'max server memory', 256 

    EXEC ('RECONFIGURE') 

    --设置等待时间 

    WAITFOR DELAY '00:00:01' 

    --重新设置最大内存值 

    EXEC  sp_configure'max server memory',4096 

    EXEC ('RECONFIGURE') 

    --关闭高级配置 

    exec sp_configure'show advanced options',

    GO 

    下面提供内存查看功能的一些脚本语句

     

      --内存使用情况      

          

    SELECT *FROM sys.dm_os_performance_counters  

    WHERE counter_nameIN('Target Server Memory (KB)','Total Server Memory (KB)')  

     

    -- 内存状态  

    DBCC MemoryStatus  

     

    --查看最小最大内存  

    SELECT configuration_idasid,nameas 名称,minimumas配置最小值,maximumas 最大值,  

    is_dynamic as 是否动态值, is_advanced as 是否优先,value_in_use AS 运行值,  

    description as 描述 FROMsys.configurations 

    展开全文
  • kettle扩大运行内存

    千次阅读 2020-12-04 09:42:07
    -Xms最小运行内存,-Xmx为最大运行内存,m为内存单位,也可以直接设置g为单位 在linux中修改spoon.sh的参数PENTAHO_DI_JAVA_OPTIONS -XX:MaxPermSize=256mJVM最大允许分配的非堆内存,java8以上中已经移除了该...
  • sqlserver内存释放

    千次阅读 2014-11-14 16:22:40
    由于Sql Server对于系统内存的管理策略是有多少占多少,除非系统内存不够用了(大约剩余内存为4M左右),   Sql Server才会释放一点点内存。所以很多时候,我们会发现运行Sql Server的系统内存往往居高不下...
  • JAVA内存释放机制

    万次阅读 2016-06-20 09:38:11
    内存释放(主要是GC)有关的话题。    ★JVM的内存?  在Java虚拟机规范中(具体章节请看“这里 ”),提及了如下几种类型的内存空间:  ◇栈内存(Stack):每个线程私有的。  ◇堆内存(Heap):所有...
  • Unity3D内存释放

    千次阅读 2016-03-25 10:13:46
    最近网友通过网站搜索Unity3D在手机及其他平台下占用内存太大. 这里写下关于Unity3D对于... Resources.Load就是从一个缺省打进程序包里的AssetBundle里加载资源,而一般AssetBundle文件需要你自己创建,运行时 动态
  • Mssql server缓存清除与内存释放

    千次阅读 2018-01-02 11:48:14
    Sql Server系统内存管理在没有配置内存最大值,很多时候我们会发现运行Sql Server的系统内存往往居高不下。这是由于他对于内存使用的策略是有多少闲置的内存就占用多少,直到内存使用虑达到系统峰值时(预留内存根据...
  • Unity3D 内存 释放

    千次阅读 2016-02-01 11:33:25
    最近网友通过网站搜索Unity3D在手机及其他平台下占用内存太大. 这里写下关于Unity3D对于内存的管理与优化. Unity3D 里有两种动态加载机制:一个是Resources.Load,另外一个通过AssetBundle,其实两者区别不大。
  • Tomcat内存释放不了

    千次阅读 2014-07-08 17:30:24
    出现以下错误,后来把tomcat的内存增大1024 严重: Exception initializing page context java.lang.OutOfMemoryError: Java heap space 在tomcat\bin\catalina.bat的set CURRENT_DIR=%cd% 前面添加 se
  • ms sql server缓存清除与内存释放

    千次阅读 2014-03-22 16:58:33
    server缓存清除与内存释放   Sql Server系统内存管理在没有配置内存最大值,很多时候我们会发现运行Sql Server的系统内存往往居高不下。这是由于他对于内存使用的策略是有多少闲置的内存就占用多少,直到内存...
  • C++指针 数组 内存释放

    千次阅读 2014-12-29 15:16:17
    和其它变量一样,指针是基本的变量,所不同的是指针包含一个实际的数据,该数据代表一个可以找到实际信息的内存地址。这是一个非常重要的概念。许多程序和思想依靠指针作为他们设计的基础。 开始  怎样定义一个...
  • 公司CMS的tomcat又挂掉了,...出现以下错误,后来把tomcat的内存增大1024 严重:Exceptioninitializingpagecontext java.lang.OutOfMemoryError:Javaheapspace 在tomcat\bin\catalina.bat的setCURRENT_DIR=%cd%前面添
  • 家里要来客人了,我们要给客人们泡茶。如果规定只能在确定来几位客人之前就把茶泡好,这就会显得很...所以,为了解决这个问题,我们需要能够在程序运行时根据实际情况申请内存空间。 在C++中,允许我们在程序运行时根
  • VB.Net内存管理与内存释放的方法

    万次阅读 2014-12-22 22:52:59
    托管代码的内存管理是自动的,.NET可以保证我们的托管程序在结束时全部释放,这为我们编程人员省去了不少麻烦,我们可以连想都不想怎么去管理内存,反正.NET自己会保证一切。好吧,有道理,有一定的道理。问题是,当...
  • 所谓的内存释放工具——原理

    千次阅读 2014-02-25 22:25:00
    所谓的内存释放工具——原理 刚才逆向了一个内存释放的小工具,原来是调用了SetProcessWorkingSetSize()函数,MSDN一下。 此函数原型如下: BOOL SetProcessWorkingSetSize( HANDLE hProcess, SIZE_T ...
  • STL string的内存释放

    千次阅读 2013-08-03 16:41:23
    很久都没有发原创博客了,今天来谈谈自己对stl中的string类的理解。 说实话,我其实是比较崇尚用微软的那套技术,C#那些玩意,用起来感觉倍儿爽,但工作的时候...说c++,用到最大的东东,那就是stl了。神马string、v
  • 关于STL容器,最令人称赞的特性之一就是是只要不超过它们的最大大小,它们就可以自动增长足以容纳你放进去的数据。(要知道这个最大值,只要调用名叫max_size的成员函数。)   对于vector和string,如果...
  • Redis中的内存释放与过期键删除

    万次阅读 2015-04-06 17:31:52
    主要有两种方法,一种是当Redis内存不足时所采用的内存释放策略。另一种是对过期键进行删除的策略,也可以在某种程度上释放内存。 相关数据结构 Redis中的数据库结构如下: /* * 数据库结构 */ typedef ...
  • Python 内存释放原理

    千次阅读 2016-08-03 09:27:23
    在maillist里面看到无数次的有人问,python速度为...不过今天还是说说,python的内存为什么不释放。 首先,python的初始内存消耗比C大,而且大很多。这个主要来自python解释器的开销,没什么好解释的。用解释器
  • 出现以下错误,后来把tomcat的内存增大1024  严重: Exception initializing page context  java.lang.OutOfMemoryError: Java heap space     在tomcat\bin\catalina.bat的set CURRENT_DIR=%cd% ...
  • python内存释放原理

    千次阅读 2015-06-19 16:18:02
    在maillist里面看到无数次的有人问,python...不过今天还是说说,python的内存为什么不释放。 首先,python的初始内存消耗比C大,而且大很多。这个主要来自python解释器的开销,没什么好解释的。用解释器,就得承担
  • C语言 内存分配与释放

    千次阅读 2018-09-03 16:03:42
    堆在操作系统对进程 初始化的时候分配,运行过程中也可以向系统要额外的堆,但是记得用完了要还给操作系统,要不然就是内存泄漏。 2、什么是栈:栈是线程独有的,保存其运行状态和局部自动变量的。栈在线程开始的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 246,283
精华内容 98,513
关键字:

怎么让运行内存释放到最大