学习了一些与Java虚拟机相关的比较基本的知识,还是得写一写加深印象。
程序计数器:线程私有,生命周期与线程的生命周期一样。程序计数器用于标记线程执行的字节码的位置。字节码解释器,通过改变计数器的值来选取执行的字节码指令如分支、循环、跳转、线程恢复。
虚拟机栈:线程私有,生命周期与线程的生命周期一样。在线程调用Java方法时创建栈帧用于储存局部变量表、操作数栈、动态链接、方法出口。其中局部变量表存放了基本数据类型,对象引用和returnAdress类型。
本地方法栈:线程私有,生命周期与线程的生命周期一样。线程调用本地方法时创建栈帧,过程类似于虚拟机栈。
堆:线程共享,用于储存实例变量。
方法区:线程共享。用于存储编译后Java方法的类相关的东西,类信息、常量、静态变量等。运行时常量池在方法区中,包含字面量、符号引用、直接引用。常量池在Class文件中,包含字面量和符号引用,常量池在类加载进方法区运行时,会被放进运行时常量池。