JVM学习

  Java虚拟机结构

数据类型

  • JVM操作的数据类型分两类:原始类型(基本类型)和引用类型,与之对应,也存在原始值引用值,它们可用于变量赋值参数传递方法返回运算操作
  • 编译器会在编译期尽最大可能的完成类型检查,使JVM在运行期无需这些操作。
  • 原始类型的值不需要在运行期确定它们的数据类型,也不需要与引用类型的值区分开,因为JVM的字节码指令本身就可以确定它的操作数的类型。
  • JVM直接支持对象。对象可以是动态分配的某个类的实例,也可以是数组
  • JVM中使用reference类型表示对某个对象的引用。reference类型的值可看成指向对象的指针。每一个对象都可能存在多个指向它的引用,对象的操作、传递、检查都通过引用它的reference类型的数据来进行。

原始类型

  • JVM支持的原始类型:数值类型、boolean类型returnAddress类型三类。
  • 数值类型分为:整数类型和浮点类型
  • 整数类型:byte 8位、short 16位、int 32位、long 64位、char 16位、float 32位 、double 64位、boolean类型
  • returnAddress类型指向某个操作码的指针,此操作码与JVM指令相对应。所有原始类型中只有returnAddress类型不能直接与Java语言数据类型相对应。

引用类型

  • JVM三种引用类型:类类型、数组类型、接口类型。它们的值分别指向动态创建的类实例、数组实例和实现了某个接口的类实例或数组实例。
  • 引用类型特殊值:null值,当一个引用不指向任何对象时,它的值就用null表示。

pc寄存器

  • 每条JVM线程都有自己的pc寄存器。
  • 在任意时刻,一条JVM线程只会执行一个方法的代码,如果此方法不是native的,pc寄存器保存JVM正在执行的字节码的地址。如果是native的,pc寄存器的值是undefined
  • pc寄存器的容量至少能保存一个returnAddress类型的数据或一个与平台相关的本地指针的值。

Java虚拟机栈

  • 线程私有的,生命周期和线程一样,用来保存new对象的引用的。
  • JVM栈除了栈帧的出栈和入栈之外,JVM不受其他因素的影响,JVM栈内存不需要保证是连续的。
  • 存储局部变量

栈帧(本地私有)

  • 随方法调用而创建,随方法结束而销毁
  • 有自己的局部变量表操作数栈指向当前方法所属类的运行时常量池

Java堆(线程共享,空间不连续)

  • 为类实例和数组对象分配内存

方法区(线程共享,在堆中)

  • 存储类的各种信息,如:类名,方法名,变量等

运行时常量池(在方法区中)

  • 加载类和接口的时候,当中的常量就放在常量池中

本地方法栈

  • 存放本地方法的,有关键字native的方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值