jvm
sj1027523
这个作者很懒,什么都没留下…
展开
-
本地方法接口
本地方法接口在讲Java虚拟机运行时数据区中本地方法栈之前,我们先来说说运行时数据区之外的一个叫本地方法接口的东西简称JNI(Java Native Interface)简单来讲,一个Native Method就是一个java调用非java代码的接口,一个Native Method 是这样一个java方法:该方法的底层实现由非Java语言实现,比如C。这个特征并非java特有,很多其他的编程语言都有这一机制,比如在C++ 中,你可以用extern “C” 告知C++ 编译器去调用一个C的函数。在.原创 2020-12-31 16:06:27 · 209 阅读 · 1 评论 -
jvm运行时数据区--本地方法栈
本地方法栈Java虚拟机栈用于管理Java方法的调用,而本地方法栈用于管理**本地方法(一般非Java实现的方法)**的调用本地方法栈,也是线程私有的。允许被实现成固定或者是可动态拓展的内存大小。(和Java虚拟机栈在内存溢出方面情况是相同的)如果线程请求分配的栈容量超过本地方法栈允许的最大容量,Java虚拟机将会抛出一个StackOverFlowError异常。如果本地方法栈可以动态扩展,并且在尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的本.原创 2020-12-31 16:05:44 · 63 阅读 · 0 评论 -
java虚拟机栈-栈帧
栈帧的内部结构每个栈帧中存储着1. 局部变量表(Local Variable)2.操作数栈(Operand Stack)(或表达式栈3. 动态链接(Dynamic Linking)(或执行"运行时常量 池"的方法引用)----深入理解Java多态特性必读!!4. 方法返回地址(Return Adress)(或方法正常退出或者异常退出的定义)5. 一些附加信息其中部分参考书目上,称方法返回地址、动态链接、附加信息为 帧数据区局部变量表(Local Variable)局部变量表也被称原创 2020-12-31 13:35:08 · 268 阅读 · 0 评论 -
java虚拟机栈
虚拟机栈的背景由于跨平台性的设计,java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。根据栈设计的优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。内存中的堆与栈栈是运行时的单位,而堆是存储的单位栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,即数据怎么放、放在哪儿。一般来讲,对象主要都是放在堆空间的,是运行时数据区比较大的一块栈空间存放 基本数据类型的局部变量,以及引用数原创 2020-12-28 21:12:27 · 121 阅读 · 0 评论 -
程序计数器
JVM运行时数据区–程序计数器JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。一个线程对应一个 JVM Stack。JVM Stack 中包含一组 Stack Frame。当 JVM 调用一个 Java 方法时,它从对应类的类型信息中得到此方法的局部变量区和操作数栈的大小,并据此分配栈帧内存,然后压入 JVM原创 2020-12-28 19:56:36 · 190 阅读 · 0 评论 -
类的加载器下篇
测试不同的类加载器每个 Class 对象都会包含一个定义它的 ClassLoader 的一个引用获取 ClassLoader 的途径获取当前类的 ClassLoaderclazz.getClassLoader();获得当前线程上下文的 ClassLoaderThread.currentThread().getContextClassLoader();获得系统的 ClassLoaderClassLoader.getSystemClassLoader();说明:站在程序的角度看,引原创 2020-12-28 19:40:13 · 80 阅读 · 0 评论 -
类加载器 - - 上篇
概述类加载器是 JVM 执行类加载机制的前提作用:ClassLoader 是 Java 的核心组件,所有的 class 都是由 ClassLoader 进行加载的,ClassLoader 负责通过各种方式将 class 信息的二进制数据流读入 JVM 内部,转换为一个与目标类对应的 java.lang.Class 对象实例。然后交给 Java 虚拟机尽心链接、初始化等操作。因此,ClassLoader 在整个装载阶段,只能影响到类的加载,而无法通过 ClassLoader 去改变类的链接和初始化行为原创 2020-12-28 12:10:25 · 130 阅读 · 0 评论 -
链接(验证 ,准备,解析)及初始化
###链接(Linking)验证(Verification)当类加载到系统后,就开始链接操作,验证是链接操作的第一步它的目的是保证加载的字节码是合法、合理并符合规范的验证的步骤比较复杂,实际要验证的项目也很繁多,大体上 Java 虚拟机需要做以下检查,如图所示整体的介绍验证的内容则涵盖了类数据信息的格式验证、语义检查、字节码验证,以及符号引用验证等其中格式验证会和加载阶段一起执行。验证通过之后,类加载器才会成功将类的二进制数据信息加载到方法区中格式验证之外的验证操作将会在方法区中进行链原创 2020-12-27 16:24:27 · 1114 阅读 · 1 评论 -
加载和Class介绍
加载阶段Loding理解所谓加载,简而言之就是将 Java 类的字节码文件加载到机器内存中,并在内存中构建出 Java 类的原型——类模板对象。所谓类模板对象,其实就是 Java 类在 JVM 内存中的一个快照,JVM 将从字节码文件中解析出的常量池、类字段、类方法等信息存储到模板中,这样 JVM 在运行期便能通过类模板而获取 Java 类中的任意信息,能够对 Java 类的成员变量进行遍历,也能进行 Java 方法的调用反射的机制即基于这一基础。如果 JVM 没有将 Java 类的声明信息存储起原创 2020-12-27 13:19:15 · 153 阅读 · 0 评论