Java程序内存行为探究 使用存在低效问题 |
2013-10-31 14:27 作者:王志花 来源:硅谷网-《硅谷》杂志 HV: 编辑: 【搜索试试】
|
|
基于工作实践,分析java程序内存使用的低效问题,并进行相关原因的探析,在此基础上提出相应的优化java程序内存行为的具体策略。希望有关人员加以借鉴和参考,对java程序内存行为进行深入的研究,从而结合java程序内存行为的分析模型,对整个内存使用状态进行有效的分析和测试,探寻适用的优化策略。
整个java程序内存行为的低效主要是由于垃圾收集影响的。随着先进计算机使用过程中对功耗问题的关注程度越来越大,很多的java程序研究工作都围绕着绿色计算展开。Java程序内存行为的探究是通过对java程序的内存行为进行科学的分析和测试,并掌握内存行为的一般规律,然后针对内存的低效使用行为作出有效的优化应对,从而提升整个java程序内存的使用效率。下面,就从java程序内存的低效使用问题以及优化内存行为的策略着手进行简要的探讨:
1java程序内存的低效使用问题
1.1泄露对象
泄露对象是java程序内存使用低效的一个问题。在整个java程序中,大量的变量所需要的具体内存空间在进行编译的过程中通常都无法得到确定,应该在程序执行的过程中进行动态分配,并且在不需要使用的时候进行彻底的释放。Java语言的内存机制是利用垃圾回收器进行主要的内存回收行为,这种行为通常是自动完成的。垃圾回收器能够监控适用对象的运行状况,结合可达测试来监测适用对象能否从根可达。垃圾回收器能够回收以及失去了引用,并且从根不可达的响应内存对象。然而,很多依然被引用的对象不一定具有实效的意义,这些无用的对象仍然被其他对象引用,进而使得无用对象无法得到回收,从而成为了泄露对象。这些无用对象占用的内存往往没有办法进行循环使用,进而占据了相应的程序内存,影响了整个java程序内存的高效实用。
1.2蚍蜉对象
蚍蜉对象是java程序内存使用低效的又一个问题。Java程序在执行过程中,会伴随着很多生存周期较短一次使用的对象以及临时对象,这些对象在引用过程中占据了很多的内存,垃圾回收器会自动进行频繁启动,但是没有办法进行无用对象的回收,在内存回收循环机制的影响下,垃圾回收器会反复地启动并搜索,进而消耗了大量的的程序时间,降低了java程序内存的使用效率。这些临时对象和一次性使用对象就称之为蚍蜉对象。这些蚍蜉对象的存在,使得整个java程序的内存在存储空间和程序的执行上必须对这些临时对象进行分析和检测,加之它们占有的大规模内存并且无法得到迅速的回收,使得整个java程序的内存使用量变小,计算机的操作状态也就受到了很大的影响。
1.3空闲对象
空闲对象则是java程序内存使用低效的另一个问题。在java程序的执行过程中,很多的引用对象在得到分配之后,很长一段时间里面都处于没有被使用的空闲状态。这些空闲对象通常都是生存周期较长,但是具体的使用以及活动时长都是集中在某个或者某几个很短的时间里面,这些空闲对象在从被分配到被回收的过程中并没有相应的活动,但是占据着很大的内存,这样就使得整个java程序的内存使用效率降低。Java程序在执行过程中,整个内存的使用效率和内存大小是紧密联系的,但是这些空闲对象的存在,在长时间占据一定的内存之后,使得整个java程序的执行速度和效率受到了很大的影响,由于垃圾回收器在对空闲对象进行回收需要经过很长的一段时间,因此这些对象对java程序的执行的影响周期也很长。
2优化java程序内存行为的策略
2.1java语言垃圾回收功能的实现
java程序内存行为中的垃圾收集是通过在整个程序的内部来实现永久的使用进程或线程,来自动清理任何和相对应的程序的无用对象,释放更大的内存空间,将内存单元重新分配给程序或操作系统,便于重复使用。程序的开发人员就不必专门来设置合适的程序来对对象进行内存的删除,这样就很好地解决了java程序执行过程中造成内存漏洞的一系列原因。Java虚拟机是专门针对java语言的无用对象单元进行回收的一种实现机制。目前,在整个无用对象单元的回收问题上,java虚拟机主要是采用的一种保守式回收,就是stop-and-copy算法。这种算法对每一个单元对象都进行了标记要求,主要是每一个单元都包括一个标记位的域或者该算法在运行过程中能够创建一个具体的外部数组存放的标记位。算法在执行时会对已经分配的内存或者单元对象的标记位进行扫描,然后检查出所用的引用对象中的变量和域,最后再扫描出没有被标记的对象,这些没有标记的对象就是java语言的垃圾信息,能够及时得到回收。
2.2唯一模式的应用
唯一模式的应用对优化整个java程序的内存行为起到了积极的作用。通常java虚拟机针对静态变量内存的分配规则主要体现在,当整个程序的数据进行初始化时,这个静态变量就会占用到相应的内存空间,并且占用的时间和定义静态变量的类占用内存空间的时间在长短上是保持一致的。Java虚拟机的类在整个程序加载的过程中会在自身的生存周期内一直占用着内存空间,这些静态的变量随之也就在整个程序的内存中占据了相应的空间,并且和类所占用的时间周期一致。目前针对静态变量的主要用法就是应用唯一模式。唯一模式是一种面向具体引用对象的设计模式,该模式的实行原则就是:一个类只能够对应一个实例,并且给这个实例提供了全局入口指针。唯一模式的实际应用的优劣状态主要取决于相应的设计要求。假使这些引用对象需要保存在程序的内存中,从而能够迅速进行复用,那么唯一模式则是最佳的实行方案。这样就能够使得整个java程序在处理空闲对象和泄露对象时更加具有高效性。
2.3解决未知或多余对象引用造成的内存漏洞
通常垃圾对象的回收都是理解为回收某一个不被引用的对象上面,进而对该对象进行内存删除的操作。但是当很多时候我们认为程序已经对一个对象停止了引用的情况下,实际上这个程序还存在我们没有感知到的引用关系。在了解了未知或者多余的引用对象产生的主因后,就可以通过避免静态变量引用的对象,在处理完了对象后能够消除程序中的引用关系或者弱用这种引用关系来解决未知或多余对象内存引用造成的内存漏洞。我们可以在引用对象中编写相应的清除程序,然后让这个程序通过外部调用的模式来清除整个程序中静态变量对相关对象的引用,然后在设置的对象列表中去删除这些多余或者无用的对象。另外,弱引用则是一种典型的对象引用形式,它通常是以一种对垃圾回收不组织的方式存在的。垃圾回收器只有在考察引用对象的基础上,结合弱引用状态,对无用或者多余对象进行回收,才能够彻底进行清除。
3结束语
综上所述,java程序的内存存在相应的使用低效问题,对这些问题进行研究和查实,能够帮助我们对相关的java程序内存行为形成足够的了解。在整个优化java程序的内存行为的过程中,通过对泄露对象、蚍蜉对象和空闲对象的原因分析和做出具体的对策进而提升整个java程序内存的使用效率。 |
|
|
|
【对“Java程序内存行为探究 使用存在低效问题”发布评论】 |
版权及免责声明:
① 本网站部分投稿来源于“网友”,涉及投资、理财、消费等内容,请亲们反复甄别,切勿轻信。本网站部分由赞助商提供的内容属于【广告】性质,仅供阅读,不构成具体实施建议,请谨慎对待。据此操作,风险自担。
② 内容来源注明“硅谷网”及其相关称谓的文字、图片和音视频,版权均属本网站所有,任何媒体、网站或个人需经本网站许可方可复制或转载,并在使用时必须注明来源【硅谷网】或对应来源,违者本网站将依法追究责任。
③ 注明来源为各大报纸、杂志、网站及其他媒体的文章,文章原作者享有著作权,本网站转载其他媒体稿件是为传播更多的信息,并不代表赞同其观点和对其真实性负责,本网站不承担此类稿件侵权行为的连带责任。
④ 本网站不对非自身发布内容的真实性、合法性、准确性作担保。若硅谷网因为自身和转载内容,涉及到侵权、违法等问题,请有关单位或个人速与本网站取得联系(联系电话:01057255600),我们将第一时间核实处理。
|
|
|
|