我们类的模板信息存放在方法栈,当一个类执行了class.forName();这就可以通过反射获取类,而jvm就从方法栈获取这些信息。本地方法栈,程序计数器,等等
java栈当中,他属于线程私有。jvm会为每个线程都创建一个方法栈,而且每个线程都会产生一个程序计数器,查看编译后的字节码,javap -c 在class文件所在的目录输入这个命令即可看到,java栈就会根据多少个方法就会产生多少个方法栈,每个方法栈有局部变量表,操作数栈,动态链接,方法出口,全局变量放到堆中。
jvm如何查找到自定义的变量名?jvm会把整形常量压人操作数栈,把栈顶的操作数放到局部变量槽中的第几个,行号就是程序计数器对应的数字,所有的计算都会弹出栈放到槽中,计算结果后在返回一个结果到操作数栈,invoke就是计算结果,jvm不会记录自定义的变量名,而是记录的是第一个,第二个。方法栈运行完之后就不会再存在。
对象的寻找,堆中会有对象的句柄,存放到句柄池中,存放的是对象的地址。
堆的分区,eden区,from区,to区,新生区,老年区,永久区。新生区里面包含from区,以及to区。运行程序,可以通过jconsole查看程序的堆分区的回收的情况。
从工具的显示的图形,会跑一段时间回收了部分的对象,然后就一直递增
从Eden区,是一个波浪线,不断的回收,survival区,分为from区已经to区,也可以通过dump文件分析。