Java内存区域主要分为:堆,栈,方法区三大部分
1、堆:是内存区域中最大的部分,所有线程共享,其中存放创建的对象和数组。由于堆是垃圾收集器管理的主要区域,因此也叫GC堆。
2、栈:线程私有,与线程共生死。也就是每个线程JVM都会给它创建一片栈内存。
栈内存又分为:虚拟机栈,本地方法栈,和程序计数器
虚拟机栈:用来描述Java方法的执行过程。每个方法的执行对应一个栈帧的入栈,方法的返回对应栈帧的出栈。
本地方法栈:与虚拟机栈类似,区别是本地方法栈尾Native方法服务。Native方法也就是非Java代码的方法,一般是底层的C/C++方法
程序计数器:占用的空间很小,用来记录线程执行的字节码的行号指示器,通俗来讲,就是记录当前线程执行的位置,以便线程切换后能够恢复到原来的位置
3、方法区:也被称为永久代,其中主要存放常量、静态变量、类信息。其中的常量存放于运行时常量池中