深入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
随机推荐
- CentOS7的网络配置
1.DNS配置 新安装的虚拟机,ping 内网IP可以,但是ping 外网域名却失败,告知“Name or service not known”. 原来是因为需要在/etc/sysconfig/net ...
- mina2中的线程池
一.Mina中的线程池模型 前面介绍了Mina总体的层次结构,那么在Mina里面是怎么使用Java NIO和进行线程调度的呢?这是提高IO处理性能的关键所在.Mina的线程调度原理主要如下图所示: A ...
- Python中正则匹配使用findall时的注意事项
在使用正则搜索内容时遇到一个小坑,百度搜了一下,遇到这个坑的还不少,特此记录一下. 比如说有一个字符串 "123@qq.comaaa@163.combbb@126.comasdf111@a ...
- C# 32位程序在64位系统下运行中解决重定向问题
在64位的Windows操作系统中,为了兼容32位程序的运行,64位的Windows操作系统采用重定向机制.目的是为了能让32位程序在64位的操作系统不仅能操作关键文件文夹和关键的注册表并且又要避免与 ...
- UVa 1663 Purifying Machine (二分匹配)
题意:每一个01串中最多含有一个‘*’,‘*’既可表示0也可表示1,给出一些等长的这样的01串,问最少能用多少个这样的串表示出这些串. 如:000.010.0*1表示000.010.001.011,最 ...
- LeetCode: 383 Ransom Note(easy)
题目: Given an arbitrary ransom note string and another string containing letters from all the magazin ...
- Vue.js中,如何自己维护路由跳转记录?
在Vue的项目中,如果我们想要做返回.回退操作时,一般会调用router.go(n)这个api,但是实际操作中,使用这个api有风险,就是会让用户跳出当前应用,因为它记录的是浏览器的访问记录,而不是你 ...
- 【NOIP模拟赛】密码锁
题目描述 hzwer有一把密码锁,由N个开关组成.一开始的时候,所有开关都是关上的.当且仅当开关x1,x2,x3,…xk为开,其他开关为关时,密码锁才会打开. 他可以进行M种的操作,每种操作有一个si ...
- IT兄弟连 Java语法教程 Java语言入门 典面试题
1.请说明JVM.JRE和JDK是什么?它们有什么关系? JVM是Java虚拟机,Java Virtual Machine的缩写,是一个虚构出来的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实 ...
- 一、接口测试——HTTPRunner二次开发之参数化一
目前项目中在使用开源框架HTTPRunner,时间使用过程中会用到生成随机信息的方法,如生成随机姓名.随机手机号.身份证号.姓名.地址等.以下对二次开发的过程进行简要描述. 一.需求 1.需要测试的接 ...