Runtime Data Area(java运行时数据区)

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。
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读