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. bzoj 3653 谈笑风生——主席树

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3653 原来一直想怎么线段树合并.可是不会把角标挪一位. 查询的其实是子树内一段深度的点的 s ...

  2. MySQL安装过程中对The error code is 2203的解决方案

    MySQL安装过程中对The error code is 2203的解决方案 1.问题描述 Windows系统安装MySQL遇到The error code is 2203.,具体描述如下 The i ...

  3. 数据库和ADO

    数据库语言 数据库的简易流程(数据库客户端软件和数据库服务软件的执行流程) 主键的概念 如何创建主键 如何创建外键 主外键关系的概念以及使用 数据库的主要类型 数据库的主要数据类型 使用SQL语句来创 ...

  4. [poj3417]Network(LCA+树形dp)

    题意:给出一棵无根树,然后下面再给出m条边,把这m条边连上,每次你去两条边,规定一条是树边,一条是新边,问有多少种方案能使树断裂. 解题关键:边权转化为点权,记录每条边被环覆盖的次数,通过val[a] ...

  5. 5、scala面向对象-类

    一.类 1.定义类 ##定义并调用 scala> :paste // Entering paste mode (ctrl-D to finish) class HelloWord { priva ...

  6. jsonp的使用方法

    参数jsonp 和 jsonpCallback jsonp指定使用哪个名字将回调函数传给服务端,也就是在服务端通过 request.getParameter(""); 的那个名字, ...

  7. 基于Go实现的秒杀系统

    这是基于Go语言的一个秒杀系统,这个系统分三层,接入层.逻辑层.管理层.项目源码:https://github.com/BlueSimle/SecKill 系统架构图 秒杀接入层 从Etcd中加载秒杀 ...

  8. Centos7.2 安装配置 Tengine(nginx)

    一.下载tengine wget http://tengine.taobao.org/download/tengine-2.2.2.tar.gz 二.安装tenginx(nginx)的模块依赖库 yu ...

  9. css hack汇总

    注意点: 网上很多资料中常常把!important也作为一个hack手段,其实这是一个误区.!important常常被我们用来更改样式,而不是兼容hack.造成这个误区的原因是IE6在某些情况下不主动 ...

  10. ABP 软删除ISoftDelete

    一.简介 ABP 的软删除是为了,在删除的时候,不是真正的删除数据,是为了保护数据. 二.具体实现 在 Core  层,我们需要这个实体去实现这个 ISoftDelete 接口.实现它的 public ...