首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
其他好文
> 详细
虚拟机之内存管理
时间:
2015-04-18 14:35:03
阅读:
103
评论:
0
收藏:
0
[点我收藏+]
标签:
java
程序开发
程序员
博客
内存管理
一、内存管理的两种方式
运行的程序要与内存进行交互。内存是操作系统中的重要资源,内存管理就是对内存进行分配和释放。内存的管理有两种方式:
1、显示管理
对于C和C++这类编程语言是显示内存管理的典型代表。如C++,当程序通过new关键字创建新的对象之后,就会分配相应的内存资源,当程序不需要这些资源时,需要在代码上将其显示释放,一般通过delete方法来实现。这种方式管理内存容易出现内存的相关问题。所以C++出现了智能指针,可以自动的管理内存。
2、隐式管理
隐式管理即自动管理内存,运行平台提供了相应的组件来进行内存的管理,这个组件常常称为垃圾回收器。由垃圾回收器来负责内存的分配和释放。
二、内存管理中容易出现的问题
1、悬挂引用
悬挂引用是指对某个对象的引用指向了错误的地址,比如程序中某部分代码应用了另外一部分代码创建的对象,在运行过程中,这个引用的对象被删除了,它所引用的内存就释放了。随着这部分内存被重新分配给另外的对象使用,而之前的代码可能仍然保存着原始的引用。当代码通过这个引用来访问这个对象时,就会出错。
2、内存泄露
内存泄露的原因时某些对象所占用的内存没有释放,又没有对象应用这些内存。这些内存对程序来说既不可以被使用也不能释放。程序无法对这些内存进行操作。最后,可能出现程序异常退出。
这里补充下内存溢出:当程序一次申请过多的内存时,如显示打开过多图片,这个时候因为申请的内存过多(向java虚拟机申请的内存是有限的),而出现内存不够的情况,从而程序出现OutOfMemoryError错误退出。
三、自动内存管理机制
自动内存管理机制是通过垃圾回收机制来实现的,垃圾回收器负责内存的回收和释放。在java里面通过new关键字创建一个对象后,会自动分配内存。当不再需要某个对象(对象没有被引用或者说对象没有处于活动状态)垃圾回收器会在某个时间回收对象的内存空间。垃圾回收器要处理好和运行程序之间的关系。
注意:System.gc()是建议垃圾回收器立即回收内存,但是不一定会回收。
四、垃圾回收器的两种运行机制
垃圾回收器可以和当前运行程序并行执行,也可以暂停当前程序让其先运行。
1、并行运行
并行运行就是说垃圾回收器和当前程序并发运行。在垃圾回收过程中,由于程序在运行,内存的状态在不断发生变化,垃圾回收器需要花费更多时间和内存空间来处理这些问题,所以这种方式实现起来较为复杂。
2、暂停运行
暂停运行时指垃圾回收器运行时,暂停当前应用程序的执行。垃圾回收时,由于程序没有运行,所以,内存的状态没有发生改变,但是这样对程序会产生较大的影响,用户可能会感到停顿。
虚拟机之内存管理
标签:
java
程序开发
程序员
博客
内存管理
原文地址:http://blog.csdn.net/u010213127/article/details/45113025
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
分布式事务
2021-07-29
OpenStack云平台命令行登录账户
2021-07-29
getLastRowNum()与getLastCellNum()/getPhysicalNumberOfRows()与getPhysicalNumberOfCells()
2021-07-29
【K8s概念】CSI 卷克隆
2021-07-29
vue3.0使用ant-design-vue进行按需加载原来这么简单
2021-07-29
stack栈
2021-07-29
抽奖动画 - 大转盘抽奖
2021-07-29
PPT写作技巧
2021-07-29
003-核心技术-IO模型-NIO-基于NIO群聊示例
2021-07-29
Bootstrap组件2
2021-07-29
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!