JVM学习

JVM

1、JVM是一个跨语言的平台,与语言无关

2、java虚拟机规范:一流企业做标准,二流企业做品牌,三流企业做产品

JVM种类

Hotspot:Oracle 公司,有商业版和免费版

open jdk 内部包含免费版本hotspot虚拟机

Jrockit: BEA公司,曾经号称世界最快的虚拟机,后被Oracle收购,合并到Hotspot虚拟机

J9:IBM公司

Microsoft VM:微软

TaobaoVM:阿里,Hotspot深度定制版

LiquidVM:直接针对硬件,效率极高

azul zing:商业版本,速度快,垃圾回收1ms以内

垃圾回收算法被Hotspot吸收,衍生现在的ZGC

等等

3、JDK、JRE和JVM三者关系

JDK: 包括JRE和java 开发工具包

JRE: java运行是环境,包括JVM和java的核心类库

JVM: java虚拟机,运行字节码文件的平台

Class 文件

magic number:4个字节

minor version :2个字节

major version :2个字节

constant_pool_count :2个字节,常量池数量,最多存储常量数量2^16个

constant_pool :常量池,长度为constant_pool_count-1的的表

access_flags :访问标记

this_class :类名引用

super_class :父类引用

interface_count :接口数量

interfaces :接口列表

fileds_count :属性数量

fileds :属性列表

methods_count :方法数量

method_info :方法信息

attribute_count :属性数量

attribute_info :属性信息

无参构造方法执行

Class文件解释器Jclasslib

Class 的加载过程包括: Loading,Linking(Verification,Perparation,Resolution),initializing

1、加载过程是通过类加载器完成的;jre内置类加载器包括Bootstarp,Ext和Application:Bootstarp 加载 jre/lib/rt.jar包中的class文件,Ext加载 jre/lib/ext路径下jar包中的class文件,Application加载classpath下的class文件;除了内置类加载器之外,用户还可以自定义类加载;遵循双亲委派原则

2、为什么要遵循双亲委派原则

2.1主要保证类加载的安全性,防止核心类被篡改

2.2同时可以提高加载效率,父加载器已经加载,则不需要再进行加载

加载不到类,抛出异常ClassNotFoundException

JMM Java内存模型

数据一致性

老的:总线锁

新的:缓存锁 + MESI

缓存行

缓存对齐:disruptor

乱序问题

CPU硬件内存屏障

Java内存屏障

运行时数据区

1、虚拟机栈

java 复制代码
 int i = 8;
 i = i++
 sout(i)  // 8
相关推荐
骁的小小站6 小时前
Verilator 和 GTKwave联合仿真
开发语言·c++·经验分享·笔记·学习·fpga开发
颜颜yan_9 小时前
UU远程——让工作、学习、娱乐跨设备无缝衔接,“远程”更像“身边”
学习·娱乐·远程工作
YJlio11 小时前
Process Monitor 学习笔记(5.24):工具栏参考与高效快捷键指南
笔记·学习·php
deng-c-f11 小时前
Linux C/C++ 学习日记(30):协程(一):同步和异步、协程的简要介绍、用户态CPU调度的实现
学习·协程·同步/异步
hello kitty w12 小时前
Python学习(11) ----- Python的泛型
windows·python·学习
讽刺人生Yan12 小时前
RFSOC学习记录(五)带通采样定理
学习·fpga·rfsoc
报错小能手13 小时前
linux学习笔记(49)Redis详解(1)
linux·笔记·学习
QT 小鲜肉13 小时前
【个人成长笔记】在本地Windows系统中如何正确使用adb pull命令,把Linux系统中的文件或文件夹复制到本地中(亲测有效)
linux·windows·笔记·学习·adb
_李小白15 小时前
【OPENGL ES 3.0 学习笔记】第九天:缓存、顶点和顶点数组
笔记·学习·elasticsearch
洛白白16 小时前
Word文档中打勾和打叉的三种方法
经验分享·学习·word·生活·学习方法