b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

Java内存溢出(内存泄漏)(1)_社会万象_光明网

电脑杂谈  发布时间:2021-03-01 15:04:48  来源:网络整理

原始

Java内存溢出(内存泄漏)

对内存不足的普遍理解是内存不足。在计算机程序中的普遍理解是,无法释放已打开的内存空间。尽管Java提供了垃圾回收机制,但它不能保证我们编写的代码不会溢出。

import java.util.ArrayList;
import java.util.List;
public  class MyList{
    /*
     * 此处只为掩饰效果,并没有进行封装之类的操作
     * 将List集合用关键字 static 声明,这时这个集合将不属于任何  MyList 对象,而是一个类成员变量
     *
     */
    public static List list = new ArrayList();
}
class Demmo{
    public static void main(String[] args) {
        MyList list = new MyList();
        list.list.add("123456");
        // 此时即便我们将 list指向null,仍然存在内存泄漏,因为MyList中的list是静态的,它属于类所有而不属于任何特定的实例
        list = null;
    }
}

在上述情况下,如果要防止内存溢出,我们应该做的是在每次删除集合中无用的元素之后调用List集合中的remove方法。

内存泄漏和溢出例子_内存泄漏检测工具_内存泄漏和溢出例子

此外,由于它是一个静态变量,因此请勿使用类对象来调用它。使用实例对象调用静态变量可能会导致一些意想不到的后果!

存在三种内存溢出情况。

1、 OutOfMemoryError:PermGen空间

永久生成空间此区域主要用于保存添加的Class的某些信息。它在程序运行期间被永久占用。 Java的GC将不会发布它。因此,如果启动程序加载的信息较大,则超过此空间的大小将发生溢出错误;

内存泄漏和溢出例子_内存泄漏检测工具_内存泄漏和溢出例子

解决方案仅是增加空间分配-增加Java虚拟机中XX:PermSize和XX:MaxPermSize参数的大小,其中XX:PermSize是初始永久存储区的大小,而XX :MaxPermSize是最大永久存储区域大小。

2、 OutOfMemoryError:Java堆空间

heap是Java内存中的堆区域,主要用于存储对象。如果有太多对象超出空间大小,并且GC太晚而无法释放,则会发生溢出错误。

使用Java创建对象是可控制的,但是GC会自动回收对象。一般而言,当没有对现有对象的引用(即不可达)时,GC会定期回收这些对象。释放空间。但是,由于程序的设计,对象是可访问的,但没有用(即上述内存泄漏)。当这种情况越来越多时,问题就会出现。

针对此问题,我们需要做两件事:

1、检查程序,以减少重复创建对象的无休止循环并减少内存泄漏。

2、增加Java虚拟机中Xms(初始堆大小)和Xmx(最大堆大小)参数的大小。

3、 StackOverFlowError

Stack是Java内存中的堆栈空间。它主要用于存储临时数据,例如方法中的变量和参数。通常由于分配的空间太小或方法在太多的递归层中执行而发生溢出。堆栈帧过多,导致溢出。

针对此问题,除了修改配置参数-Xss参数以增加线程堆栈大小之外,程序的优化尤其重要。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-362125-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 枫叶
        枫叶

        1后一天蓝屏接近10次气死老子了

      热点图片
      拼命载入中...