java面试(9)内存泄露

发布时间 2023-05-27 15:21:45作者: 刘大飞

1: Java 中也存在栈内存泄露的情况?

   在 Java 中,栈内存主要用于存储方法调用和本地变量。与堆内存不同,栈内存的分配和释放是由编译器和虚拟机自动处理的,通常不需要手动释放。

   然而,如果在编写代码时出现一些问题,可能会导致栈内存泄露。以下是一些可能引起栈内存泄露的常见情况:

          a 递归调用问题:如果递归调用没有正确地终止,或者递归深度过大,会导致栈内存不断增长,最终可能导致栈溢出错误。

          c 线程泄露:如果在应用程序中创建了大量的线程,并且这些线程没有正确地终止或释放资源,就可能导致栈内存泄露。

 

导致内存泄露的的情况:

 1) 静态集合类:

       HashMap, LinkedList等,这些容器本身是静态的,它们的生命周期和程序一致,但是持有的对象不会被释放。

     2)单例模式:

            单例模式旨在确保在整个应用程序中只有一个实例存在,这可以通过在类中使用静态变量来实现。

           Singleton作用域适用于那些无状态、线程安全且共享的Bean。使用Singleton作用域可以节省内存,并提高应用程序的性能,因为只需创建一个实例,多个组件可以共               享该实例。

     3)未关闭的资源:数据库连接,网络连接,IO连接等。

     4) 变量不合理的作用域: 一个变量的作用域范围大于使用范围,会导致内存泄露。 这个时候要及时的设置成null

     5)  非静态内部类持有外部类的引用: