虚拟机之内存管理

来源:互联网 发布:ubuntu debian 关系 编辑:程序博客网 时间:2024/05/22 03:53
一、内存管理的两种方式
  运行的程序要与内存进行交互。内存是操作系统中的重要资源,内存管理就是对内存进行分配和释放。内存的管理有两种方式:
1、显示管理
  对于C和C++这类编程语言是显示内存管理的典型代表。如C++,当程序通过new关键字创建新的对象之后,就会分配相应的内存资源,当程序不需要这些资源时,需要在代码上将其显示释放,一般通过delete方法来实现。这种方式管理内存容易出现内存的相关问题。所以C++出现了智能指针,可以自动的管理内存。
2、隐式管理
  隐式管理即自动管理内存,运行平台提供了相应的组件来进行内存的管理,这个组件常常称为垃圾回收器。由垃圾回收器来负责内存的分配和释放。
二、内存管理中容易出现的问题
1、悬挂引用
  悬挂引用是指对某个对象的引用指向了错误的地址,比如程序中某部分代码应用了另外一部分代码创建的对象,在运行过程中,这个引用的对象被删除了,它所引用的内存就释放了。随着这部分内存被重新分配给另外的对象使用,而之前的代码可能仍然保存着原始的引用。当代码通过这个引用来访问这个对象时,就会出错。
2、内存泄露
  内存泄露的原因时某些对象所占用的内存没有释放,又没有对象应用这些内存。这些内存对程序来说既不可以被使用也不能释放。程序无法对这些内存进行操作。最后,可能出现程序异常退出。
  这里补充下内存溢出:当程序一次申请过多的内存时,如显示打开过多图片,这个时候因为申请的内存过多(向java虚拟机申请的内存是有限的),而出现内存不够的情况,从而程序出现OutOfMemoryError错误退出。
三、自动内存管理机制
  自动内存管理机制是通过垃圾回收机制来实现的,垃圾回收器负责内存的回收和释放。在java里面通过new关键字创建一个对象后,会自动分配内存。当不再需要某个对象(对象没有被引用或者说对象没有处于活动状态)垃圾回收器会在某个时间回收对象的内存空间。垃圾回收器要处理好和运行程序之间的关系。
  注意:System.gc()是建议垃圾回收器立即回收内存,但是不一定会回收。
四、垃圾回收器的两种运行机制
  垃圾回收器可以和当前运行程序并行执行,也可以暂停当前程序让其先运行。
1、并行运行
  并行运行就是说垃圾回收器和当前程序并发运行。在垃圾回收过程中,由于程序在运行,内存的状态在不断发生变化,垃圾回收器需要花费更多时间和内存空间来处理这些问题,所以这种方式实现起来较为复杂。
2、暂停运行
  暂停运行时指垃圾回收器运行时,暂停当前应用程序的执行。垃圾回收时,由于程序没有运行,所以,内存的状态没有发生改变,但是这样对程序会产生较大的影响,用户可能会感到停顿。
  
0 0
原创粉丝点击