001-Java基础-内存区域划分

分类划分

如上图所示,Java内存区域分为以下几类。

所有线程共享的内存区域。

  • Heap 堆。存放Java对象实例,是垃圾回收期重点照顾的区域,还可以按照垃圾收集器进一步细分为新生代和老年代。

  • Method Area 方法区。存放类结构定义、方法代码、运行时常量池(Runtime Constant Pool)。

每个线程都会独立创建的内存区域。

  • Program Counter程序计数器。当前线程所执行的字节码文件(class)的行号指示器。
  • Native Stack本地方法栈。记录当前线程调用的本地方法(Native method)。
  • Stack Java虚拟机栈。记录Java的方法调用,每一次方法调用对应一个Stack Frame栈帧。栈帧中保存方法的局部变量、返回结果、操作数栈、类引用、常量引用等信息。

各区域常见的异常

Heap

出现OOM异常的重灾区,可能的原因很多。例如

  • 初始内存分配不足。
  • 创建了大量的实例对象,有没有被垃圾回收器回收。
  • 内存泄露。

Stack & Native Stack

最常见的是StackOverFlow异常,例如递归方法出现死循环。

上篇001-Java基础-volatile关键字
下篇001-Java基础-CAS