JVM自我笔记

Jar包启动

java -Xss256K -XX:ParallelGCThreads=4 -XX:+DisableExplicitGC -XX:SurvivorRatio=1 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+CMSClassUnloadingEnabled -XX:LargePageSizeInBytes=128M -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=73 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintClassHistogram -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -Xloggc:logs/gc.log -Xms256m -Xmx256m -jar OOXX.jar --spring.profiles.active=prod

java -Xss256K -XX:ParallelGCThreads=4 -XX:+DisableExplicitGC -XX:SurvivorRatio=1 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+CMSClassUnloadingEnabled -XX:LargePageSizeInBytes=128M -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=73 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintClassHistogram -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -Xloggc:logs/gc.log -Xms256m -Xmx256m -jar OOXX.jar --spring.profiles.active=prod

Class文件格式

16进制
magic ca fe ba be
minor version 00 00
major version 00 34 翻译过来 52

constant_pool_count 00 10 十进制 16 从1开始,15个常量

access_flag访问标记 两个字节
this_class 两个字节 指向常量池类名的引用

supper class

interface count

interfaces

files_count 多少个属性

fileds 具体的属性

methods_count 方法的个数

method_info 具体的方法

attribute_count

attribute具体代码

类的加载过程

graph TD;
class-->loading;
loadinh--> linking;
linking--> initalizing;
initalizing--> GC;

linking : verification preparation resolution

类加载器

bootstrap clasoader

extension classloader

app classloader

customer classloader

双亲委派

自下向上 检查有没有加载 findclass 如果成功返回
自上向下 尝试加载
为什么?安全

自定义classloader
extends ClassLoader
overwrite findClass方法
继承然后重写
可以加密

如何打破双亲委派

混合执行 编译执行 解释执行

2.Linking

  1. verification
    验证文件符合JVM规定
  2. preparation
    静态变量赋默认值
  3. Resolution
    将类方法等符号引用解析为直接引用
    常量池中的各种符号引用解析为指针、偏移量等内存地址的直接引用
    3.Intializing
    调用类初始化代码,给静态成员变量赋初始值。
小总结
1.load 默认值 -初始值
2. new 申请内存-默认值-初始值

JMM JVM内存模型

Java memory model java内存模型

硬件层的并发优化基础知识

存储器的层次结构

L0: 寄存器
L1: 高速缓存
L2: 高速缓存
cpu内部 更小更快 成本更高

L3 高速缓存
L4 主存
L5 硬盘
L6 远程文件存储

cpu共享 更大 更慢 成本更低

在这里插入图片描述
intel cpu用的mesi cache 缓存一致性协议

硬件层数据一致性

协议很多
intel cpu 用的Mesi 缓存一致性协议
缓存的4种状态
在这里插入图片描述
现代CPU 缓存锁加总线锁实现

cache line 的概念 缓存行对齐 伪共享

位于同一缓存行的两个不同数据 被两个不同CPU锁定 产生互相影响的缓存问题

缓存行对齐解决伪共享问题

执行乱序的问题

CPU 为了提高指令执行效率,会在一条指令执行过程中去内存读数据,慢100倍,去同时执行另一条指令,前提是两条没有依赖关系。
WC Buffer 写合并 写操作也可以进行合并 CPU合并写

DisOrder
乱序执行的证明

如何特定情况下不乱序

有序性保障

CPU内存屏障

在这里插入图片描述
volatile 保证有序

JVM层面实现
读写都加屏障
StoreStoreBarrier
volatile 写操作
StoreLoadBarrier

LoadLoadBarrier
volatile读操作
LoadStroeBarrier

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值