一、内存使用示意图
二、java运行时数据区域
1、程序计数器:
当前线程所执行字节码的行号提示器。
2、java虚拟机栈:
线程私有,与线程生命周期相同,保存基本数据类型,如果线程所请求的栈深度大于虚拟机所允许的深度,会抛出*Error,如果扩展时无法申请足够的内存会抛出OutOfMemoryError。
3、本地方法栈:
与虚拟机栈所发挥的作用类似,它是为虚拟机使用的native方法服务,也会抛出*Error和OutOfMemoryError异常
4、java堆:
它是各个线程共享的区域,用来存放对象的实例。java堆是java内存管理器(gc)管理的主要区域
5、方法区:
各个线程共享的区域,用于存储:类信息、常量、静态变量、编译后的代码等。
6、运行时常量池:
方法区的一部分