zoukankan      html  css  js  c++  java
  • Java中会存在内存泄漏吗,请简单描述?

    为了搞清楚Java程序是否有内存泄露存在,我们首先了解一下什么是内存泄露:程序运行过程中会不断地分配内存空间;那些不再使用的内存空间应该即时回收它们,从而保证系统可以再次使用这些内存。如果存在无用的内存没有被回收回来,那就是内存泄露。

    对于Java程序而言,只要Java对象一直处于可达状态,垃圾回收机制就不会回收它们——即使它们对于程序来说已经变成了垃圾(程序再也不需要它们了);但对于垃圾回收机制来说,它们还不是垃圾(还处于可达状态),因此不能回收。

    ArrayListremove(int index)方法的源代码,程序如下:

    public E remove(int index)

    {

    //检查index索引是否越界

    RangeCheck(index);

    //使修改次数加1

    modCount++;

    //获取被删除的元素

    E oldValue = (E)elementData[index];

    int numMoved = size - index - 1;

    //整体搬家

    if (numMoved > 0)

    System.arraycopy(elementData, index+1

    , elementData, index, numMoved);

    //ArrayListsize1

    //并将最后一个数组赋为null,让垃圾回收机制回收最后一个元素

    elementData[--size] = null;

    return oldValue;

    }

    上面程序中粗体字代码elementData[--size] = null;就是为了避免垃圾回收机制而书写的代码,如果没有这行代码,这个方法就会产生内存泄露——每删除一个对象,但该对象所占用的内存空间却不会释放。

    Java Program!
  • 相关阅读:
    Java基础_0205: 程序逻辑结构
    java基础_0204:运算符
    Centos 7 安装MySQL
    Maven 入门
    winx64 MySQL 5.7绿色版安装步骤
    hadoop环境搭建
    配置虚拟机 Linux 静态IP
    JDK开发环境搭建及环境变量配置
    设计模式之命令模式详解(故事版)
    设计模式之 外观模式详解(Service第三者插足,让action与dao分手)
  • 原文地址:https://www.cnblogs.com/programb/p/14068406.html
Copyright © 2011-2022 走看看