PC(程序计数器)
存放指令位置
虚拟机的运行类似一个while循环,只要不停止,就会取PC中的位置,然后执行对应指令,再PC++。(存储的是指令的位置)
每个线程都有自己的PC,为了方便线程切换,记录当前线程执行指令的位置
MethodArea
这两个是具体的方法区的实现:
1.perm space(<1.8)(永久区)
字符串常量位于PermSpace
FGC不会清理(在内存中不断的产生新对象的话会发生内存溢出)
大小启动的时候指定,不能变
2.meta space(>=1.8)(元数据区)
字符串常量位于堆
会触发FGC清理
不设置的话默认就是物理内存,超过了会被FGC
直接内存(DirectMemory)
direct memory(归操作系统管)(jvm中可以直接访问操作系统的内存)(用户空间访问内核空间,1.4之后加入)(没有直接内存的时候是数据存储在内核空间,jvm需要的时候要拷贝一份到jvm空间这样效率会很低。NIO省去拷贝过程,提高效率,实现zero copy:零拷贝) NIO省去了拷贝的过程直接访问内核空间
JVM Stack
每个线程对应一个栈,每个方法对应一个栈帧。
栈帧Frame
1.local variable table(局部变量表)
2.Operand Stack(操作数栈)
对于long的处理,多数虚拟机的实现都是原子的,没必要加volatile
3.dynamic linking(动态链接):运行时常量池的符号链接(指向这个方法的类型/叫什么名),如果没有解析进行动态解析,解析了直接拿过来用。
假如a()调用b(),此时b()在常量池中,a方法要调用b就要去常量池里面找,这个linking就叫做dynamic linking
4.return address:返回值地址,方法a调用方法b,如果b有返回值的话或者执行完了之后要回到什么位置继续执行,这个叫做return address。

611

被折叠的 条评论
为什么被折叠?



