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
相关推荐
一瞬祈望16 分钟前
⭐ 深度学习入门体系(第 11 篇): 卷积神经网络的卷积核是如何学习到特征的?
深度学习·学习·cnn
wdfk_prog19 分钟前
[Linux]学习笔记系列 -- 底层CPU与体系结构宏
linux·笔记·学习
芒克芒克23 分钟前
虚拟机类加载机制
java·开发语言·jvm
GISer_Jing30 分钟前
AI Agent:学习与适应、模型上下文协议
人工智能·学习·设计模式·aigc
im_AMBER31 分钟前
Leetcode 100 在链表中插入最大公约数
数据结构·c++·笔记·学习·算法·leetcode·链表
时间黑客41 分钟前
SolidWorks百日建模(二)
学习
alonewolf_9944 分钟前
JDK17 GC调优全攻略:从参数解析到实战优化
java·jvm
Webb Yu1 小时前
Solana 完整学习路线图
学习
蒸蒸yyyyzwd1 小时前
网络编程封装mutex、cond、semaphore学习笔记
笔记·学习
这周也會开心1 小时前
JVM-finalize()方法
jvm