JVM之内存模型

概述

         在学习java或者面试过程中经常会碰到JVM内存模型的问题,在学习的过程中整理了下JVM的一些基本概念,本篇主要总结以下几部分:

         1.常见的JVM实现有那些。

         2.java从编码到执行中那部分是JVM。

         3.JVM规范的内存模型。

常见的JVM实现有那些

         java虚拟机是一个规范,他定义了java虚拟机能执行什么,java虚拟机应改有那些模块,遇到什么指令执行什么操作等 具体规范可以到官网看:https://docs.oracle.com/en/java/javase/13/

常见的JVM实现

     1.Hotsport : oracle官网的JVM实现。

     2.jrockit: BEA,曾经号称世界上最快的JVM,被oracle收购,合并于hotspot,

    3.TaobaoVM:hotspot深度定制版

    4.LiquidVM : 直接针对硬件

    5.azul zing 最新垃圾回收的业界标杆,www.azul.com.

java从编码到执行

      在写java代码的过程中,代码从编码到执行过程中,如下步骤中的3.4.5是属于JVM里,具体如下:

     1.首先我们编写.java的代码文件。

     2.通过javac执行将.java文件变成.class文件。

     3.通过classloader把class文件加载到内存中,同时会吧java的类库也装载到内存里。

     4.加载完成后会调用字节码解释器或者JIT即时编译器进行编译。

     5.编译完的代码会交给执行引擎去执行。

     6.执行引擎下边对应的是硬件和操作系统了。

                       

 JVM规范的内存模型

      jvm规范中将JVM内存划分成5部分,其中方法区和堆是所有线程共享的区域,虚拟机栈、本地方法栈、程序计数器三部分是线程私有的,具体描述如下:

    1)方法区:存放的是虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等,在hotspot虚拟机实现中,在JDK1.8之前叫perm space(永久区),1.8及之后版本叫Meta space(元数据区),实现上的区别是,永久区是用的jvm内存,元数据是用的操作系统内存不占用JVM的内存。

    2)堆:虚拟机启动时创建,此内存区域主要存放对象实例,几乎所有的对象都是在这里分配内存,当堆内存不足是会抛出OutOfMemoryError。

    3) 虚拟机栈:每个线程私有的运行时堆栈,每个方法会创建一个栈帧,所有局部变量会存放在栈帧中。其中栈帧里包含:局部变量、操作数栈、动态链接(指到我们常量池里边的引用)、return地址四部分,栈空间用光了会报StackOverFlowError。 

    4)本地方法栈:与虚拟机栈所发挥的作用相似,区别只是虚拟机栈为虚拟机执行java方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的Native方法服务

    5)程序计数器:存放的是当前线程正在执行的字节码指令地址,如果是native方法,则保存的值是undefine

Hotspot

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

密度比例

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

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

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

打赏作者

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

抵扣说明:

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

余额充值