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内核---原理,诊断与优化的更多相关文章

  1. 【深入JVM内核—原理、诊断与优化】第2期开课了

    [深入JVM内核—原理.诊断与优化]的讲师“葛一鸣”,人称“一哥”,毕业于浙江工业大学,计算机软件与理论专业硕士,是国家认证系统分析师,OCP.2012年出版过<Java程序性能优化>,荣 ...

  2. JVM内核-原理、诊断与优化学习笔记(八):JAVA堆分析

    文章目录 内存溢出(OOM)的原因 在JVM中,有哪些内存区间? 堆溢出 永久区 Java栈溢出 直接内存溢出 小问题? MAT使用基础 柱状图显示 支配树 显示线程信息 显示堆总体信息,比如消耗最大 ...

  3. JVM内核-原理、诊断与优化学习笔记(七):性能监控工具

    文章目录 系统性能监控 系统性能监控- linux uptime top vmstat(虚拟内存统计) pidstat 系统性能监控 - windows 任务管理器 Perfmon Process E ...

  4. JVM内核-原理、诊断与优化学习笔记(四):GC算法与种类

    文章目录 GC的概念 GC算法 引用计数法 引用计数法的问题 标记清除 标记压缩 小问题 复制算法 复制算法的最大问题是:空间浪费 整合标记清理思想 -XX:+PrintGCDetails的输出 gc ...

  5. JVM内核-原理、诊断与优化学习笔记(二):JVM运行机制

    文章目录 JVM启动流程 PC寄存器 方法区 保存装载的类信息 通常和永久区(Perm)关联在一起 Java堆 Java栈 Java栈 – 局部变量表 ** 包含参数和局部变量 ** Java栈 – ...

  6. JVM内核-原理、诊断与优化学习笔记(六):类装载器

    文章目录 class装载验证流程 class装载验证流程 class装载验证流程 -加载 class装载验证流程 -链接 验证 链接 -> 验证 文件格式的验证 元数据验证(class文件简单语 ...

  7. JVM内核-原理、诊断与优化学习笔记(三):常用JVM配置参数

    文章目录 Trace跟踪参数 -verbose:gc (打开gc的跟踪情况) -XX:+printGC(打开gc的log开关,如果在运行的过程中出现了gc,就会打印出相关的信息.) -XX:+Prin ...

  8. JVM内核-原理、诊断与优化学习笔记(一):初识JVM

    文章目录 JVM的概念 JVM是Java Virtual Machine的简称.意为Java虚拟机 虚拟机 有哪些虚拟机 VMWare或者Visual Box都是使用软件模拟物理CPU的指令集 JVM ...

  9. Java虚拟机深入JVM内核—原理、诊断与优化视频教程

    http://www.eimhe.com/forum.php?mod=viewthread&tid=142832&highlight=%C4%DA%BA%CB

随机推荐

  1. Floyd(稠密图,记录路径)

    #include<iostream> #include<algorithm> #include<cstdio> #include<cstdlib> #i ...

  2. PowerShell自动部署网站—(2)、安装.Net Framework

    #$PSScriptRoot = "D:\Website":$PSScriptRoot 用于获取执行脚本所在的目录,但是PowerShell 2.0 不支持,需要人为赋值成绝对路径 ...

  3. C# 测试代码#if DEBUG使用

    代码示例: #if DEBUG      Console.WriteLine("DEBUG:11111111111"); #else       Console.WriteLine ...

  4. 【异步编程】Part2:掌控SynchronizationContext避免deadlock

    引言: 多线程编程/异步编程非常复杂,有很多概念和工具需要去学习,贴心的.NET提供Task线程包装类和await/async异步编程语法糖简化了异步编程方式. 相信很多开发者都看到如下异步编程实践原 ...

  5. 洛谷P3405 [USACO16DEC]Cities and States省市

    P3405 [USACO16DEC]Cities and States省市 题目描述 To keep his cows intellectually stimulated, Farmer John h ...

  6. uva1626 Brackets sequence

    题目大意: 给一个有小括号和中括号组成的序列,满足题中的三个条件时,是合法的.不满足时是不合法的,问将一个不合法的序列最少添加几个括号可以使之变成合法的.输出最短合法序列. /* 比较坑的一道题,wa ...

  7. IntelliJ IDEA 安装golang 插件

    作者的机器为mac OS 用户首先需要在自己的个人机器上安装好 golang 的环境,详细可以参考  hyperledger fabric 1.0.5 分布式部署 (一)安装 golang 的部分. ...

  8. Linux上传下载工具 lrzsz

  9. 程序员/开发人员的真实生活 (Gif 多图)

    往工作环境上传东西的时候: 没保存,就关了 IDE 的时候: 凌晨三点调代码的时候: 正则表达式返回了了预期结果的时候: 当老板告诉我,我那一直负责的模块失效了的时候: 刚修复了Bug,我给老板演示的 ...

  10. H.天神的密码

    链接:https://ac.nowcoder.com/acm/contest/903/H 题意: 2018年,icebound打开了神殿.而在2019年,icebound正在试图破解天神的密码,以期获 ...