JVM(持续更新。。。)

前言

一、概述

1.基本概念

JVM是可运行Java代码的假想计算机,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收、堆和一个存储方法域。JVM 是运行在操作系统之上的,它与硬件没有直接交互。

运行过程:Java源文件->编译器->字节码文件->JVM->机器码

2.当前主流的JVM

  • HotSpot :sun公司的
  • J9 :IBM公司的
  • JRockit : BEA公司的

3.JVM主要子系统

  • 类加载器子系统(Class Lodaer Subsystem)
  • 运行时数据区(Runtime Data Area)
  • 执行引擎(Execution Engine)

4.64位JVM

由于指针膨胀和各种数据类型对齐补充的原因,运行于64位系统上的JAVA应用需要消耗更多的内存空间,通常要比32位系统额外增加10%~30%的内存消耗。

5.指令集架构

  • ARM
  • x86
  • x64
  • Sparc

6.java体系结构图

SPECjvm2008:基准测试套件。它是测试用例涵盖了大部分Java基础应用场景,是架构选型和jvm性能评测不可多得的利器。

第一章 JVM运行时数据区

jvm运行时数据区,即Java内存结构。

jvm被分为三个主要的子系统:

  • 1.类加载器子系统
  • 2.运行时数据区
  • 3.执行引擎

Java本地机(JNI):JNI将于本地方法库进行交互,并提供执行引擎所需的本地库;

本地方法库:它是执行引擎所需的本地库的集合;

程序计数器(Program Counter Register)

定义:

程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码行号指示器,也可称之为PC寄存器;字节码解释器工作时通过改变程序计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。

特性:

  • 在任何确定的时刻,一个处理器(对于多核处理器是一个内核)都只会执行一条线程中的指令;
  • 每条线程都有一个独立的线程计数器(各条线程之间的计数器互不影响,独立存储);
  • Java方法:则这个计数器记录的是正在执行的虚拟机字节码指令的地址
  • Native方法:计数器值为空(Undefined)
  • 此内存区域是唯一在Java虚拟机规范中没有规定任何OutOfMemoryError的区域;
  • PC寄存器是对物理PC寄存器的一种抽象模拟,线程私有,生命周期与线程的生命周期保持一致

程序计数器为什么是线程私有的?

Java虚拟机栈(Java Virtual Machine Stacks)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值