虚拟机学习笔记

运行时候数据区:方法区,堆,java栈,pc寄存器,本地方法栈
每个虚拟机运行的时候,都会有方法区和堆,所有线程共享

每个线程被创建,都会得到自己的java栈和pc寄存器,任何一个线程都不能访问另一个线程的java栈和寄存器。
如果线程执行的是一个java方法(非被地方法),pc寄存器里的值总是指向下一条指令,而java栈中存放的是该线程执行的方法的状态,如:局部变量,传递进来的参数,返回值以及运算的中间结果等。
而本地方法的调用则是以某种依赖具体实现的方式存放在本地方法栈中,也可能是寄存器或者其他特定的实现相关的内存中。

java栈是由很多帧组成,每一帧包括一个方法的调用状态,当调用一个方法,就压入一帧到栈里面,当方法执行完之后,会弹出这个帧
栈帧由三部分组成:
1.局部变量区,对应方法的参数和局部变量,以声明的顺序放入局部变量数组
2.操作数栈
3.帧数据区,常量池解析,正常方法返回,异常派发机制

方法区:
1.这个类型的全限定名
2.这个类型的直接超类的全限定名(类型为object除外)
3.该类行是接口还是实现类
4.该类型的访问修饰符
5.任何直接超接口的全限定名称列表
6.静态的东东
7.常量池,虚拟机为每个装载的类型维护一个常量池,包括直接常量和引用
8.字段信息,字段的顺序
9.字段名
10.字段类型
11.字段的修饰符(public,private,static,volatile,transient,final,protected)
12.方法信息:方法名,返回类型修饰符,参数类型数量顺序
13.非抽象,非本地方法还需要特殊信息
14.指向classloader,Class的引用


在class文件里面,java.lang.Object的class文件中,点被/替代,java/lang/object

bootstrap:安装路径中的class
system:classpath中的class

你可能感兴趣的:(java,虚拟机)