JVM之内存区域

1:程序计数器

      是一个较小的内存空间,可以理解为当前线程正在执行的字节码行号指示器(可以理解为stack中的指针),表明线程执行到哪个字节码。每个线程都有一个独立的程序计数器,这个也好理解吧,java支持多线程,很显然每个线程都有单独的程序计算器,不可能共用一个吧,并且每个线程之间的程序计数器是互不影响的。如果一个线程正在执行的是Java方法,程序计数器记录的是正在执行的字节码的指令地址;如果是native方法,则计数器值为空(undefined)

2:Java virtual machine stacks

     首先要和本地方法栈进行区分,不然容易混淆。java虚拟机栈是单纯为java方法(也就是字节码)服务的,本地方法栈就是为本地(Native)方法服务的。JVMS实际上也是线程私有的,每个方法执行的时候都会创建一个栈帧(就是一种数据结构,用于支持虚拟机进行方法调用和方法执行的数据结构),我第一次读的时候也很奇怪,栈帧是个啥,其实就是用于存储局部变量表、操作数栈、动态链接、方法出口等信息,每一个方法从调用开始到结束都对应着虚拟机栈里面的入栈和出栈。

3:Java Heap

Java堆是虚拟机中内存使用最大的一块,你想想heap里面存放的是啥,是所有对象实例啊,对象实例那么多,肯定需要很多内存空间啊。java heap是被所有线程共享的。heap也是GC主要管理的区域,你占了那么大内存,我肯定优先考虑你占有的资源是不是?heap可以处理不连续的内存空间,只要逻辑上是连续的就可以。

4:Method Area(Non-Heap)

 也是所有线程所共享的,存储被虚拟机加载的类信息、常量、静态变量、即时编译器后的代码等数据。

5:Runtime Constant Pool

  它其实是方法区的一部分,class文件中除了有类的版本、字段、方法、接口外,还有常量池,里面放着字面量和符号引用

 

 

      

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值