java static 变量 内存释放,Java内存泄漏

本文详细介绍了Java内存管理机制,包括可达性分析算法和GC Roots,强调了Java内存泄漏的概念。通过示例解释了如何在静态变量、静态集合、数据库连接、变量作用域和内部类等方面可能导致内存泄漏,并提供了相应的解决原则和建议,如合理控制对象作用域、及时关闭连接和设置对象为null等。
摘要由CSDN通过智能技术生成

Java中的内存管理

要了解Java中的内存泄漏,首先就得知道Java中的内存是如何管理的。

在Java程序中,我们通常使用 new 为对象分配内存,而这些内存空间都在堆上。

Java判断对象是否可以回收使用的而是可达性分析算法。

这个算法的基本思路就是通过一系列名为 "GC Roots" 的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到 GC Roots 没有任何引用链相连时,则证明此对象是不可用的,下图对象 object5, object6, object7 虽然有互相判断,但它们到 GC Roots 是不可达的,所以它们将会判定为是可回收对象。

6f4f4051c21f82f7af3c0585b1717a38.png

在 Java 语言中,可作为 GC Roots 对象的包括如下几种:

虚拟机栈(栈帧中的本地变量表)中引用的对象

本地方法栈(Native方法)中引用的对象

方法区中类静态属性引用的对象

方法区中常量引用的对象

什么是Java中的内存泄漏

Java 中的内存泄漏,广义并通俗的说,就是:不再会被使用的对象的内存不能被回收,就是内存泄漏。

Java 中的内存泄漏与 C++ 中的表现有所不同。

在 C++ 中,所有被分配了内存的对象,不再使用之后࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值