一、jvm理论

1.1、jvm理论-总述

1.2、jvm理论-class文件

1.2.1、jvm理论-常量池-string

1.2.2、jvm理论-常量池-8种基本类型

1.3、jvm理论-字节码指令

1.4、jvm理论-字节码指令案例

1.5、jvm理论-虚拟机类加载

1.6、java理论之运行时数据区

二、jvm工具

2.1、java工具总述

三、jvm实战

3.1、jvm调优实战

java虚拟机是什么

“java虚拟机”可能指以下三种东西:
1)、抽象规范;
2)、一个具体的实现;
3)、一个运行中的虚拟机实例;

java虚拟机生命周期

启动
当启动一个java程序时,一个虚拟机实例诞生。
虚拟机实例通过调用某个初始类的public static void main(String[] args)方法来运行一个java程序。
任何拥有这样一个main方法的类都可以作为java程序运行的起点,所以必须要告诉虚拟机初始类的名称,整个程序将从它的main方法开始运行。

消亡
初始类的main方法作为程序初始线程的起点,任何其他线程都是由初始线程启动。
java虚拟机内部有两种线程:守护线程和非守护线程。
守护线程,通常是虚拟机使用的线程,如执行垃圾收集。java程序也可以把创建的线程标记为守护线程。
非守护线程,java中的初始线程,就是开始于main方法的线程是非守护线程。
只要程序中有非守护线程在运行,那么java程序也在继续运行(虚拟机仍然存活),当程序中所有的非守护线程都终止时,虚拟机实例自动退出。
程序本身也可以通过Runtime类或System类的exit()方法退出。

java虚拟机体系结构

类装载子系统
1)、负责查找并装载类型,分成装载、连接和初始化,在java类型生命周期中有详细说明;
2)、有两种类装载器:启动类装载器和用户自定义类装载器;
用户自定义类装载器必须派生自java.lang.ClassLoader类。

运行时数据区

方法区
被装载类型的信息存储在方法区中,详细如下:
基本信息
1)、类型的全限定名;
2)、类型的直接超类的全限定名;
3)、类型是类类型还是接口类型;
4)、类型的访问修饰符;
5)、直接超接口的全限定名;

其他信息
1)、类型的常量池;
2)、字段信息;
3)、方法信息;
4)、除了常量以为的所有静态变量;
5)、一个到ClassLoader类的引用;
6)、一个到Class类的引用;


1)、运行时创建的所有类实例和数组都放在堆中;
2)、一个java虚拟机实例只存在一个堆空间,因此虚拟机中的所有线程都共享这个堆;
3)、一个java程序独占一个java虚拟机实例,因此每个java程序都有他自己的堆空间;

java栈

1)、每启动一个新线程时,java虚拟机都会为他分配一个java栈;
2)、java栈以帧为单位保存线程的运行状态;
3)、java虚拟机对java栈只执行两种操作:压栈和出栈;
4)、压栈:每当线程调用一个java方法时,虚拟机都会在该线程的java栈中压入一个新帧。使用这个帧来存储参数、局部变量、中间运算结果等;
5)、出栈:当java方法通过return正常返回,或通过抛出异常中止,虚拟机都会将当前帧弹出java栈然后释放掉;
6)、栈数据是线程私有的,所以不需要考虑多线程情况下栈数据的访问同步问题;

栈帧
1)、栈帧由三部分组成:局部变量区、操作数区和栈数据区;

PC寄存器
1)、对于运行中的java程序,每个线程都有自己的pc寄存器;
2)、线程启动时创建;
3)、当线程执行某个java方法时,PC寄存器的内容总是下一条将被执行指令的地址。

本地方法栈
1)、任何本地方法接口都会使用本地方法栈;

执行引擎
1)、执行引擎是java虚拟机实现的核心;
2)、“执行引擎”可以有三种理解:
  a)、一个是抽象的规范;
      b)、一个是具体的实现;
      c)、一个是正在运行的实例;
3)、执行引擎的行为使用指令集来定义。对于每条指令,规范都规定了执行该指令时应该处理什么,如果处理不做规定;

主要的三块

  

参考:

整理自《深入Java虚拟机第二版》

http://rednaxelafx.iteye.com/blog/774673

http://icyfenix.iteye.com/

java语言和java虚拟机规范:http://docs.oracle.com/javase/specs/

https://www.zhihu.com/question/29884421/answer/113785601

jvm系列的更多相关文章

  1. JVM系列-常用参数

    1.堆内存 堆内存用于存储new对象,垃圾回收器负责堆内存的管理.但Java程序实际占用的空间则由堆内存.栈内存(程序运行栈).程序计数器.常量区.代码区.本地内存等. 堆内存分为Young和Old, ...

  2. JVM系列文章(四):类载入机制

    作为一个程序猿,只知道怎么用是远远不够的. 起码,你须要知道为什么能够这么用.即我们所谓底层的东西. 那究竟什么是底层呢?我认为这不能一概而论.以我如今的知识水平而言:对于Web开发人员,TCP/IP ...

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

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

  4. JVM系列文章(三):Class文件内容解析

    作为一个程序猿,只知道怎么用是远远不够的.起码,你须要知道为什么能够这么用.即我们所谓底层的东西. 那究竟什么是底层呢?我认为这不能一概而论.以我如今的知识水平而言:对于Web开发人员,TCP/IP. ...

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

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

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

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

  7. jvm系列 (二) ---垃圾收集器与内存分配策略

    垃圾收集器与内存分配策略 前言:本文基于<深入java虚拟机>再加上个人的理解以及其他相关资料,对内容进行整理浓缩总结.本文中的图来自网络,感谢图的作者.如果有不正确的地方,欢迎指出. 目 ...

  8. jvm系列 (三) ---锁的优化

    锁的优化 目录 jvm系列(一):jvm内存区域与溢出 jvm系列(二):垃圾收集器与内存分配策略 jvm系列(三):锁的优化 我的博客目录 锁的四种状态 从低到高,只能升级不能降级 无锁状态 偏向锁 ...

  9. jvm系列 (四) ---强、软、弱、虚引用

    java引用 目录 jvm系列(一):jvm内存区域与溢出 jvm系列(二):垃圾收集器与内存分配策略 jvm系列(三):锁的优化 我的博客目录 为什么将引用分为不同的强度 因为我们需要实现这样一种情 ...

  10. jvm系列 (五) ---类的加载机制

    类的加载机制 目录 jvm系列(一):jvm内存区域与溢出 jvm系列(二):垃圾收集器与内存分配策略 jvm系列(三):锁的优化 jvm系列 (四) ---强.软.弱.虚引用 我的博客目录 什么是类 ...

随机推荐

  1. c#生成连续单号

    bill.BillCode = GetBillCode("JH");//生成单号 if (bill.BillCode == "no") { bill.BillC ...

  2. CentOS 7.2配置Apache服务httpd小伙伴们可以参考一下

    这篇文章主要为大家详细介绍了CentOS 7.2配置Apache服务 httpd上篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 一.Perl + mod_perl 安装mod_perl使Per ...

  3. 029 c3p0的小测试

    今天被问到这个问题,就实验了一下,后续会继续补充一些配置项的意思. 一:操作步骤 1.大纲 2.新建sql -- ---------------------------- -- Table struc ...

  4. QT pyqt pyside2 QLabel 自动换行设置注意点

    QT pyqt pyside2 QLabel 自动换行设置注意点 先看效果: PySide2(QT5) 的 QT Designer (我在 QT4 的 designer 中不可以直接看效果,可能需要设 ...

  5. HDU 2289 Cup【二分】

    <题目链接> 题目大意: 一个圆台型的杯子,它的上底半径和下底半径已经给出,并且给出它的高度,问你,体积为V的水倒入这个杯子中,高度为多少. 解题分析: 就是简单的二分答案,二分枚举杯中水 ...

  6. 李宏毅机器学习笔记3:Classification、Logistic Regression

    李宏毅老师的机器学习课程和吴恩达老师的机器学习课程都是都是ML和DL非常好的入门资料,在YouTube.网易云课堂.B站都能观看到相应的课程视频,接下来这一系列的博客我都将记录老师上课的笔记以及自己对 ...

  7. BZOJ.4540.[HNOI2016]序列(莫队/前缀和/线段树 单调栈 RMQ)

    BZOJ 洛谷 ST表的一二维顺序一定要改过来. 改了就rank1了哈哈哈哈.自带小常数没办法. \(Description\) 给定长为\(n\)的序列\(A_i\).\(q\)次询问,每次给定\( ...

  8. [三边定位] C# 演示程序

    计划用CC2530做定位,网上找了一些求圆交点的程序, 修改成3个圆求交点的质心,感觉算法还行. 粗略写了一下程序,结果还行. 现在只能手动输入3个圆的信息. 后面需要再优化. 全部未优化的程序: u ...

  9. (转)HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别

    ①HashMap的工作原理 HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象.当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算h ...

  10. Cesium Up and Running Error: Cannot find module 'express'

    在node server.js之前需要npm install,如下: npm install -d