深入JVM(一)JVM指令手册】的更多相关文章

JVM 字节码指令手册 - 查看 Java 字节码 jdk 进行的编译生成的 .class 是 16 进制数据文件,不利于学习分析.通过下命令 javap -c Demo.class > Demo.txt 或者其他方式可反汇编,得到字节码文件 一.JVM 指令分类 (1)操作数栈 过程 符号 变量到操作数栈 iload, iload_, lload, lload_, fload, fload_, dload, dload_, aload, aload_ 操作数栈到变量 istore, istor…
00-JVM指令手册 栈和局部变量操作 将常量压入栈的指令 aconst_null 将null对象引用压入栈 iconst_m1 将int类型常量-1压入栈 iconst_0 将int类型常量0压入栈 iconst_1 将int类型常量1压入操作数栈 iconst_2 将int类型常量2压入栈 iconst_3 将int类型常量3压入栈 iconst_4 将int类型常量4压入栈 iconst_5 将int类型常量5压入栈 lconst_0 将long类型常量0压入栈 lconst_1 将lon…
1. 场景的产生 先来看下下面代码展示的两个场景 @Testvoid testIPP() { int i = 0; for (int j = 0; j < 10; j++) { i = i++; System.out.println(i); }}@Testvoid testPPI() { int i = 0; for (int j = 0; j < 10; j++) { i = ++i; System.out.println(i); }} 首先两个方法的开始都定义了一个int变量 i,并初始化…
JVM初探 -JVM内存模型 标签 : JVM JVM是每个Java开发每天都会接触到的东西, 其相关知识也应该是每个人都要深入了解的. 但接触了很多人发现: 或了解片面或知识体系陈旧. 因此最近抽时间研读了几本评价较高的JVM入门书籍, 算是总结于此. 本系列博客的主体来自 深入理解Java虚拟机(第二版) 和 实战Java虚拟机 两部书, 部分内容参考 HotSpot实战 和 深入理解计算机系统 以及网上大量的文章. 若文内有引文未注明出处的, 还请联系作者修改.  JVM 虚拟机架构(图片…
深入理解JVM之JVM内存区域与内存分配 在学习jvm的内存分配的时候,看到的这篇博客,该博客对jvm的内存分配总结的很好,同时也利用jvm的内存模型解释了java程序中有关参数传递的问题. 博客出处: http://www.cnblogs.com/hellocsl/p/3969768.html?utm_source=tuicool&utm_medium=referral 看了此博客后,发现应该去深入学习下jvm的内存模型,就是去认真学习下<深入理解Java虚拟机>,其内容可能会<…
ylbtech-Java -JVM:JVM百科 JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的. Java语言的一个非常重要的特点就是与平台的无关性.而使用Java虚拟机是实现这一特点的关键.一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码.而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译.Java语言使用Java虚…
JVM(七):JVM内存结构 在前几节的文章我们多次讲到 Class 对象需要分配入 JVM 内存,并在 JVM 内存中执行 Java 代码,完成对象内存的分配.执行.回收等操作,因此,如今让我们来走入 JVM,看看 JVM 中的内存结构是如何构造的,下面就让我们一探究竟吧. 内存划分 在本小节中,我们以<Java 虚拟机规范>中的要求,并以当前主流虚拟机 Hotspot VM 为例,详细讲述内存区域中各个模块的划分,了解其各自的用途以及其为何如何划分等. 首先让我们来看一下 Java 虚拟机…
JVM总结--JVM体系结构 https://blog.csdn.net/samjustin1/article/details/52215274 需要不断的学习才可以. 2016年08月15日 22:03:56 sam_justin 阅读数 1933   版权声明:本文为博主原创文章,未经博主允许不得转载.  一. 虚拟机 虚拟机是模拟执行某种指令集体系结构(ISA)的软件,是对操作系统和硬件的一种抽象. 图1 计算机系统中的抽象         计算机系统的这种抽象类似于面向对象编程(OOP)…
一.JDK的组成 JDK:JDK是Java开发工具包,是Sun Microsystems针对Java开发员的产品.JDK中包含JRE(在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre)和一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar). Java Runtime Environment(JRE):是运…
你是否也遇到过这些问题? 运行线上系统突然卡死,系统无法访问,甚至直接OOM 想解决线上JVM GC问题,但却无从下手 新项目上线,对各种JVM参数设置一脸懵逼,直接默认,然后就JJ了 每次面试都要重新背一遍JVM的一些原理概念性东西 这段广告语写的好,趁着在家办公学习下JVM,先列出整体知识点 点赞+收藏 就学会系列,文章收录在 GitHub JavaEgg ,N线互联网开发必备技能兵器谱 Java开发都知道JVM是Java虚拟机,上学时还用过的VM也叫虚拟机,先比较一波 虚拟机与Java虚拟…
转载: 英文原版地址:http://www.cubrid.org/blog/dev-platform/understanding-jvm-internals/ 翻不了墙的可以看这个英文版:https://www.cnblogs.com/davidwang456/p/3464743.html 我找了个翻译版看,但是图片刷不出来:https://segmentfault.com/a/1190000004206269 国内英文版那个代码排版又很差,但是有图,我这里把两个整合一下 http://itin…
简介 Java是一门可以跨平台的语言,但是Java本身是不可以实现跨平台的,需要JVM实现跨平台.javac编译好后的class文件,在Windows.Linux.Mac等系统上,只要该系统安装对应的Java虚拟机,class文件都可以运行.达到 "一次编译,到处运行" 的效果. 什么是JVM JVM是可以运行在Java代码的虚拟的计算机,既然是虚拟的计算机,当然也包含自己的CPU.字节码指令集.寄存器.栈.垃圾回收.堆和存储方法域,我们可以理解成JVM自己就是一套操作系统. Java…
JVM目录 [JVM]Java内存模型 [JVM]类加载机制 [JVM]深度分析Java的ClassLoader机制(源码级别) [JVM]关于类加载器准备阶段的一道面试题目 [JVM]JVM垃圾收集器.垃圾收集算法.无用对象 [JVM]JVM内存结构 VS Java内存模型 VS Java对象模型…
勿在流沙住高台,出来混迟早要还的. 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 上一篇分享了什么是程序,以及Java程序运行的三个阶段.也顺便提到了Java中比较重要的一个东西就是JVM(JAVA 虚拟机),那么今天在先了解一下JVM和JVM的启动流程. 知识地图: 1.什么是虚拟机 虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的.运行在一个完全隔离环境中的完整计算机系统.[百度百科] 虚拟机通过仿真引擎(称为管理程序)处理虚拟硬…
目录 简介 JVM是一种标准 java程序的执行顺序 JVM的架构 类加载系统 运行时数据区域 执行引擎 总结 简介 JVM也叫Java Virtual Machine,它是java程序运行的基础,负责将java bytecode转换成为适合在各个不同操作系统中运行的机器代码并运行.今天我们和小师妹一起走进java的核心JVM,领略java在设计上的哲学. JVM是一种标准 小师妹:F师兄,经常听到有人说hotspot VM,这个跟JVM是什么关系? 其实吧,JVM只是一种标准,就像是一种协议,…
指令格式 指令主体 [选项] [操作对象] 一个完整的指令是由"指令主体"."选项"和"操作对象"组成的,其中指令主体只能有一个,选项有零个或多个,操作对象有零个或多个. 在操作文件时,经常会使用到绝对路径和相对路径: 相对路径:指当前工作路径: 绝对路径:以"/"目录为工作路径. ./表示当前目录下:../表示上一级目录下 ls ls,用于列出当前目录下的所有文件. 语法:ls [options] [target] opti…
JVM指令大全 常量入栈指令 指令码 操作码(助记符) 操作数 描述(栈指操作数栈) 0x01 aconst_null null值入栈. 0x02 iconst_m1 -1(int)值入栈. 0x03 iconst_0 0(int)值入栈. 0x04 iconst_1 1(int)值入栈. 0x05 iconst_2 2(int)值入栈. 0x06 iconst_3 3(int)值入栈. 0x07 iconst_4 4(int)值入栈. 0x08 iconst_5 5(int)值入栈. 0x09…
本文按照如下思维导图组织 1. 栈和局部变量操作 1.1 将常量压入栈的指令 aconst_null 将null对象引用压入栈iconst_m1 将int类型常量-1压入栈iconst_0 将int类型常量0压入栈iconst_1 将int类型常量1压入栈iconst_2 将int类型常量2压入栈iconst_3 将int类型常量3压入栈iconst_4 将int类型常量4压入栈iconst_5 将int类型常量5压入栈lconst_0 将long类型常量0压入栈lconst_1 将long类型…
栈和局部变量操作 将常量压入栈的指令 aconst_null 将null对象引用压入栈 iconst_m1 将int类型常量-1压入栈 iconst_0 将int类型常量0压入栈 iconst_1 将int类型常量1压入   操作数栈 iconst_2 将int类型常量2压入栈 iconst_3 将int类型常量3压入栈 iconst_4 将int类型常量4压入栈 iconst_5 将int类型常量5压入栈 lconst_0 将long类型常量0压入栈 lconst_1 将long类型常量1压入…
invokevirtual 调用实例方法 invokespecial 调用父类构造,实例初始化方法,私有方法 dup 复制栈顶数值,并且复制值进栈,pop/pop2为栈顶值出栈 aload_0 加载第一个(0)局部变量引用的对象.  简单的理解是将地址入栈.给局部变量赋值. iload_0第一个int型局部变量进栈 iaload指定的int型数组的指定下标值进栈 istore_0 将栈顶int值存入局部变量 iastore将栈顶int值存入指定数组下标 bi/sipush byte/short常…
一.前言 为什么要学习了解Java虚拟机 1.我们需要更加清楚的了解Java底层是如何运作的,有利于我们更深刻的学习好Java. 2.对我们调试错误提供很宝贵的经验. 3.这是合格的Java程序必须要了解的内容. 基于此,笔者打算出一个Java虚拟机的系列,加深自己对知识点的理解,同时也方便各位有需要的园友. 二.Java虚拟机的定义 Java虚拟机(Java Virtual Machine),简称JVM.当我们说起Java虚拟机时,可能指的是如下三种不同的东西: 1.抽象规范. 2.一个具体的…
一.为什么需要垃圾回收 如果不进行垃圾回收,内存迟早都会被消耗空,因为我们在不断的分配内存空间而不进行回收.除非内存无限大,我们可以任性的分配而不回收,但是事实并非如此.所以,垃圾回收是必须的. 二.哪些内存需要进行垃圾回收 对于虚拟机中线程私有的区域,如程序计数器.虚拟机栈.本地方法栈都不需要进行垃圾回收,因为它们是自动进行的,随着线程的消亡而消亡,不需要我们去回收,比如栈的栈帧结构,当进入一个方法时,就会产生一个栈帧,栈帧大小也可以借助类信息确定,然后栈帧入栈,执行方法体,退出方法时,栈帧出…
一.前言 前面分析了class文件具体含义,接着需要将class文件加载到虚拟机中,这个过程是怎样的呢,下面,我们来仔细分析. 二.什么是类加载机制 把class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是类加载机制. 三.类加载总体流程图 说明:类的整个生命周期分为以上七个阶段,验证.准备.解析统称为连接阶段.关于加载流程笔者之前也写过一篇文章JVM之类加载器,从代码层面了解类加载机制.下面我们将更加详细的讲解各个阶段,加载阶段只是类加…
一.前言 经过前面的学习,我们终于进入了虚拟机最后一部分的学习,内存模型.理解内存模型对我们理解虚拟机.正确使用多线程编程提供很大帮助.下面开始正式学习. 二.Java并发基础 在并发编程中存在两个关键问题①线程之间如何通信 ②线程之间如何同步. 2.1 通信 通信是指线程之间以何种机制来交换信息.在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递. 在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信. 在消息传递的并发模型里,线程之间…
JVM基本结构 一 JVM基本结构示意图 二 JVM结构详解 一 程序计数器 程序计数器是一块较小的内存空间,它是当前线程所执行的字节码的行号指示器,如果线程执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址,如果是一个Native方法,则这个计数器的值为空(Undefined). 由于Java虚拟机的多线程是通过线程轮流切换并分配处理器的执行时间来实现的,在任何一个确定的时刻,一个处理器都会执行一条线程中的指令,因此,为了线程切换后能恢复到正确的执行位置,每条线程都需…
JVM启动流程 1.java虚拟机启动的命令是通过java +xxx(类名,这个类中要有main方法)或者javaw启动的. 2.执行命令后,系统第一步做的就是装载配置,会在当前路径中寻找jvm的config配置文件. 3.找到jvm的config配置文件之后会去定位jvm.dll这个文件.这个文件就是java虚拟机的主要实现. 4.当找到匹配当前版本的jvm.dll文件后,就会使用这个dll去初始化jvm虚拟机.获得相关的接口.之后找到main方法开始运行. 上面这个过程的描述虽然比较简单,但…
7.1JVM类加载机制 虚拟机把数据从Class文件加载到内存,并且校验.转换解析和初始化最终形成可以被虚拟机使用的Java类型,这就是虚拟机的类加载机制. 7.2类加载的时机 1.类加载的步骤开始的顺序: 加载(Loading) -> 验证(Verification) -> 准备(Preparation) -> 解析(Resolution) -> 初始化(Initialization) -> 使用(Using) -> 卸载(Unloading) ,验证.准备.解析的过…
JVM内存模型 Java虚拟机(Java Virtual Machine=JVM)的内存空间分为五个部分,分别是: 1. 程序计数器 2. Java虚拟机栈 3. 本地方法栈 4. 堆 5. 方法区. 下面对这五个区域展开深入的介绍. 1. 程序计数器 1.1. 什么是程序计数器? 程序计数器是一块较小的内存空间,可以把它看作当前线程正在执行的字节码的行号指示器.也就是说,程序计数器里面记录的是当前线程正在执行的那一条字节码指令的地址. 注:但是,如果当前线程正在执行的是一个本地方法,那么此时程…
前言 JVM一直是java知识里面进阶阶段的重要部分,如果希望在java领域研究的更深入,则JVM则是如论如何也避开不了的话题,本系列试图通过简洁易读的方式,讲解JVM必要的知识点. 一.运行流程 我们都知道java一直宣传的口号是:一次编译,到处运行.那么它如何实现的呢?我们看下图: java程序经过一次编译之后,将java代码编译为字节码也就是class文件,然后在不同的操作系统上依靠不同的java虚拟机进行解释,最后再转换为不同平台的机器码,最终得到执行.这样我们是不是可以推演,如果要在m…
一.java代码编译执行过程 1.源码编译:通过Java源码编译器将Java代码编译成JVM字节码(.class文件) 2.类加载:通过ClassLoader及其子类来完成JVM的类加载 3.类执行:字节码被装入内存,进入JVM虚拟机,被解释器解释执行 注:Java平台由Java虚拟机和Java应用程序接口搭建,Java语言则是进入这个平台的通道,   用Java语言编写并编译的程序可以运行在这个平台上 二.JVM简介 1.java程序经过一次编译之后,将java代码编译为字节码也就是class…