在使用Java的时候如何识别和预防内存泄漏?

要想知道如何预防内存泄漏,那么就要知道内存为什么会泄漏。
想要知道内存为什么会泄漏,那么先得知道Java的内存是哪里。
Java的内存的组成
程序计数器(Program Counter Regist

本文最后更新时间:  2023-02-24 02:16:51

要想知道如何预防内存泄漏,那么就要知道内存为什么会泄漏。

想要知道内存为什么会泄漏,那么先得知道Java的内存是哪里。

Java的内存的组成

程序计数器(Program Counter Register)、Java栈(VM Stack)、本地方法栈(Native Method Stack)、方法区(Method Area)、堆(Heap)。

程序计数器

保存指令地址,也就是存的是下一条执行所在的存储地址。

不会发生内存溢出异常。

虚拟机栈

就是Stack,存放的是一个个的栈帧,每个栈帧对应一个被调用的方法。

StackOverflowError:线程请求的栈深度大于虚拟机所允许的深度。比如递归调用一个方法。

OutOfMemoryError:虚拟机在动态扩展栈时无法申请到足够的内存空间。比如无限地创建线程,并为每个线程循环增加分配内存。

本地方法栈

同Java虚拟机栈

Java堆

存储对象本身的以及数组,堆是被所有线程共享的,在JVM中只有一个堆。

OutOfMemoryError:没有内存完成实例分配,或者不能再扩展。比如无限new对象,在List中保存(这样不会被回收)

方法区

存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等,也是被线程共享的。

OutOfMemoryError:无法满足内存分配要求。比如生成大量的动态类。

希望我的回答可以帮助到你!

 1/2    1 2 下一页 尾页
温馨提示:内容均由网友自行发布提供,仅用于学习交流,如有版权问题,请联系我们。