`
soongbo
  • 浏览: 88857 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

要知道,java也会有内存泄漏

    博客分类:
  • Java
阅读更多

   当你从手工管理内存的语言到具有垃圾回收机制的功能语言的时候,你也许会觉得很神奇,甚至有点不可思议,然而,却不知这种不可思议的背后却潜在着危机。所以在编写Java程序的时候,一定也是必要的要考虑一下“消除过期的对象引用”。我们来看这样一个列子:

          public class Stack {

             private Object[] elements;

             private int size  =  0;

             private int DEFAULT_SIZE  =  10;

            

             public Stack() {

              

                   elements = new Object[DEFAULT_SIZE];

             }

 

 

              public void push(Object e)  {

                   elements[size++] = e

             }

 

 

              public Object pop() {

                   if (size == 0) {

                        throw new EmptyStackException();

                     return elements[--size];

             }

}

 

 

 

  以上是一个简单的实现栈的一段程序,也许你会觉得没有什么问题,可是问题恰恰就潜在在你的代码中,不严格的讲, 程序中有一个”内存泄漏“,随着垃圾回收器活动的增加,程序的性能会不断降低。那么这段程序究竟是哪里出了问题呢?其实就在pop()方法中,当每次取出一个元素放回后,其实elements还维护着这些取出的元素(虽然这些对象对于栈来说已经没有存在的必要),而对于这些过期的对象是永远不会被解除的,所以导致内存一直得不到释放。解决这个问题的方法很简单,就是在pop()方法的中做如下修改

 

                public Object pop() {

                if (size == 0) {

                     throw new EmptyStackException();

                     Object result = elememts[--size];

                     element[size] = null;

                     return result;

                 }

 

       所以清空过期对象应该引起程序员的重视,但是对于清空过期对象应该是一种意外,而不是一种规范的要求。

分享到:
评论

相关推荐

    Java加载dll,导致Java进程内存泄露

    标题“Java加载dll,导致Java进程内存泄露”涉及到的是Java平台与本地库(DLL)交互时可能出现的问题。在Java中,通过Java Native Interface (JNI) 可以调用C/C++编写的动态链接库(DLL),实现Java代码与本地代码的...

    如何解决Java内存泄漏

    ### 如何解决Java内存泄漏 #### 1. 背景 Java凭借其垃圾回收机制大大简化了内存管理,使得开发者无需手动管理内存的释放,从而提升了开发效率。然而,这种自动化管理也可能成为一把双刃剑,特别是当开发人员忽视...

    java内存泄露、溢出检查方法和工具

    Java内存管理是开发Java应用程序时的关键环节,内存泄露和溢出问题可能导致系统性能下降,甚至导致服务崩溃。本文将深入探讨如何检测和分析Java内存泄露与溢出,并介绍一种常用的工具——Memory Analyzer(MAT)。 ...

    java内存泄漏分析工具

    Java内存泄漏是一个严重的问题,它会导致程序性能下降,甚至可能导致应用程序崩溃。为了有效地诊断和解决这类问题,开发者需要借助特定的分析工具。本篇将详细探讨Java内存泄漏及其相关的分析工具。 内存泄漏是指...

    java内存泄漏解决

    ### Java内存泄漏解决方案详解 #### 一、Java内存泄漏概述 在Java开发过程中,经常会遇到内存泄漏的问题,尤其是在长时间运行的应用程序中更为常见。本文将详细介绍如何解决Java内存泄漏问题,帮助开发者更好地...

    Java内存泄露及内存无法回收解决方案

    4. Native内存泄漏:Java应用可能使用JNI(Java Native Interface)与C/C++代码交互,若C/C++部分存在内存泄漏,也会间接导致Java内存泄漏。 解决内存泄漏的方法主要包括: 1. 使用工具监控:通过工具如VisualVM、...

    java使用JMAP定位代码内存泄漏在哪

    首先,理解内存泄漏的概念:内存泄漏是指程序在申请内存后,无法释放已申请的内存空间,一次小的内存泄漏可能并不明显,但随着时间的推移,这些未释放的内存会逐渐积累,最终可能导致系统资源耗尽。 JMAP是Java自带...

    java之内存泄露

    这种情况下,即使程序不再需要这些对象,它们也会持续占用内存空间,从而导致内存泄露。 ##### 3.3 内存泄露的主要原因 1. **静态集合类的使用**:像`HashMap`、`Vector`这样的静态集合类,由于其生命周期与应用...

    java内存分析-内存泄露问题.rar

    本文将深入探讨Java内存分析和内存泄露问题。 首先,我们需要了解Java内存模型的基础。Java内存主要分为三个区域:堆(Heap)、栈(Stack)和方法区(Method Area)。堆用于存储对象实例,栈用于存储方法调用及局部...

    java 内存泄漏

    ### Java内存泄漏详解 #### JVM内存管理概览 在探讨Java内存泄漏之前,我们先简要回顾一下JVM(Java虚拟机)的基本架构及其内存管理机制。这有助于更好地理解内存泄漏的发生原因及其解决方法。 ##### 类装载子...

    java避免内存泄露

    4. **监听器、回调函数中的引用**:如果监听器或回调函数中的对象引用没有被清除,即使对象不再使用也会导致内存泄露。 5. **线程局部变量**:线程局部变量如果没有被正确清理,可能会导致线程长期占用内存。 #### ...

    java内存泄漏问题追踪

    Java内存泄漏问题追踪 在Java编程中,内存泄漏是一个严重的问题,它会导致程序性能下降,甚至可能导致应用程序崩溃。内存泄漏是指程序在申请内存后,无法释放已不再使用的内存空间,随着时间推移,系统可用内存逐渐...

    JAVA内存泄漏分析工具

    Java内存泄漏分析是一个关键的系统优化任务,尤其是在大型企业级应用中,长期运行的系统可能会因为内存泄漏导致性能下降甚至服务中断。"JAVA内存泄漏分析工具"正是一款用于解决此类问题的专业工具,它能帮助开发者...

    Java内存泄露_JVM监控工具介绍

    Java内存泄露是Java开发中常见的一种问题,发生内存泄露可能会导致Java应用程序崩溃或性能下降。在Java中,内存泄露的原因非常多样,例如,静态变量、循环引用、数据库连接池、Session溢出等等。为了检测和解决Java...

    基于Java的内存泄露分析及定位

    Java内存管理是一个关键的议题,尤其对于开发大型和长期运行的应用程序来说,内存泄漏可能导致性能下降,甚至引发严重的系统故障。内存泄漏通常发生在程序错误地管理内存,导致某些不再使用的对象无法被垃圾收集器...

    Java内存泄露检测

    Java内存泄露检测是Java开发中一个关键的议题,因为它直接影响到程序的稳定性和资源效率。内存泄露是指程序中已分配的内存无法被正确地释放,从而导致系统资源的浪费和可能导致程序性能下降甚至崩溃。 首先,理解...

    java内存泄露.pdf

    详细介绍了 java内存泄露 的一些细节,很受用的

    如何解决Java内存泄漏.pdf

    Java内存泄漏是一个开发者在开发和维护Java应用程序时必须面对的问题。内存泄漏会导致程序占用越来越多的内存资源,从而影响性能,甚至导致程序崩溃。本文将深入讨论Java内存泄漏的解决方法,提供一些工具和技巧,...

Global site tag (gtag.js) - Google Analytics