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. WPF ListView VisualPanel

                     <ItemsPanelTemplate x:Key="ItemsPanelTemplate1">                 &l ...

  2. Cocos2d-x v3.x and Xcode 6.x with ARM 64 Architecture

    转自:http://becomingindiedev.blogspot.com.es/2014/12/cocos2d-x-v3x-and-xcode-6x-with-arm-64.html Hi! W ...

  3. HDU 1532 Drainage Ditches (网络流)

    A - Drainage Ditches Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64 ...

  4. Incorrect string value: '\xF0\x9F...' for column 'XXX' at row 1

    Incorrect string value: '\xF0\x9F...' for column 'XXX' at row 1 这个问题,原因是UTF-8编码有可能是两个.三个.四个字节.Emoji表 ...

  5. 实训随笔2:Git Gui——拯救菜鸟的工具

    熟练使用git进行多人协作开发,是程序猿必备的专业技能之一,可惜我等实在太菜搞不来复杂的命令行. 幸好除了Git Bash还有一个Git gui存在——专门为了拯救我们这些菜鸡程序猿而存在的工具. 下 ...

  6. js 读本地文件

    http://www.jb51.net/article/21191.htm <!doctype html> <html lang="en"> <hea ...

  7. UE4 中的 C++ 编程介绍

    https://docs.unrealengine.com/latest/CHN/Programming/Introduction/index.html UE4 中的 C++ 编程介绍 Unreal ...

  8. jzoj6003. 【THUWC2019模拟2019.1.16】Square (乱搞)

    题面 题解 不难发现,如果一行最后被染色,那么这行的颜色肯定一样,如果倒数第二个被染色,那么除了被最后一个染色的覆盖的那一部分剩下的颜色肯定一样 于是题目可以转化为每一次删去一行或一列颜色相同的,问最 ...

  9. [Xcode 实际操作]七、文件与数据-(11)数据持久化存储框架CoreData的使用:创建CoreData实体并插入数据

    目录:[Swift]Xcode实际操作 本文将演示[CoreData]数据持久化存储框架的使用. 点击[Create a new Xcode project]创建一个新的项目 ->[Single ...

  10. node学习(2)-路由读取图片

    通常我们开发项目的时候都要用到图片,那么nodejs是如何读取图片的呢? 我们来看一下,因为一个网页中图片的数量是不确定的,而我们不能每一张图片都去写它的src路径,这时候最好的方法就是写一个专门读取 ...