java的最优化内存管理

java的最优化内存管理

ID:8976002

大小:18.02 KB

页数:6页

时间:2018-04-13

java的最优化内存管理_第1页
java的最优化内存管理_第2页
java的最优化内存管理_第3页
java的最优化内存管理_第4页
java的最优化内存管理_第5页
资源描述:

《java的最优化内存管理》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、www.027hpedu.comJava的最优化内存管理1、Java的内存管理就是对象的分配和释放问题。在Java中,程序员需要通过关键字new为每个对象申请内存空间(基本类型除外),所有的对象都在堆(Heap)中分配空间。对象的释放是由GC决定和执行的。在Java中,内存的分配是由程序完成的,而内存的释放是有GC完成的,这种收支两条线的方法简化了程序员的工作。但也加重了JVM的工作。这也是Java程序运行速度较慢的原因之一。GC释放空间方法:监控每一个对象的运行状态,包括对象的申请、引用、被引用、赋值等。当该对象不再被引用时,释放对象。2、内存管理结构Java使用有向图的方式进行内存管

2、理,对于程序的每一个时刻,我们都有一个有向图表示JVM的内存分配情况。将对象考虑为有向图的顶点,将引用关系考虑为图的有向边,有向边从引用者指向被引对象。另外,每个线程对象可以作为一个图的起始顶点,例如大多程序从main进程开始执行,那么该图就是以main进程顶点开始的一棵根树。在这个有向图中,根顶点可达的对象都是有效对象,GC将不回收这些对象。如果某个对象(连通子图)与这个根顶点不可达(注意,该图为有向图),那么我们认为这个(这些)对象不再被引用,可以被GC回收。3、使用有向图方式管理内存的优缺点www.whhpit.comwww.027hpedu.comJava使用有向图的方式进行内存

3、管理,可以消除引用循环的问题,例如有三个对象,相互引用,只要它们和根进程不可达的,那么GC也是可以回收它们的。这种方式的优点是管理内存的精度很高,但是效率较低。另外一种常用的内存管理技术是使用计数器,例如COM模型采用计数器方式管理构件,它与有向图相比,精度行低(很难处理循环引用的问题),但执行效率很高。★Java的内存泄露Java虽然由GC来回收内存,但也是存在泄露问题的,只是比C++小一点。1、与C++的比较c++所有对象的分配和回收都需要由用户来管理。即需要管理点,也需要管理边。若存在不可达的点,无法在回收分配给那个点的内存,导致内存泄露。存在无用的对象引用,自然也会导致内存泄露。

4、Java由GC来管理内存回收,GC将回收不可达的对象占用的内存空间。所以,Java需要考虑的内存泄露问题主要是那些被引用但无用的对象——即指要管理边就可以。被引用但无用的对象,程序引用了该对象,但后续不会再使用它。它占用的内存空间就浪费了。如果存在对象的引用,这个对象就被定义为“活动的”,同时不会被释放。2、Java内存泄露处理处理Java的内存泄露问题:确认该对象不再会被使用。典型的做法——把对象数据成员设为null从集合中移除该对象注意,当局部变量不需要时,不需明显的设为null,因为一个方法执行完毕时,这些引用会www.whhpit.comwww.027hpedu.com自动被清理

5、。例子:1.ListmyList=newArrayList();2.for(inti=1;i<100;i++)3.{4.Objecto=newObject();5.myList.add(o);6.o=null;7.}8.//此时,所有的Object对象都没有被释放,因为变量myList引用这些对象。9.当myList后来不再用到,将之设为null,释放所有它引用的对象。之后GC便会回收这些对象占用的内存。★对GC操作对GC的操作并不一定能达到管理内存的效果。GC对于程序员来说基本是透明的,不可见的。我们只有几个函数可

6、以访问GC,例如运行GC的函数System.gc(),System.。但是根据Java语言规范定义,System.gc()函数不保证JVM的垃圾收集器一定会执行。因为,不同的JVM实现者可能使用不同的算法管理GC。通常,GC的线程的优先级别较低。JVM调用GC的策略有很多种,有的是内存使用到达一定程度时,GC才开始工作,也有定时执行的,有的是平缓执行GC,有的是中断式执行GC。但通常来说,我们不需要关心这www.whhpit.comwww.027hpedu.com些。除非在一些特定的场合,GC的执行影响应用程序的性能,例如对于基于Web的实时系统,如网络游戏等,用户不希望GC突然中断应用

7、程序执行而进行垃圾回收,那么我们需要调整GC的参数,让GC能够通过平缓的方式释放内存,例如将垃圾回收分解为一系列的小步骤执行,Sun提供的HotSpotJVM就支持这一特性。★内存泄露检测市场上已有几种专业检查Java内存泄漏的工具,它们的基本工作原理大同小异,都是通过监测Java程序运行时,所有对象的申请、释放等动作,将内存管理的所有信息进行统计、分析、可视化。开发人员将根据这些信息判断程序是否有内存泄漏问题。这些工具包括Opti

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。