JVM的前世今生

JVM是 Java Virtual Machine的简称,俗称Java虚拟机;
JVM 具有跨平台性,跨语言(语言无关性)的特点;
JVM的实现由hotspot,j9,zing,TaobaoVM,Jrockit,LiquidVM
在这里插入图片描述

Java在运行时会将内存区域划分成若干个内存区域,我们称之为运行时数据区域;
JVM内存: 线程私有 和 线程共享;
线程共享: 方法区,堆
线程私有: 虚拟机栈,本地方法栈,程序计数器
当然还有个非JVM管理的 直接内存(堆外内存) 区域;
栈:是遵循先进后出的数据结构;
一个线程独占一个虚拟机栈,虚拟机栈的生命周期和线程一致,它会随着线程的结束而消亡;
虚拟机栈:在 JVM 运行过程中存储当前线程运行方法所需的数据,指令、返回地址;一般来说,操作系统默认分配1Mb,但是不同的操作系统可能略有差别,可用-Xss进行设置,存在着栈溢出 ; 在运行过程中每调用一个方法会产生一个栈帧,遵循先进后出的原则;
栈帧:局部变量表,操作数栈,动态连接,完成出口(返回地址);
栈帧的操作相关:(使用javap -c xxx.class等查看指令)
iconst: 将一个常量加载到操作数栈
istore: 将一个数值从操作数栈存储到局部变量表
iload: 将一个局部变量加载到操作栈
iadd: 加法指令,计算后的结果自动入栈
imul:乘法指令,计算后的结果自动入栈

程序计数器:较小的内存空间,当前线程执行的字节码的行号指示器;各线程之间独立存储,互不影响。由于类似于CPU时间片轮转机制的作用,所以需要程序计数器来记录下一条运行的指令,以确保程序有条不紊的进行下去;而本地方法(native)不受JVM管制,所以程序计数器失效,但他会使用操作系统层面的程序计数器来进行管理;注:程序计数器是JVM中唯一不会产生OOM(OutOfMemory)的内存区域。

方法区:
永久代:在JDK1,7中实现方法区的叫法
元空间:在JDK1.8中时间方法区的叫法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值