10 Java程序设计中有关内存管理的其他经验
根据JVM内存管理系统的工作原理,可以通过一些技巧和方式,让JVM做GC处理时更加有效率,更加符合应用程序的要求。以下就是程序设计的一些经验。
(1) 最基本的建议就是尽早释放无用对象的引用。大多数程序员在使用临时变量的时候,都是让引用变量在退出活动域(scope)后,自动设置为null。我们在使用这种方式时,必须特别注意一些复杂的对象图,例如数组、队列、树、图等,这些对象之间的相互引用关系较为复杂。对于这类对象,GC回收它们一般效率较低。如果程序允许,尽早将不用的引用对象赋为null。这样可以加速GC的工作。例如:
... ...
A a = new A();
// 应用a对象
a = null; // 当使用对象a之后主动将其设置为空
... ...
但要注意如果a是方法的返回值,千万不要做这样的处理,否则你从该方法中得到的返回值永远为空,而且这种错误不易被发现、排除。
(2) 尽量少用finalize函数。finalize函数是Java给程序员提供一个释放对象或资源的机会。但是,它会加大GC的工作量,因此尽量少采用finalize方式回收资源。
(3) 如果需要使用经常用到的图片,可以使用soft应用类型。它可以尽可能将图片保存在内存中,供程序调用,而不引起OutOfMemory。
(4) 注意集合数据类型,包括数组、树、图、链表等数据结构,这些数据结构对GC来说,回收更为复杂。另外,注意一些全局的变量,以及一些静态变量。这些变量往往容易引起悬挂对象,造成内存浪费。
(5) 尽量避免在类的默认构造器中创建、初始化大量的对象,防止在调用其自类的构造器时造成不必要的内存资源浪费。
(6) 尽量避免强制系统做垃圾内存的回收(通过显式调用方法System.gc() ),增长系统做垃圾回收的最终时间,降低系统性能。
(7) 尽量避免显式申请数组空间,当不得不显式地申请数组空间时尽量准确地估计出其合理值,以免造成不必要的系统内存开销。
(8) 尽量在做远程方法调用(RMI)类应用开发时使用瞬间值(transient)变量,除非远程调用端需要获取该瞬间值(transient)变量的值。
(9) 尽量在合适的场景下使用对象池技术以提高系统性能,缩减系统内存开销,但是要注意对象池的尺寸不易过大,及时清除无效对象释放内存资源,综合考虑应用运行环境的内存资源限制,避免过高估计运行环境所提供内存资源的数量。
小结
本章介绍了Java内存管理的相关知识,虽然Java程序设计中的内存是由JVM控制管理的,但并不等于开发人员无法通过改善应用,或其他途径优化对内存的使用。本章通过对下面知识点的讲解,使你对Java内存的使用了如指掌、运用自如。本章包括以下知识点:垃圾回收(Garbage Collection)、堆内存(heap)、JVM中对象的生命周期,Java中的析构方法finalize,数组的创建,共享静态变量存储空间,对象重用与GC,瞬间值(transient),JVM内存参数调优,以及Java程序设计中有关内存管理的经验等相关知识。其中JVM中的对象生命周期又包括:创建阶段(Creation)、应用阶段(Using)、不可视阶段(Invisible)、不可到达阶段(Unreachable)、可收集阶段、终结阶段与释放阶段。
通过本章的学习,你对Java的内存管理机制会有一个系统的认识,同时在对知识点的讲解过程中,给出了选择与放弃的规则,这样你就可以在实际开发中避免由于Java内存的不合理使用而导致系统性能下降或者系统崩溃等不良后果的发生,并且可以权衡考虑在特定的场景下选用哪种合理使用内存的技术。
分享到:
相关推荐
java实验报告———JavaSwing编程.pdf
利用Java技术编程和oracle数据库来实现简单的房产中介系统。
《Java语言程序设计——基础篇》是Java语言的经典教材,中文版分为《Java语言程序设计基础篇》和《Java语言程序设计进阶篇》主要介绍语法结构、面向对象程序设计基础知识到面向对象程序设计、图形用户界面设计、异常...
《Java语言程序设计——基础篇》是Java语言的经典教材,中文版分为《Java语言程序设计基础篇》和《Java语言程序设计进阶篇》主要介绍语法结构、面向对象程序设计基础知识到面向对象程序设计、图形用户界面设计、异常...
基于OBE理念的程序设计类课程教学研究与实践——以《Java程序设计》课程为例.pdf
《Java语言程序设计——基础篇》是Java语言的经典教材,中文版分为《Java语言程序设计基础篇》和《Java语言程序设计进阶篇》主要介绍语法结构、面向对象程序设计基础知识到面向对象程序设计、图形用户界面设计、异常...
JAVA_13 JDBC\实训项目——Java电子小字典.doc JAVA_2面向对象(OO)程序设计概念\Animal(Polymorphism).java JAVA_2面向对象(OO)程序设计概念\Animal(super).java JAVA_2面向对象(OO)程序设计概念\Animal.class JAVA_...
大数据背景下的高校计算机编程类课程教学改革探讨——以《Java程序设计》课程教学改革为例.pdf
《Java语言程序设计——基础篇》是Java语言的经典教材,中文版分为《Java语言程序设计基础篇》和《Java语言程序设计进阶篇》主要介绍语法结构、面向对象程序设计基础知识到面向对象程序设计、图形用户界面设计、异常...
java程序设计教程第五版——国外经典教材!!!!
《Java语言程序设计——基础篇》是Java语言的经典教材,中文版分为《Java语言程序设计基础篇》和《Java语言程序设计进阶篇》主要介绍语法结构、面向对象程序设计基础知识到面向对象程序设计、图形用户界面设计、异常...
《Java语言程序设计——基础篇》是Java语言的经典教材,中文版分为《Java语言程序设计基础篇》和《Java语言程序设计进阶篇》主要介绍语法结构、面向对象程序设计基础知识到面向对象程序设计、图形用户界面设计、异常...
内容概要:Java——实现学生管理系统(增、删、查、找) 适合人群:具备一定的编程能力,对Java语言的基本语法有一定的了解,适合在校大学生 能学到什么: ① 做系统的基本框架与思路 ② 功能模块化,后集体调用,...
原书名:Oracle 9i Java Programming <br>Oracle 9i Java程序设计——使用PL/SQL和Java的解决方案 <br>【原出版社】 Wrox Press 【作 者】Bjarki Holm,John Carnell等 【译 者】 康博 【丛 ...
下面是本卷详细介绍的主要内容: Java语言基础知识面向对象程序设计接口与内部类事件监听器模型 Swing图形用户界面程序设计打包应用程序异常处理登陆与调试泛型化程序设计集合框架多线程... 【作译者介绍】 本书提供...
Java语言程序设计作业中部分源代码!!! 《Java语言程序设计》是一门实践性很强的课程,学生必须结合大量的编程练习才能更好地理解和掌握课程内容。通过与课程内容相配合的实验教学环节,使学生在深入理解课程内容...
《面向对象程序设计(Java)》 A【开卷】 一、填空题(每空2分,共40分) 1. 一个Java程序运行从上到下的环境次序是( (1) ) A. 操作系统、Java程序、JRE/JVM、硬件 B. JRE/JVM、Java程序、硬件、操作系统 C. Java...
JAVA_13 JDBC\实训项目——Java电子小字典.doc JAVA_2面向对象(OO)程序设计概念\Animal(Polymorphism).java JAVA_2面向对象(OO)程序设计概念\Animal(super).java JAVA_2面向对象(OO)程序设计概念\Animal.class JAVA_...
课后答案 我搜索了很久才找的,用来和你们一起分享
JAVA_13 JDBC\实训项目——Java电子小字典.doc JAVA_2面向对象(OO)程序设计概念\Animal(Polymorphism).java JAVA_2面向对象(OO)程序设计概念\Animal(super).java JAVA_2面向对象(OO)程序设计概念\Animal.class JAVA_...