深入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
随机推荐
- Words Gems
所有的东西都来自抄袭.来自学习.不同的是用新的方法做其他公司做过的事情.很多公司做同样的事情,但只有一家公司最成功.你要发现一个有需求的服务,并做得比别人更好,而不是比别人更早.
- SimpliciTI协议地址分配
1.多个ED节点和AP正确连接后,AP都会给ED分配一个相应的地址.当某个ED出现意外,比如电源问题,和AP断开连接,AP并不将该ED节点的地址消除.当该ED恢复正常,重新申请加入网络时,AP会检测该 ...
- c++常用函数STL
完c++快一年了,感觉很有遗憾,因为一直没有感觉到c++的强大之处,当时最大的感觉就是这个东西的输入输出比C语言要简单好写. 后来我发现了qt,opencv,opengl,原来,c++好玩的狠. 在这 ...
- ambari2.1.1安装
1 安装环境 系统:centos6.6 Ambari版本:2.1.1 安装指南:https://cwiki.apache.org/confluence/display/AMBARI/Ins ...
- 使用二次封装的openStack发行版本网卡至少有2个
- <正则吃饺子> :关于微信支付的简单总结说明(一)
关于支付,一直想参与开发,现在根据项目中已有及参见的微信开发文档,将自己对于微信开发的流程进行简单的总结,以备后用和帮助后来者. 一.相关官方文档 微信支付官方文档:https://pay.weixi ...
- ASP.NET自定义控件组件开发
ASP.NET的开发都是事件驱动的,现在我们就来为控件添加事件.在事件之前 对委托事件要要熟悉. 其实定义事件的步骤很简单: 1.声明一个委托. 2.定义一个携带事件信息的类. 3.定义事件 4.定义 ...
- webpack 打包和手动创建一个vue的项目
首先我们为啥要用webpack,为啥不用其他的打包的工具. 先听我捋捋, Webpack有人也称之为 模块打包机 ,由此也可以看出Webpack更侧重于模块打包,当然我们可以把开发中的所有资源(图片. ...
- PAT甲级——1107 Social Clusters (并查集)
本文同步发布在CSDN:https://blog.csdn.net/weixin_44385565/article/details/90409731 1107 Social Clusters (30 ...
- K.河北美食
链接:https://ac.nowcoder.com/acm/contest/903/K 题意: icebound最喜欢吃河北菜,于是他想要大厨做一桌河北菜宴请宾客.icebound购买了一些食材,并 ...