`
xuyuanshuaaa
  • 浏览: 397440 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Java程序中有关内存管理的经验

阅读更多
根据上面讲解的JVM内存管理系统的工作原理,我们可以通过一些技巧和方式,让JVM做GC处理时更加有效率,更加符合应用程序的要求。以下就是程序设计的一些经验。

(1)最基本的建议就是尽早释放无用对象的引用。大多数程序员在使用临时变量的时候,都是让引用变量在退出活动域(scope)后,自动设置为null。我们在使用这种方式时,必须特别注意一些复杂的对象图,例如数组、队列、树、图等,这些对象之间的相互引用关系较为复杂。对于这类对象,GC回收它们的效率一般较低。如果程序允许,尽早将不用的引用对象赋为null。这样可以加速GC的工作。 例如:

… …

A a = new A();

// 应用a对象

a = null; // 当使用对象a之后主动将其设置为空

… …

但要注意,如果a是方法的返回值,千万不要做这样的处理,否则你从该方法中得到的返回值永远为空,而且这种错误不易被发现。因此这时很难及时抓住、排除NullPointerException异常。

(2)尽量少用finalize函数。finalize函数是Java给程序员提供一个释放对象或资源的机会。但是,它会加大GC的工作量,因此尽量少采用finalize方式回收资源。

(3)如果需要使用经常用到的图片,可以使用soft应用类型。它可以尽可能将图片保存在内存中,供程序调用,而不引起OutOfMemory。

(4)注意集合数据类型,包括数组、树、图、链表等数据结构,这些数据结构对GC来说,回收更为复杂。另外,注意一些全局的变量,以及一些静态变量。这些变量往往容易引起悬挂对象,造成内存浪费。

(5)尽量避免在类的默认构造器中创建、初始化大量的对象,防止在调用其自类的构造器时造成不必要的内存资源浪费。

(6)尽量避免强制系统做垃圾内存的回收(通过显式调用方法System.gc()),增长系统做垃圾回收的最终时间,降低系统性能。

(7)尽量避免显式申请数组空间,当不得不显式地申请数组空间时尽量准确地估计出其合理值,以免造成不必要的系统内存开销。

(8)尽量在做远程方法调用(RMI)类应用开发时使用瞬间值(transient)变量,除非远程调用端需要获取该瞬间值(transient)变量的值。

(9)尽量在合适的场景下使用对象池技术以提高系统性能,缩减系统内存开销,但是要注意对象池的尺寸不易过大,及时清除无效对象释放内存资源,综合考虑应用运行环境的内存资源限制,避免过高估计运行环境所提供内存资源的数量。
分享到:
评论

相关推荐

    java程序中的内存分配问题

    7. **垃圾收集机制**:Java的自动内存管理依赖于垃圾收集器。当一个对象不再被任何引用指向,垃圾收集器会将其回收,释放内存。垃圾收集策略和参数调整对于性能有直接影响。 8. **内存泄漏**:虽然Java有垃圾收集器...

    java程序自我监视内存使用

    在Java编程领域,内存管理是优化程序性能的关键因素。Java程序自我监视内存使用是一种先进的技术,它允许开发者实时了解程序运行时的内存消耗情况,从而有效地预防和解决内存泄漏问题,提升程序的稳定性和效率。以下...

    java管理windows系统内存_java释放内存缓存_java获得CPU使用率_系统内存_硬盘_进程源代码

    在Windows操作系统中,内存管理是一个非常重要的方面。Windows实现按需调页的虚拟内存机制,使得应用程序可以使用超过物理内存容量的虚拟内存。此外,Windows还使用了页面文件来扩展物理内存的容量。 在Java中,...

    java中与继承有关的程序内存分析

    当我们谈论“java中与继承有关的程序内存分析”时,主要关注的是在Java程序运行时,内存是如何为继承体系的实例分配的。 Java内存主要分为三个区域:栈(Stack)、堆(Heap)和方法区(Method Area)。在讨论继承时...

    用JAVA做的虚拟内存管理.rar,JDK是6.2

    Java虚拟机(JVM)是Java程序运行的基础,它为应用程序提供了一个抽象的硬件平台,包括内存管理和垃圾回收等核心功能。在这个项目中,我们关注的是JVM如何进行虚拟内存管理,特别是在JDK 6.2版本中的实现。虚拟内存...

    Java实时应用程序中的内存管理

    Java实时应用程序中的内存管理是一个关键话题,特别是在有严格时间要求的系统中。垃圾收集作为Java内存管理的核心机制,虽然能自动回收不再使用的对象,但其潜在的CPU开销和不可预知的延迟对实时应用程序构成了挑战...

    从 Java 代码到 Java 堆 理解和优化您的应用程序的内存使用

    【描述】:本文旨在帮助Java开发者深入了解从编写代码到Java堆的内存管理过程,以便更好地优化应用程序的内存使用。通过分析Java代码中的内存开销,以及讨论对象创建、集合效率等方面,将揭示如何确定性能瓶颈并改进...

    java程序中的内存分配问题源码整理

    Java程序在运行过程中,内存管理是一项至关重要的任务,它直接影响到程序的性能、稳定性和可维护性。在Java中,内存主要分为堆内存、栈内存、方法区(在Java 8之后被元空间取代)以及程序计数器等几个部分。下面我们...

    java内存管理 ppt

    Java内存管理是Java编程中的核心概念,它涉及到程序运行时数据的存储、分配以及回收。在Java中,内存主要分为堆内存(Heap)和栈内存(Stack),还有方法区(Method Area)、程序计数器(PC Register)以及本地方法...

    java内存管理精彩概述

    Java内存管理是Java核心技术的重要组成部分,对于每个开发者来说,理解其工作原理都是十分必要的。这一主题既实用又有趣。以下是对Java内存管理的精彩概述,主要基于Sun Hotspot JVM,但请注意,不同JVM可能有不同的...

    java内存管理详细介绍.doc

    Java内存管理是Java编程中至关重要的一环,它与C++等其他语言的内存管理机制有着显著的区别。在C++中,程序员需要手动管理内存,包括分配和释放,而在Java中,这一过程则由Java虚拟机(JVM)自动进行,通过垃圾收集...

    Java虚拟机内存管理总结

    Java虚拟机(JVM)中的内存管理是指Java语言中对象的分配和释放问题。Java中的内存管理可以分为两部分:对象的分配和释放。 对象的分配是由程序完成的,程序员需要通过关键字new为每个对象申请内存空间(基本类型...

    hqldb数据库在java程序中以内存方式启动

    标题 "hqldb数据库在java程序中以内存方式启动" 指的是使用HyperSQL Database (HSQLDB) 这个轻量级、开源的关系型数据库系统,在Java应用程序中以内存模式运行。HSQLDB因其快速、高效且易于集成的特点,常被用作开发...

    java中带有this关键字的程序内存分析

    在Java编程语言中,`this`关键字是一个非常重要的概念,它在程序的内存管理中扮演着关键角色。本文将深入探讨`this`关键字在Java程序中的应用,以及它如何与内存分配相关联。 首先,`this`关键字在Java中主要表示...

    Java中堆内存与栈内存分配浅析

    本文将深入探讨Java中堆内存与栈内存的分配机制,并通过对比分析它们之间的差异,帮助读者更好地掌握Java内存管理的核心概念。 #### 二、堆内存与栈内存概述 ##### 1. 堆内存 堆内存是Java虚拟机(JVM)用于存储...

    java学习笔记(java 反射机制 流 内存管理)

    本笔记主要涵盖了四个核心知识点:Java反射机制、流(I/O流)、内存管理和Java学习的基础。以下是对这些主题的详细阐述: 一、Java反射机制 Java反射机制是Java语言的一个强大特性,允许程序在运行时检查类、接口、...

    java中带static关键字的程序内存分析

    在本文中,我们将详细探讨`static`关键字在Java程序内存分析中的应用。 首先,`static`关键字用于声明类变量或静态方法。类变量是属于类本身,而不是类的任何实例的。这意味着,无论创建多少个类的实例,类变量只...

Global site tag (gtag.js) - Google Analytics