浅谈JVM

JVM

首先JVM分为五大部分:程序计数器、虚拟机栈、本地方法栈、堆、方法区;
在这里插入图片描述
线程共享:堆、方法区;
线程隔离:程序计数器、虚拟机栈、本地方法栈;

  1. 程序计数器:字节码解释器工作是就是通过改变这个计数器的值来选取下一条需要执行指令的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖计数器完成;
    注意点:如果线程执行的java程序,计数器记录的虚拟机字节码指令的地址,如果是Native()则为空;
    这是JVM中唯一一块不会出现OOM的区域;

  2. 虚拟机栈:描述java方法执行的内存模型
    每个方法被执行时都会创建一个栈帧来记录局部变量表,操作数栈,方法出口,动态链接等…方法的调用相当于一个栈帧从虚拟机栈中入栈到出栈的过程;
    常见异常:
    StackOverFlowError:线程请求的栈深度大于虚拟机栈允许的栈深度;
    OOM:当动态拓展无法申请到足够的内存空间;

  3. 本地方法栈:为虚拟机使用到的native方法服务,底层调用的可能是c或者c++,也会有常见的SOFE和OOM异常;

  4. 堆:虚拟机中管理内存最大的一块区域,主要存放的是对象实例和数组;

  5. 方法区:存放的是被虚拟机加载的类信息、常量、静态变量等;

下一篇介绍堆中的垃圾回收;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值