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
- verification
验证文件符合JVM规定 - preparation
静态变量赋默认值 - 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