【JVM】一文看懂JVM的内存结构

本文介绍了JVM的内存结构,包括程序计数器、Java虚拟机栈、本地方法栈、堆、方法区和直接内存。JVM是Java运行时环境,确保一次编写到处运行,提供自动内存管理和垃圾回收。此外,文章还探讨了JVM的生命周期和不同类型的JVM实现。
摘要由CSDN通过智能技术生成

JVM简介

什么是JVM

定义:java virtual meachine -java运行时环境(java二进制字节码的运行环境)。
好处:

  1. 一次编写到处运行
  2. 自动内存管理,垃圾回收
  3. 数组下标越界检查
  4. 多态

JVM的位置

一些JVM

  • SUN Classic
  • Exact VM
  • HotSpot VM :HotSpot指热点代码探测技术
  • BEA JRockit:(BEA 已被Oracle收购) 专注于服务端应用,世界最快的jvm之一
  • IBM J9
  • Taobao JVM: 目前已经在淘宝、天猫上线,替换了Oracle官方JVM;
  • Graal VM: Oracle 2018年4月公开,口号 Run Programs Faster Anywhere.最可能替代HotSpot的产品

java代码执行流程

java程序 -->(编译)-->  字节码文件 -->  解释器  -->  机器码  -->   操作系统(Win,Linux,Mac JVM)

栈的指令集架构和寄存器的指令集架构

由于跨平台的设计,java的指令都是根据栈来设计的,不同平台CPU架构不同,所以不能设计为基于寄存器的。

jvm生命周期

1.启动

通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由虚拟机的具体实现指定的.

2.执行

  • 一个运行中的java虚拟机有着一个清晰的任务:执行Java程序;
  • 程序开始执行的时候他才运行,程序结束时他就停止;
  • 执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程。

3.退出

  • 程序正常执行结束
  • 程序异常或错误而异常终止
  • 操作系统错误导致终止
  • 某线程调用Runtime类或System类的exit方法,或Runtime类的halt方法,并且java安全管理器也允许这次exit或halt操作
  • 除此之外,JNI规范描述了用JNI Invocation API来加载或卸载Java虚拟机时,Java虚拟机的退出情况

 JVM内存结构

运行时数据区域

程序计数器

作用

是当前线程锁执行的字节码的行号指示器,字节码解释器通过改变计数器的值来选取下一条需要执行的字节码指令。

 特点

  • 线程私有。Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间实现的,任何一个时刻只执行一个特定的指令,因此为了不同线程切换的时候知道之前自己运行到哪里了,每条线程需要拥有自己的程序计数器。
  • 不会内存泄漏。唯一一个不会出现内存溢出问题的区域。
  • 如果线程执行的是一个Java方法,那么程序计数器记录的是正在执行的字节码指令的地址,如果执行的是本地方法(Native),那么计数器中为空。

Java虚拟机栈

作用

是线程运行时需要的内存空间。

特点

  • 是线程私有的,生命周期与其所在线程相同。
  • 每个方法被执行的时候都要创建一个栈帧(一个栈帧对应一次方法的调用)用于存储信息。每个方法的实行过程都对应着一个栈帧在虚拟机栈中入栈和出栈的过程。
  • 每个线程只能有一个活动栈帧,也就是正在执行的那个方法。

注意

  • 垃圾回收不涉及栈内存
  •  方法内的局部变量,如果多个线程调用,不会线程不安全,各个线程拥有自己的这个局部变量,互不干扰</
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程芝士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值