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. java初探(1)之秒杀中的rabbitMQ

    rabbitMQ 消息队列,通过一定的通信协议,生产者和消费者在应用程序内传递通信. 主要的作用,提高负载,减耦合. 场景描述:当点击秒杀按钮的那个时刻,有很高的并发量,客户端发出请求之后,会判断库存 ...

  2. BootStrap-select插件动态添加option无法显示

    问题描述: 在使用bootstrap-select插件时出现下拉框无法显示动态追加的option,经过查看element元素发现,select标签已经append进去了所需的option选项,但是页面 ...

  3. Avtiviti工作流规范 BPM与BPMN

    进过长时间的轮转,重拾Activiti,因为最近在智联上看到多家公司的需求上写的,都要熟悉工作流引擎,也就是activiti所以重拾 之前看的视屏是activiti5,我觉得版本有点低,所以打算看一下 ...

  4. WebApi OAuth2身份认证

    一.什么是OAuth OAuth是一个关于授权(Authorization)的开放网络标准,目前的版本是2.0版.注意是Authorization(授权),而不是Authentication(认证). ...

  5. web测试——弱网测试、暂停页面执行

    1.弱网测试: 2.暂停页面执行 1.js代码:可以直接在页面上打断点 缺点:需要看懂前端的代码 2.点击暂停按钮,如下图,再次点击,可继续运行

  6. 【Flutter 实战】1.20版本更新及新增组件

    老孟导读:Flutter 1.20 更新了 Slider.RangeSlider.日期选择器组件.时间选择器组件的样式,新增了交换组件:InteractiveViewer,下面详细介绍其用法. 滑块 ...

  7. java集合类源码学习一

    对于java的集合类,首先看张图 这张图大致描绘出了java集合类的总览,两个体系,一个Collection集合体系一个Map集合体系.在说集合类之前,先说说Iterable这个接口,这个接口在jdk ...

  8. 为什么互联网巨头们纷纷使用Git而放弃SVN?(内含Git核心命令与原理总结)

    写在前面 最近发现很多小伙伴对于工作中的一些基本工具的使用还不是很了解,比如:Git这个分布式的代码管理仓库,很多小伙伴就不是很了解,或者说不是很熟悉.甚至有些小伙伴都没听说过Git,就只会用个SVN ...

  9. h5页面在浏览器上好好的,到手机上熄火了又看不到报错信息怎么办?

    背景 最近小编接了一个新需求,用h5开发页面,通过webview嵌入原生APP中,自己在浏览器上开发爽歪歪,什么信息都能看到,可是一嵌入原生app中,瞬间就熄火了,啥也看不到了,不知道为什么,反正就是 ...

  10. IOC 原理

    SpringIOC实现原理 1. 依赖倒置 假设我们设计一辆汽车:先设计轮子,然后根据轮子大小设计底盘,接着根据底盘设计车身,最后根据车身设计好整个汽车.这里就出现了一个“依赖”关系:汽车依赖车身,车 ...