1、java 内存区域及内存溢出异常

2018-10-08  本文已影响6人  谷哥得小弟

java 内存区域和内存溢出异常是相互承接的,在java中内存是由虚拟机内存管理机制动态管理的,但在实际运行中会出现各种内存无法满足的情况而导致内存溢出OOM的情况。

Java虚拟机在java程序运行时会把内存分为若干个不同的内存区域:方法区,虚拟机栈,本地方法栈,堆,程序计数器
线程私有内存: 程序计数器、虚拟机栈、本地方法栈
线程共享内存:堆区、方法区

程序计数器:每个线程都有自己独立的程序计数器,用来指示下一条指令的地址

虚拟机栈:存放基本类型,对象的引用和 returnAddress ,在编译期间完成分配

堆:存放对象的实例和数组, JAVA 堆是垃圾收集器管理的主要区域

方法区:存储已被虚拟机加载的类信息,常量,静态变量,编译器编译后的代码等数据。这个区域的内存回收目标主要是针对常量池的对象的回收和对类型的卸载。运行时常量池是方法区的一部分,用于存放这种编译期生成的各种字面量和符号引用。常用的如String 的intern()方法。

直接内存:并不是java运行时内存区域的一部分,在NIO类中,有一种基于通道和缓存区的I/O方式,分配的堆外内存即直接内存,防止堆内复制数据导致性能下降。

上一篇 下一篇

猜你喜欢

热点阅读