zoukankan      html  css  js  c++  java
  • 如何管理内存?

    先从操作系统角度讲:操作系统掌握所有的硬件内存,因为内存很大,所以操作系统把内存分成一个一个的页面(其实就是一个块,一般是4KB) ,然后以页面为单位来管理,页面内用更细小的方式来以字节为单位管理。操作系统内存管理的原理非常麻烦、非常复杂、非常不人性化。那么对我们这些使用操作系统的人来说,其实不需要了解这些细节。操作系统给我们提供了内存管理的一些接口,我们只需要用API即可管理内存。譬如在c语言中使用malloc free这些接口来管理内存。

    没有操作系统时在没有操作系统(其实就是裸机程序)中,程序需要直接操作内存,编程者需要自己计算内存的使用和安排。如果编程者不小心把内在用错了,错误结果需要自己承担。

    譬如汇编:根本没有任何内存管理,内存管理全靠程序员自己,汇编中操作内存时直接使用内存地址(譬如0xd0020010),非常麻烦;
    譬如C语言:c语言中编译器帮我们管理直接内存地址,我们都是通过编译器提供的变量名等来访问内存的,如果需要大块内存,可以通过API (malloc free) 来访问系统内存。
    譬如C++语言: C++语 言对内存的使用进步封装。我们可以用new来创建对象 (其实就是为对象分配内存),然后使用完了用delete来删除对象(其实就是释放内存)。所以C++语言对内存的管理比c要高级一一些,容易一些。但是C++中内存的管理还是靠程序员自己来做,如果程序员new了一个对象,但是用完了忘记delete就会造成这个对象占用的内存不能释放,这就是内存泄漏。
    再譬如Java/C#等语言:这些语言不直接操作内存,而是通过虚拟机来操作内存。这样虚拟机作为我们程序员的代理,来帮我们处理内存的释放工作。如果我的程序申请了内存,使用完成后忘记释放,则虚拟机会帮我释放掉这些内存。听起来似乎c#/java等语言比/C++有优势,但是其实他这个虚拟机回收内存是需要付出一定代价的,所以说语言没有好坏,只有适应不适应。当我们程序对性能非常在乎的时候(譬如操作系统内核)就会用c/C++语言; 当我们对开发程序的速度非常在乎的时候,就会用Java/C#等语言。
     
     
  • 相关阅读:
    MQ
    redis
    MongoDB
    进程相关命令
    catalina.sh
    tomcat-jvm
    中间件简介
    websphere
    mysql
    shell变量与字符串操作
  • 原文地址:https://www.cnblogs.com/sanshijvshi/p/10260552.html
Copyright © 2011-2022 走看看