方法区和堆所有线程共享。虚拟机栈和本地方法栈和程序计数器每个线程独享。 每个线程的栈大小可以通过 参数 : -Xss512k 来决定每新启动一个线程分配的栈大小。
如果方法迭代度过深就会出现栈内存溢出。 每一个方法在执行的同时会创建一个栈帧(用来存储局部变量,操作数栈,动态链接,动态出口等信息。)从调用到执行完成的过程就对应着
一个栈帧在虚拟机中入栈到出栈的过程。(方法执行完成后会释放所有的局部变量)
堆内存则是绝大部分用来存储生成的对象。 创建对象过多或强引用使GC无法回收则会报堆内存不足的异常。 (GC主要关注区域)
方法区\元空间\永久代 : 用来存储被虚拟机加载的类信息,常量,静态变量。(jdk8取消了这部分内存区域,一部分放入heap中)
运行时常量池: 用来存储编译器生成的各种字面量和符号引用。 字面量(new String("你好") 你好就是字面量