JVM从起始到调优系列-1

来源:互联网 发布:淘宝国产高仿手办 编辑:程序博客网 时间:2024/06/06 13:12

JVM是Java Virtual Machine的简称,意为Java虚拟机。

虚拟机:指通过软件模拟的具有完全硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统

虚拟机种类:VMWare、Visual Box、JVM

VMWare或者Visual Box都是使用软件模拟物理CPU的指令集,JVM使用软件模拟java字节码的指令集

1996年 SUN JDK1.0 Classic VM

-纯解释运行,使用外挂进行JIT

1997年JDK1.1发布

-AWT、内部类、JDBC、RMI、反射

1998年 JDK1.2 Solaris Exact VM

-JIT解释器混合

-Accurate Memory Management 精准内存管理,数据类型敏感

-提升GC性能

2000年 JDK1.3 Hotspot作为默认虚拟机发布 加入JavaSound

2002年 JDK1.4 Classic VM退出历史舞台 Assert正则表达式 NIO IPV6日志API 加密类库

2004年发布 JDK1.5 即JDK5、J2SE 5、Java 5

-泛型

-注解

-装箱

-枚举

-NIO 2.0

2014年 JDK8发布

-Lambda表达式

-语法增强 Java类型注解

2016年JDK9

-模块化

----------------------------

Java语言规范

-语法

-变量

-类型

-文法

—————————

JVM规范

-Class文件类型

-运行时数据

-帧栈

-虚拟机的启动

-虚拟机的指令集

 ——————————————————————————————————————————————————

JVM启动流程:

装载配置(根据当前路径和系统版本寻找jvm.cfg)-根据配置寻找JVM.dll(JVM.dll为JVM主要实现)-初始化JVM获得JNIEnv接口(JNIEnv为JVM接口,findClass等操作通过它实现)-找到main方法并运行

—————————————————————————————————————————————————-—

内存空间:方法区、java堆、java栈、本地方法栈

_______________________________________

PC寄存器

方法区:保存装载的类信息:类型的常量池、字段,方法信息、方法字节码

GC分代,堆也是分代的

java栈:线程私有、栈有一系列帧组成、

帧保存一个方法的局部变量、操作数栈、常量池指针、每一次方法调用创建一个帧,并压栈、java没有寄存器,所有参数传递使用操作数栈、小对象在没有逃逸的情况下,可以直接分配在栈上,大对象或者逃逸对象无法栈上分配

———————————————————————————————————————————————————

解释运行:

-解释执行以解释方式运行字节码

-解释执行的意思是:读一句执行一句

编译运行(JIT):

-将字节码编译成机器码

-直接执行机器码

-运行时编译

-编译后性能有数量级的提升

———————————————————————————————————————————————————

常用JVM配置参数

-verbose:gc 

-XX:+printGC

打开gc监控开关,打印GC简单信息

-XX:+printGCDetails

-打印GC详细信息

-Xloggc:log/gc.log

-指定GC log的位置,以文件输出

-帮助开发人员分析问题

-Xmx

-指定最大堆