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. python爬虫知识点总结(一)库的安装

    环境要求: 1.编程语言版本python3: 2.系统:win10; 3.浏览器:Chrome68.0.3440.75:(如果不是最新版有可能影响到程序执行) 4.chromedriver2.41 注 ...

  2. c# Linq Where 抛出异常 导致 程序崩溃

    Collection was modified; enumeration operation may not execute" 这次项目中遇到一个问题, 就是C#程序随机崩溃, 抛出上面的异 ...

  3. lwip【4】 lwIP配置文件opt.h和lwipopts.h初步分析之一

    在这里先说一下这两个配置lwip协议栈文件opt.h和lwipopts.h的关系:          opt.h是lwip"出厂"时原装的配置文件,它的作者是瑞士科学院的Adam等 ...

  4. 安装时后的idea,项目不能运行,pom.xml文件不能下载到本地仓库,maven配置是正确的

    安装时后的idea,项目不能运行,pom.xml文件不能下载到本地仓库,maven配置是正确的 项目上传到svn后,同事下载项目后,没有识别出来mavn中的pom.xml文件,导致idea不能自动下载 ...

  5. opencvsharp BitmapSource图片截取问题

    private BitmapSource GetUiImage(FrameworkElement ui) { RenderTargetBitmap bmp=new RenderTargetBitmap ...

  6. <c和指针>学习笔记1之快速上手和基本概念

    1 c语言中的注释 功能:使这段代码在程序中不起作用,当然如果是功能注释,那是方便其他人阅读您的代码. 大部分情况下,多行的注释,我们采用的是这种方式,例如  /*内容*/. 这个符号不能嵌套,也就是 ...

  7. iOS三方支付--微信支付/支付宝支付

    一.微信支付 1.注册账号并申请app支付功能 公司需要到微信开放品台进行申请app支付功能 , 获得appid和微信支付商户号(mch_id)和API秘钥(key) . Appsecret(secr ...

  8. 数据库路由中间件MyCat - 源代码篇(14)

    此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 对于表的dataNode对应关系,有个特殊配置即类似dataNode="distributed(d ...

  9. MYSQL数据库设计规范11111

    MYSQL数据库设计规范       1.数据库命名规范         采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成;         命名简洁明确(长度不能超 ...

  10. es6 reduce的用法

    一.forEach回调函数参数,item(数组元素).index(序列).arr(数组本身)循环数组,无返回值,不改变原数组不支持return操作输出,return只用于控制循环是否跳出当前循环 二. ...