一、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. BZOJ1856 [Scoi2010]字符串 数论

    原文链接http://www.cnblogs.com/zhouzhendong/p/8084577.html 题目传送门 - BZOJ1856 题意概括 找出由n个1,m个0组成的字符串,且任意前几个 ...

  2. 爬虫2 urllib3 爬取30张百度图片

    import urllib3 import re # 下载百度首页页面的所有图片 # 1. 找到目标数据 # page_url = 'http://image.baidu.com/search/ind ...

  3. 富文本编辑器上传图片需要配置js,后台代码

    富文本编辑器上传图片需要配置js,后台代码

  4. POJ 2488 A Knight's Journey-dfs

    题目链接:http://poj.org/problem?id=2488 题目解读:首先得弄清楚国际象棋中关于“马走日”的规则,如上图中的马,它的下一步的走法有8中,所以对每一个位置的马,它所能走的8个 ...

  5. HDU 4553 约会安排 (区间合并)【线段树】

    <题目链接> 寒假来了,又到了小明和女神们约会的季节.  小明虽为屌丝级码农,但非常活跃,女神们常常在小明网上的大段发言后热情回复“呵呵”,所以,小明的最爱就是和女神们约会.与此同时,也有 ...

  6. Django之ORM操作总结

    Django之ORM总结 表结构 from django.db import models # 一对多:班级与学生 # 多对多:班级与老师 # Create your models here. #创建 ...

  7. rock-paper-scissors

    rock-paper-scissors维护三个前缀和,然后注意顺序,最后做差来确定可行的答案,因为答案比较小,可以考虑这种暴力做法,像这种方案数可以++的题真的不多,如果想不出来特别优秀的想法,不妨简 ...

  8. JavaScript中值类型与引用类型

    JavaScript中的变量类型有哪些? 值类型:字符串(string).数值(number).布尔值(boolean).null.undefined 引用类型:对象(Object).数组(Array ...

  9. 按字典序依次打印只由1~n组成的n位数

    //我的dfs入门.将1~n一次填入数组然后打印. #include<stdio.h> #include<string.h> ]; ]; void dfs(int,int); ...

  10. RESTful restful api Representational State Transfer

    通俗直白讲:REST是一种编写风格,一种API接口规范.它的风格就是将对象(如学生)的状态(如增删改查,API接口版本号等等)通过其他方式传递,API的接口地址突显出描述的对象. -- == REST ...