`
zhang.jianjun
  • 浏览: 20204 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
最近访客 更多访客>>
社区版块
存档分类
最新评论
  • NGG: 个人建议: 正确的做法应该是把样式放到外部css文件中,使用 ...
    js日期选择器

【JAVA优化编程】内存管理之——(10)Java程序设计中有关内存管理的其他经验

阅读更多

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

    标题中提到的“JavaSwing编程”,指的是在Java编程语言中,使用Swing库进行图形用户界面(GUI)编程的一种实践。Swing是Java的一个工具包,用于开发Java应用程序的图形用户界面。它提供了一套丰富的组件,可以让...

    仓库管理源代码——JAVA程序设计

    《仓库管理源代码——JAVA程序设计》是华中科技大学一项四年的课程设计项目,旨在让学生通过实际编程经验,深入理解仓库管理系统的设计与实现。在这个项目中,学生将使用Java编程语言,结合数据库技术,构建一个完整...

    Java程序设计——房产中介管理系统

    《Java程序设计——房产中介管理系统》是一份课程设计报告,旨在通过Java技术和Oracle数据库实现一个简易的房产中介系统。这份报告出自数学与信息工程学院信息管理与信息系统专业的学生之手,详细阐述了系统的设计...

    KJava深入浅出——Java在PDA上的程序设计

    《KJava深入浅出——Java在PDA上的程序设计》一书主要涵盖了Java技术在掌上设备(PDA)上的应用开发,旨在帮助开发者理解和掌握KJava编程的基础知识和实战技巧。KJava是Java Micro Edition (Java ME)的一个分支,...

    基于JAVA_SSM的毕业设计——银行管理系统

    《基于JAVA_SSM的毕业设计——银行管理系统》 在当今数字化时代,银行管理系统已经成为金融机构不可或缺的一部分,它极大地提升了银行业务处理的效率和准确性。本文将深入探讨一个基于JAVA_SSM技术实现的银行管理...

    用户管理系统——java

    【用户管理系统——Java】 在Java编程领域,用户管理系统是一个常见的实践项目,用于学习和掌握面向对象设计、数据库交互以及命令行界面(CLI)的开发。本项目是开发者首次尝试使用Java语言实现的一个基础用户管理...

    计算机软件开发的Java编程语言及应用——评《Java编程方法论》.pdf

    【Java编程语言特点】 Java编程语言是面向对象的高级编程语言,它的主要特点包括: 1. **操作灵活性**:Java的语法简洁且易于理解,它允许程序员以更少的代码实现复杂的逻辑,降低了编程的复杂性,提高了开发效率...

    《面向对象程序设计——Java语言》电子课件(程细柱PPT)

    《面向对象程序设计——Java语言》是一门深入探讨如何使用Java进行面向对象编程的课程,由知名讲师程细柱制作的PPT电子课件。面向对象编程(Object-Oriented Programming,简称OOP)是现代软件开发中的核心编程范式...

    Java并发编程之——Amino框架

    与《高性能Java系统实现与调优.pdf》这本书结合,你可能会学到更多关于Java性能优化的技巧,包括内存管理、垃圾回收、JVM参数调整等方面。书中的内容可能涵盖了如何通过调整系统配置、优化算法和数据结构,以及使用...

    HNU编程新技术实务实验一——Java语言编程

    【标题】"HNU编程新技术实务实验一——Java语言编程"揭示了这是一份与Java编程相关的学习资源,特别关注于湖南大学(HNU)的编程新技术实务课程中的实验项目。这个实验可能涵盖基础到进阶的Java编程概念,旨在帮助...

    学生学籍管理系统——Java写的程序

    《Java编写的学生学籍管理系统详解》 在信息技术领域,学生学籍...通过深入研究这个系统,开发者不仅能提升Java编程技能,还能了解数据库管理、GUI设计、安全控制等多个领域的知识,为今后的项目开发奠定坚实基础。

    Java界面版 内存地址转换的三种方式过程演示

    对于操作系统课程设计而言,这是一个很好的实践项目,可以帮助学生深入理解内存管理、JVM工作原理以及Java与其他语言的交互。同时,这个项目也可以作为进一步研究,比如分析不同内存分配策略对程序性能的影响,或...

    java 面向对象编程(csdn)————程序.pdf

    在Java编程语言中,面向对象编程(OOP)是一种核心概念,它基于类和对象的概念,以及封装、继承和多态三大特性。在本文中,我们将深入探讨这些知识点,以便更好地理解Java中的面向对象编程。 首先,让我们回顾一下...

    Java大学简明教程——实例程序设计

    Java大学简明教程——实例程序设计是一本专为初学者设计的编程教材,它通过丰富的实例来引导读者深入理解Java编程语言。这本书的核心目标是帮助新手快速掌握Java的基础概念和编程技巧,从而能够独立地进行程序设计。...

    Java程序设计——学生成绩查询

    在本项目"Java程序设计——学生成绩查询"中,我们关注的是利用Java语言来实现一个功能完善的学生成绩查询系统。这个系统的核心是能够连接到数据库,从中检索并显示学生的成绩信息。以下是对这个项目涉及的主要知识点...

    Java语言程序设计A——课件

    Java语言程序设计A——课件 Java是一种广泛应用于各种计算平台的高级编程语言,由Sun Microsystems(现为Oracle Corporation的一部分)于1995年推出。它的设计目标是具有“一次编写,到处运行”的跨平台兼容性,这...

    Java程序性能优化 让你的Java程序更快、更稳定

    在本文中,我们将深入探讨Java性能优化的关键点,帮助你的Java程序达到更快、更稳定的目标。 1. **JVM调优**:Java虚拟机(JVM)是Java程序运行的基础,优化JVM参数可以显著提升性能。例如,调整堆内存大小(-Xms和-...

    JAVA学习笔记————————

    通过阅读和学习这些JAVA学习笔记,开发者不仅可以掌握JAVA编程的基本技能,还能深入了解其设计理念,从而更好地应对各种实际开发问题。不断更新和完善自己的JAVA知识体系,对于成为一名优秀的JAVA开发者至关重要。

    《Java 工程师的编程逻辑》——用 java 看计算机世界

    《Java工程师的编程逻辑》是一本深度探讨Java编程思想和技术的书籍,旨在帮助读者通过Java语言洞察计算机世界的奥秘。本书不仅涵盖了Java的基础知识,还深入讲解了编程逻辑和设计原则,是Java初学者和进阶者提升技能...

Global site tag (gtag.js) - Google Analytics