浅谈java虚拟机内存加载

#浅谈java虚拟机内存加载
##java虚拟机内存图
##java内存组成
java虚拟机栈 也是线程私有的
虚拟机栈描述的是java方法执行的内存模型,每个方法执行的同时都会创建栈帧,用于存储局部变量表/操作数栈/动态链接/方法出口等信息,一般所说的栈就是指的这里。
本地方法栈跟虚拟机栈类似,只不过是运行的本地方法,虚拟机实现中有的直接把方法合二为一。
java堆是java虚拟机管理的最大一块内存,所有线程共享,启动时创建,唯一目的就是存放对象实例,几乎所有的对象实例都是在这里分配内存,垃圾回收的主要管理区域。
方法区是与堆一样的线程共享的,存储被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。
运行时常量池是方法区的一部分,Class文件中有一项信息是常量池,用于存放编译器生成的各种字面量和符号引用,这部分内容类加载之后进入方法区的运行时常量池中存放。
程序计数器(Program Counter Register),也有称作为PC寄存器。想必学过汇编语言的朋友对程序计数器这个概念并不陌生,在汇编语言中,程序计数器是指CPU中的寄存器,它保存的是程序当前执行的指令的地址(也可以说保存下一条指令的所在存储单元的地址),当CPU需要执行指令时,需要从程序计数器中得到当前需要执行的指令所在存储单元的地址,然后根据得到的地址获取到指令,在得到指令之后,程序计数器便自动加1或者根据转移指针得到下一条指令的地址,如此循环,直至执行完所有的指令。
虽然JVM中的程序计数器并不像汇编语言中的程序计数器一样是物理概念上的CPU寄存器,但是JVM中的程序计数器的功能跟汇编语言中的程序计数器的功能在逻辑上是等同的,也就是说是用来指示 执行哪条指令的。
由于在JVM中,多线程是通过线程轮流切换来获得CPU执行时间的,因此,在任一具体时刻,一个CPU的内核只会执行一条线程中的指令,因此,为了能够使得每个线程都在线程切换后能够恢复在切换之前的程序执行位置,每个线程都需要有自己独立的程序计数器,并且不能互相被干扰,否则就会影响到程序的正常执行次序。因此,可以这么说,程序计数器是每个线程所私有的。
在JVM规范中规定,如果线程执行的是非native方法,则程序计数器中保存的是当前需要执行的指令的地址;如果线程执行的是native方法,则程序计数器中的值是undefined。
##java内存加载详解

##反射原理浅谈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值