随笔分类 - JVM
摘要:程序计数器 (Program Counter Register) 是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器,存储的下一条将要执行的字节码指令的内存地址,在 Java 虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,它是程序
阅读全文
摘要:类加载子系统负责从文件系统或者网络中加载字节码文件 类加载子系统整体架构图 可以看出,整个类加载子系统分为三个部分,加载、链接、初始化 一、加载 JVM 支持两种类型的类加载器,分别是引导类加载器(BootStrapClassLoader)和自定义加载器 从概念上来讲,自定义加载器一般指的是程序中由
阅读全文
摘要:一、概述 在 Hotspot 虚拟机中,对象的内存布局主要由 3 部分组成1、对象头(Header): 包括对象的运行时状态信息 Mark Word、Klass Pointer(类型指针,直接指针访问方式)、Array Length(如果是数组对象,才会有此特殊内存区域)2、实例数据(Instanc
阅读全文
摘要:一、Windows tasklist 查看所有的进程 taskkill 杀死进程 使用 tasklist | findstr java 命令列出所有的 java 进程信息 通过上图可以发现,所有的 java 进程都列出来了,但是有一个问题,我们并不知道这些 java 进程具体是什么,怎么办呢 这个时
阅读全文
摘要:一、简介 Java 虚拟机栈(Java Virtual Machine Stack) 是线程私有的,它的生命周期与线程相同,虚拟机栈描述的是 Java 方法执行的线程内存模型,每个方法被执行的时候,Java 虚拟机都会同步创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、
阅读全文
摘要:一、概述 jstat(JVM Statistics Monitoring Tool) 是用于监视虚拟机各种运行状态信息的命令行工具 jstat 命令格式 jstat [option pid [interval] [count] ] // 每隔 1000ms 采样一次查看 10086 进程的垃圾收集状
阅读全文
摘要:一、方法调用指令 在 Jvm 指令当中涉及到方法调用的指令有 5 个,分别是 invokeinterface、invokestatic、invokespecial、invokedynamic、invokevirtual invokeinterface: 用于调用接口方法,它会在运行时搜索该接口的实现
阅读全文
摘要:一、概述 Java 是面向对象的程序设计语言,虚拟机平台从字节码层面就对面向对象做了深层次的支持,有一系列的指令专门用于对象操作,这些指令可以进一步细分为创建指令、字段访问指令、数组操作指令、类型检查指令 二、创建指令 虽然类实例和数组都是对象,但是 Jvm 对类实例和数组的创建却使用了不同的指令
阅读全文
摘要:一、概述 1.1、作用 算术指令用于对操作数栈栈顶的元素(如果运算只包含一个操作数,那么该元素就是栈顶的元素,如果有两个操作数,那么就是栈顶和次栈顶的元素)进行某种特定的运算,并把运算的结果重新压入操作数栈 1.2、分类 大体上来说,算术指令可以分为两大类,一类是对 整数类型 的数据进行运算的指令,
阅读全文
摘要:一、概述 每个方法被执行的时候,Java 虚拟机都会同步创建一个栈帧用于存放局部变量表、操作数栈、动态链接、方法出口等信息,在栈帧中与 Jvm 指令关系最密切的就是局部变量表和操作数栈,所以在介绍 Jvm 指令之前,我们先了解一下栈帧中最重要的两个内存区域 1.1、操作数栈 Jvm 是基于堆栈结构模
阅读全文