JVM系列笔记目录

  • 虚拟机的基础概念
  • class文件结构
  • class文件加载过程
  • jvm内存模型
  • JVM常用指令
  • GC与调优

指令集分类

基于寄存器的指令集

基于栈的指令集

Hotspot中的Local Variable Table相当于JVM的寄存器

运行时数据区

运行时数据区分6个部分: PC、JVM Stack、Heap、MethodArea、Native Method Stack、Direct Memory。

  • PC: 程序计数器,存放下一条指令的位置。

  • JVM Stack:线程独有的栈,存放一个个栈帧(Stack Frame,每个方法对应一个栈帧。

    栈帧组成:

    • Local Variable Table 方法本地的参数表
    • Operand Stack 操作数栈
    • Dynamic Linking 动态链接,简单理解为指向Runtime Constant Pool中的符号链接;如果没有解释,将符号引用解析为直接引用的过程;如果已解释,直接用。感兴趣可以阅读下 Oracle官方JVM规范
    • Return address,返回地址,a() -> b(),方法a调用了方法b, b方法的返回值放在什么地方
  • Heap:所有线程共享的堆空间,具体在GC的章节探讨。

  • MethodArea:方法区,线程共享

    • 存放每一个class的结构

    • 方法区是逻辑上的概念,1.8前后有不同实现

      1.8版本前指的是永久代,字符串常量位于PermSpace,FGC不会清理,大小启动的时候指定,不能变。

      1.8后指的是元数据区(Meta Space),字符串常量位于堆,会触发FGC清理,不设定的话,就是最大的物理内存

    • 方法区中包含RunTime Constant Pool,是class中的常量池中的数据运行时存放的地方

  • Native Method Stack:调用了C/C++本地方法的栈。

  • Direct Memory:JVM可以直接访问的内核空间的内存(OS管理的内存),使用NIO,提高效率,实现零拷贝。

运行时数据中PC、JVM Stack、Native Method Stack是线程独有的,而Heap、Method Area则是线程共享的。

  • JVM常用指令

    如何查看指令的含义?idea中通过插件jclasslib直接点击指令查看,或是查阅JVM规范。

    • store 存入LVT

    • load 从LVT取

    • pop弹栈

    • add 加法

    • mul乘法

    • sub减法

    • invoke

      ​ InvokeStatic调用静态方法

      ​ InvokeVirtual调用可以多态的方法

      ​ InvokeInterface调用接口方法

      ​ InvokeSpecial调用可以直接定位,不需要多态的方法如private 方法、构造方法

      ​ InvokeDynamic调用lambda表达式或者反射或者其他动态语言scala kotlin,或者CGlib ASM,动态产生的类会用到的指令,JVM最难的指令

知识分享,转载请注明出处。学无先后,达者为先!

JVM系列【5】JVM常用指令的更多相关文章

  1. JVM系列五:JVM监测&工具

    JVM系列五:JVM监测&工具[整理中]  http://www.cnblogs.com/redcreen/archive/2011/05/09/2040977.html 前几篇篇文章介绍了介 ...

  2. jvm系列(八):jvm知识点总览-高级Java工程师面试必备

    在江湖中要练就绝世武功必须内外兼备,精妙的招式和深厚的内功,武功的基础是内功.对于武功低(就像江南七怪)的人,招式更重要,因为他们不能靠内功直接去伤人,只能靠招式,利刃上优势来取胜了,但是练到高手之后 ...

  3. jvm系列(四):jvm知识点总结

    原文链接:http://www.cnblogs.com/ityouknow/p/6482464.html jvm 总体梳理 jvm体系总体分四大块: 类的加载机制 jvm内存结构 GC算法 垃圾回收 ...

  4. jvm系列(八):jvm知识点总览

    在江湖中要练就绝世武功必须内外兼备,精妙的招式和深厚的内功,武功的基础是内功.对于武功低(就像江南七怪)的人,招式更重要,因为他们不能靠内功直接去伤人,只能靠招式,利刃上优势来取胜了,但是练到高手之后 ...

  5. jvm系列(七):jvm调优-工具篇

    16年的时候花了一些时间整理了一些关于jvm的介绍文章,到现在回顾起来还是一些还没有补充全面,其中就包括如何利用工具来监控调优前后的性能变化.工具做为图形化界面来展示更能直观的发现问题,另一方面一些耗 ...

  6. JVM系列三:JVM参数设置

    JVM系列三:JVM参数设置.分析   不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM.GC的参数,可以极大的减少由于GC工作,而导致的程序运 ...

  7. jvm系列(1):JVM问答

    一:JVM基础知识 1)Java 是如何实现跨平台的? 注意:跨平台的是 Java 程序,而不是 JVM.JVM 是用 C/C++ 开发的,是编译后的机器码,不能跨平台,不同平台下需要安装不同版本的 ...

  8. jvm系列 (一) ---jvm内存区域与溢出

    jvm内存区域与溢出 目录 jvm系列(一):jvm内存区域与溢出 jvm系列(二):垃圾收集器与内存分配策略 为什么学习jvm 木板原理,最短的一块板决定一个水的深度,当一个系统垃圾收集成为瓶颈的时 ...

  9. jvm系列(二):JVM内存结构

    JVM内存结构 所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemoryError的异常到底涉及到运行时数据的哪块区域?该怎么解决呢?其实如果你经常解决服务器性能 ...

  10. 【JVM】JVM系列之JVM体系(一)

    一.前言 为什么要学习了解Java虚拟机 1.我们需要更加清楚的了解Java底层是如何运作的,有利于我们更深刻的学习好Java. 2.对我们调试错误提供很宝贵的经验. 3.这是合格的Java程序必须要 ...

随机推荐

  1. JS 进制转换的理解

    该事情的由来是来自于一个面试题,题目是这样的,[1,2,3].map(parseInt)的结果是什么? 作为菜鸟的我们一定是觉得分别把1,2,3分别交给parseInt,无非就是1,2,3嘛.其实结果 ...

  2. Java代理之静态代理

    什么是代理 代理就是给目标对象一个代理对象,并由代理对象控制目标的引用. 为什么要使用代理模式 1.通过引入代理对象的方式,可以间接的访问目标对象,避免直接访问目标对象给系统带来不必要的复杂性. 2. ...

  3. C++——自然数求和

    代码如下: #include <iostream> using namespace std; int main() { int a,sum=; for(int i=;i<=;i++) ...

  4. .net mvc web api上传图片/文件并重命名

    #region 上传图片 /// <summary> /// 上传图片到服务器 当error为0时成功,为1时失败 并从errmsg获取消息 /// </summary> // ...

  5. SSM框架中添加写日志功能

    前提:要导入log4j的jar包 在web.xml中输入: <!--日志加载--> <context-param> <param-name>log4jConfigL ...

  6. Idea没安装几款好用的插件,怎么风骚的写代码???

    ​ 工欲善其事,必先利其器,好的工具可以提升我们的开发效率,越来越多的Java程序员从Eclipse转到了Jetbrains家的Idea.今天给大家介绍的是我常用的十几款Idea必装的插件. ​ Ti ...

  7. 记录一次OCR程序开发的尝试

    记录一次OCR程序开发的尝试 最近工作中涉及到一部分文档和纸质文档的校验工作,就想把纸质文件拍下来,用文字来互相校验.想到之前调用有道智云接口做了文档翻译.看了下OCR文字识别的API接口,有道提供了 ...

  8. python 3 字符串

    字符串中单引号与双引号无差别 三单引号与三双引号 三引号允许一个字符串跨多行,字符串中可以包含换行符等特殊字符 字符串使用索引的方法来读取,正向从0开始计数,反向从-1开始计数 反向索引 字符串切片 ...

  9. 内存管理初始化源码3:bootmem

    start_kernel ——> setup_arch ——> arch_mem_init ——> bootmem_init ——> init_bootmem_node: 此时 ...

  10. 剑指offer 59-II 队列的最大值

    题目描述 请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value.push_back 和 pop_front 的均摊时间复杂度都是O(1). 若队列为空,pop_ ...