JVM-014-运行时数据区-堆(Heap)-堆的核心概念

介绍

  • 一个 JVM 实例只存在一个堆内存,堆也是 Java 内存管理的核心区域。
  • Java 堆区在 JVM 启动的时候即被创建,其空间大小也就确定了。是 JVM 管理的最大一块内存空间。
    • 堆内存的大小是可以调节的。
  • 《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。
  • 所有的线程共享Java堆,在这里还可以划分线程私有的缓冲区(Thread Local Allocation Buffer,TLAB)。
阅读更多

JVM-012-本地方法区(本地方法接口和本地方法库)

定义

使用 native 关键字修饰的方法,就叫做本地方法。

  • 本地方法区也叫本地方法接口或者本地方法库。简单地讲,一个本地方法(Native Method)是一个Java调用非Java代码的接囗。一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern 告知C++编译器去调用一个C的函数。
  • “A native method is a Java method whose implementation is provided by non-java code.”(本地方法是一个非Java的方法,它的具体实现是非Java代码的实现)
  • 在定义一个native method 时,并不提供实现体(有些像定义一个Java interface),因为其实现体是由非java语言在外面实现的。
  • 本地接口的作用是融合不同的编程语言为Java所用,它的初衷是融合C/C++程序。
阅读更多

JVM-009-运行时数据区-虚拟机栈-方法返回地址(Return Address)

定义

  • 存放调用方法(栈帧)的 pc寄存器的值
  • 一个方法的结束,有两种方式:
    • 正常执行完成
    • 出现未处理的异常,非正常退出
  • 无论通过哪种方式退出,在方法退出后都返回到该方法被调用的位置。方法正常退出时,调用者的pc计数器的值作为返回地址,即调用该方法的指令的下一条指令的地址。而通过异常退出的,返回地址是要通过异常表来确定,栈帧中一般不会保存这部分信息。
阅读更多

JVM-008-运行时数据区-虚拟机栈-动态链接(Dynamic Linking)

定义

  • 动态链接,又叫指向运行时常量池的方法引用
  • 每一个栈帧内部都包含一个指向运行时常量池该栈帧所属方法的引用。包含这个引用的目的就是为了支持当前方法的代码能够实现动态链接(Dynamic Linking),比如:invokedynamic 指令
阅读更多

JVM-007-运行时数据区-虚拟机栈-操作数栈(Operand Stack)

定义

栈的含义:先进后出,可以使用数组或链表来实现,但不具有数组或链表的特性(任意位置增删改等)

而操作数栈的含义:只是使用了数组来存储实现的栈,即按照顺序存放,有索引,但是并非采用访问索引的方式来进行数据访问的,只能通过入栈和出栈来操作数据

每一个独立的栈帧中除了包含局部变量表以外,还包含一个后进先出(Last-In-First-Out)操作数栈,也可以称为 表达式栈(Expression Stack)

阅读更多

JVM-006-运行时数据区-虚拟机栈-局部变量表(Local Variables)

定义

  • 局部变量表也被称之为局部变量数组或本地变量表

  • 定义为一个数字数组,主要用于存储方法参数和定义在方法体内的局部变量,这些数据类型包括各类基本数据类型、对象引用(reference),以及returnAddress返回值类型。

  • 由于局部变量表是建立在线程的栈上,是线程的私有数据,因此不存在数据安全问题

  • 局部变量表所需的容量大小是在编译期确定下来的,并保存在方法的Code属性的maximum local variables数据项中。在方法运行期间是不会改变局部变量表的大小的。

    可以通过反编译(javap -v XXX.class)或者 jclasslib 插件看到:

阅读更多

JVM-005-运行时数据区-虚拟机栈

概述

官方:https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.5.2

背景

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

优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。

阅读更多