一, Java 内存区域及内存溢出异常
1, 运行时数据区域
1, 程序计数器: 当前线程所执行的字节码的行号指示器.
场景理解: 并发中, CPU 在不同线程间切换, 为了线程切换后能恢复到正确的执行位置, 每个线程都有程序计数器来记录执行位置.
2, 虚拟机栈: 生命周期与线程相同.
虚拟机栈描述的是 Java 方法执行的内存模型, 每个方法在执行的同时会创建一个栈帧用于保存局部变量表, 操作数栈, 动态链接方法出口等信息.
如果线程请求的栈大小无法申请到足够的内存, 会抛出 OutOfMemoryError.
3, 本地方法栈:
虚拟机栈为 Java 方法 (字节码, class 文件) 服务;
本地方法栈为 Native(本地)方法服务.
4, 堆: 存放对象实例
堆是 GC 管理的主要区域.
5, 方法区: 存储已被加载的类信息, 常量, 静态变量等
运行时常量池在方法区中.
来源: http://www.bubuko.com/infodetail-3218987.html