深入JVM内核---原理,诊断与优化
JVM的概念
JAM是Java Virtual Machine的简称。意为Java虚拟机
虚拟机
指通过软件模拟的具有完整硬件系统功能的,运行在一种完整隔离环境中的完整计算机系统
有哪些虚拟机
- VMWare
-Visual Box
-JVM
VMWare或者Visual Box都是使用软件模拟物理CPU的指令集
JVM使用软件模拟Java字节码的指令集
JVM发展史
初始JVM-Java和JVM的历史
1996年SUN JDK1.0Classic VM
-纯解释运行,使用外挂进行JIT
1997年JDK1.1发布
-AWT, 内部类,JDBC,RMI,反射
1998年 JDK1.2 Solaris Exact VM
-JIT 解释器混合
-Accurate Memory Management 精确内存管理,数据类型敏感(JDK1.2后 称为Java 2 J2SE J2EE J2ME的出现加入Swing Collections)
-提升的GC性能
2000年 JDK 1.3 Hotspot 作为默认虚拟机发布 加入JavaSound
2002年 JDK1.4Classic VM退出历史舞台 Assert正则表达式 NIO IPV6 日志API 加密类库等
2004年发布 JDK1.5 即 JDK5,J2SE 5 ,Java 5
-泛型
-注释
-装箱
-枚举
JDK1.6 JDK6
-脚本语言支持
-JDBC4.0
-Java编译器 API
-可变长的参数
-Foreach循环
JDK1.6 JDK6
-脚本语言支持
-JDBC 4.0
-Java编译器API
2011年 JDK7发布
-延误项目推出到JDK8
-G1
-动态语言增强
-64位系统中的压缩指针
-NIO 2.0
2014年 JDK8发布
-Lambda表达式
-语法增强 Java类型注释
2016年JDK9
-模块化
大事记
使用最为广泛的JVM为HotSpot
HotSpot 为Longview Technologies开发 被SUN收购
2006年 Java开源 并建立OpenJDK
-HotSpot 成为Sun JDK和OpenJDK中所带的虚拟机
2008年 Oracle收购BEA
-得到JRockit VM
2010年Oracle 收购 Sun
-得到Hotspot
Oracle虚部JDK8时整合JRockit和Hotspot,优势互补
-在Hotspot基础上,移植JRockit优秀特性
JVM种类
KVM
-Sun发布
IOS Android前,广泛用于手机系统
CDC/CLDC HotSpot
-手机,电子书,PDA等设备上建立统一的Java编程接口
-J2ME的重要组成部分
-BEA
IBM J9 VM
-IBM内部
Apache Harmony
-兼容于1.5和JDK1.6的Java程序运行平台
-与Oracle关系恶劣 退出JCP,Java社区的分裂
-OpenJDK出现后,受到挑战2011年退役
-没有大规模商用经历
对Android的发展有积极的作用
JRockit
Java语言规范
-语法
语法定义
-IfThenStatement
if(Expression)Statement
-ArgumentList;
Argument
ArgumetList,Argument
1.词法结构
- \u+4个进制数字,表示UTF-16
-行终结符:CR,or LF,or CR LF。
Identifier:
IdentifierChars but not a Keyword or BooleanLiteral or NullLiteral
IdentifierChars:
JavaLetter
IdentifierChars JavaLetterOrDigit
JavaLetter:
any Unicode chatacter that is a Java letter(see below)
JavaLetterOrDigit:
any Unicode chatacter that is a Java letter-or-digit(see below)
-变量
-Int
. 0 2 0372 0xDada_Cafe 1996 0x00_FF_00_FF
-Long
.0I 0777L 0x100000000L 2_147_483_648L 0xC0B0L
-Float
. 1e1f 2.f .3f 0f 3.14f 6.022137e+23f
-Double
.1e1 2. .3 0.0 3.14 1e-9d 1e137
-操作
. += -= *= /= &= ;|= ^= %= <<= >>= >>>=
类型和变量
-元类型
.byte short int long float char
-变量初始化
.boolean false
.char \u0000
-类型
Java内存模型
类加载连接的过程
public static final abstract的定义
异常
数组的使用
-文法
JVM规范
-Class文件类型
-运行时数据
-帧栈
-虚拟机的启动
虚拟机的指令集
-泛型
-空白符
.空格tab\t换页\f行终结符
-注释
-标示符
-关键字
Java语言规范定义了什么是Java语言
Java语言和JVM相对独立
-Groovy
-Clojure
-Scala
JVM主要定义二进制class文件和JVM指令集等
Class文件格式
数字的内部表示和储存
-Byte -128 to 127(-2的7次方 to 2的7次方-1)
returnAddress数据类型定义
-指向操作码的指针。不对应Java数据类型,不能再运行时修改。finally实现需要:
定义PC
堆
栈
方法区
整数的表达
-原码:第一位为符号位(0为正数,1为负数)
-反码:符号位不动,原码取反
-负数补码:符号位不动,反码加1
-整数补码:和原码相同
-打印整数的二进制表示
int a=-6;
for(int i=0;i<32;i++){
int t=(a & 0x80000000>>>i)>>>(31-i);
System.out.print(t);
}
Float 的表示与定义
-支持IEEE 754
.s eeeeeee mmmmmmmmmmmmmmmmmmmmmmm
指数:8 尾数:23
.e全0 尾数附加为0 否则尾数附加位为1
.s*m*2^(e-127)
一些特殊的方法
-<clinit>
-<init>
深入JVM内核---原理,诊断与优化的更多相关文章
- 【深入JVM内核—原理、诊断与优化】第2期开课了
[深入JVM内核—原理.诊断与优化]的讲师“葛一鸣”,人称“一哥”,毕业于浙江工业大学,计算机软件与理论专业硕士,是国家认证系统分析师,OCP.2012年出版过<Java程序性能优化>,荣 ...
- JVM内核-原理、诊断与优化学习笔记(八):JAVA堆分析
文章目录 内存溢出(OOM)的原因 在JVM中,有哪些内存区间? 堆溢出 永久区 Java栈溢出 直接内存溢出 小问题? MAT使用基础 柱状图显示 支配树 显示线程信息 显示堆总体信息,比如消耗最大 ...
- JVM内核-原理、诊断与优化学习笔记(七):性能监控工具
文章目录 系统性能监控 系统性能监控- linux uptime top vmstat(虚拟内存统计) pidstat 系统性能监控 - windows 任务管理器 Perfmon Process E ...
- JVM内核-原理、诊断与优化学习笔记(四):GC算法与种类
文章目录 GC的概念 GC算法 引用计数法 引用计数法的问题 标记清除 标记压缩 小问题 复制算法 复制算法的最大问题是:空间浪费 整合标记清理思想 -XX:+PrintGCDetails的输出 gc ...
- JVM内核-原理、诊断与优化学习笔记(二):JVM运行机制
文章目录 JVM启动流程 PC寄存器 方法区 保存装载的类信息 通常和永久区(Perm)关联在一起 Java堆 Java栈 Java栈 – 局部变量表 ** 包含参数和局部变量 ** Java栈 – ...
- JVM内核-原理、诊断与优化学习笔记(六):类装载器
文章目录 class装载验证流程 class装载验证流程 class装载验证流程 -加载 class装载验证流程 -链接 验证 链接 -> 验证 文件格式的验证 元数据验证(class文件简单语 ...
- JVM内核-原理、诊断与优化学习笔记(三):常用JVM配置参数
文章目录 Trace跟踪参数 -verbose:gc (打开gc的跟踪情况) -XX:+printGC(打开gc的log开关,如果在运行的过程中出现了gc,就会打印出相关的信息.) -XX:+Prin ...
- JVM内核-原理、诊断与优化学习笔记(一):初识JVM
文章目录 JVM的概念 JVM是Java Virtual Machine的简称.意为Java虚拟机 虚拟机 有哪些虚拟机 VMWare或者Visual Box都是使用软件模拟物理CPU的指令集 JVM ...
- Java虚拟机深入JVM内核—原理、诊断与优化视频教程
http://www.eimhe.com/forum.php?mod=viewthread&tid=142832&highlight=%C4%DA%BA%CB
随机推荐
- python爬虫知识点总结(一)库的安装
环境要求: 1.编程语言版本python3: 2.系统:win10; 3.浏览器:Chrome68.0.3440.75:(如果不是最新版有可能影响到程序执行) 4.chromedriver2.41 注 ...
- c# Linq Where 抛出异常 导致 程序崩溃
Collection was modified; enumeration operation may not execute" 这次项目中遇到一个问题, 就是C#程序随机崩溃, 抛出上面的异 ...
- lwip【4】 lwIP配置文件opt.h和lwipopts.h初步分析之一
在这里先说一下这两个配置lwip协议栈文件opt.h和lwipopts.h的关系: opt.h是lwip"出厂"时原装的配置文件,它的作者是瑞士科学院的Adam等 ...
- 安装时后的idea,项目不能运行,pom.xml文件不能下载到本地仓库,maven配置是正确的
安装时后的idea,项目不能运行,pom.xml文件不能下载到本地仓库,maven配置是正确的 项目上传到svn后,同事下载项目后,没有识别出来mavn中的pom.xml文件,导致idea不能自动下载 ...
- opencvsharp BitmapSource图片截取问题
private BitmapSource GetUiImage(FrameworkElement ui) { RenderTargetBitmap bmp=new RenderTargetBitmap ...
- <c和指针>学习笔记1之快速上手和基本概念
1 c语言中的注释 功能:使这段代码在程序中不起作用,当然如果是功能注释,那是方便其他人阅读您的代码. 大部分情况下,多行的注释,我们采用的是这种方式,例如 /*内容*/. 这个符号不能嵌套,也就是 ...
- iOS三方支付--微信支付/支付宝支付
一.微信支付 1.注册账号并申请app支付功能 公司需要到微信开放品台进行申请app支付功能 , 获得appid和微信支付商户号(mch_id)和API秘钥(key) . Appsecret(secr ...
- 数据库路由中间件MyCat - 源代码篇(14)
此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 对于表的dataNode对应关系,有个特殊配置即类似dataNode="distributed(d ...
- MYSQL数据库设计规范11111
MYSQL数据库设计规范 1.数据库命名规范 采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成; 命名简洁明确(长度不能超 ...
- es6 reduce的用法
一.forEach回调函数参数,item(数组元素).index(序列).arr(数组本身)循环数组,无返回值,不改变原数组不支持return操作输出,return只用于控制循环是否跳出当前循环 二. ...