Java 中可能会存在内存泄漏吗

尽管Java有垃圾回收机制,但在实际开发中,无用但可达的对象可能导致内存泄漏。例如,Hibernate Session中持久态对象可能含有无用垃圾对象,而自定义的栈数据结构在pop操作时也可能因保留过期引用引发内存泄漏问题,这可能导致性能下降,严重时触发OutOfMemoryError。
摘要由CSDN通过智能技术生成

Java 中可能会存在内存泄漏吗?其实答案是会得,但是从理论上来讲

Java有垃圾回收机制(GC)不会存在内存泄露问题(这也是Java被广

泛使用于服务器端编程的一个重要原因);然而在实际开发中,可能会

存在无用但可达的对象,这些对象不能被GC回收也会发生内存泄露。

一个例子就是Hibernate的Session(一级缓存)中的对象属于持久

态,垃圾回收器是不会回收这些对象的,然而这些对象中可能存在无用

的垃圾对象。下面的例子也展示了Java中发生内存泄露的情况:

代码如下

package com.lovo;
import java.util.Arrays;

import java.util.EmptyStackException;

public class MyStack<T> {

    private T[] elements;
    private int size = 0;
    private static final int INIT_CAPACITY = 16;

public MyStack() {
    elements = (T[]) new Object[INIT_CAPACITY];
} 

public void push(T elem) {
    ensureCapacity();
        elements[size++] = elem;
}

public T pop() {
    if(size == 0)
        throw new EmptyStackException();
    return elements[--size];
}
 private void ensureCapacit
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值