线程共享区域
- 方法区(元空间):
- 1.存放类的常量、静态变量、类的描述信息(元信息:类的全限定名称等);常量存储在运行时常量池中
- 2.当一个类被Java虚拟机加载后,class文件中的常量就存放在方法区的运行时常量池中。而且在运行期间,可以向常量池中添加新的常量。如:String类的intern()方法就能在运行期间向运行时常量池中添加字符串常量
- 堆:
- 1.存放对象及数组。如:new String(“hello”),这个“hello”属于这个字符串对象,所以在堆中。
- 2.是OOM的重灾区,<性能调优>阶段再说
JVM内存模型.png
线程独立区域
- 栈:
- 1.包含多个栈帧,每个栈帧对应一个方法
- 2.每个栈帧中包含局部变量表(如果变量为对象类型,则保存的为对象在堆中的引用地址)、操作数栈、动态链接(包含一个在常量池中对当前方法的引用)、方法出口
- 本地方法栈:非Java程序方法(Native方法)
- 程序计数器:存放执行指令的偏移量和行号指示器等,保证了多个线程切换时的线程暂停与恢复
网友评论