1.java编译到class过程:
1.词法分析:将java源文件的字符流转化成token流
2.语法分析:将token流组建成结构化的语法树
3.语义分析:给类添加默认构造函数、检查变量在使用前是否初始化、将一些变量合并处理、检查变量类型是否匹配、消除无用的代码(解除java语法糖forEach->for,类型转换Integer->int,去掉永假的if代码块)
4.代码生成器:遍历语法树生成java字节码
image.png
2.如何加载class文件:
1.找到class文件,并把这个class文件包含的字节码加载到内存中
2.分三个步骤,字节码验证、Class类数据结构分析及相应的内存分配和最后的符号表的链接
3.类中静态属性和初始化赋值默认值,以及静态块的执行等
3.jvm内存结构:
堆:
Young区(堆的1/4): eden(满minorGC) Suvivor Suvivor(minorGC,Young的1/8) 【from sppace,to space】
Old区:(FullGC)
Perm区:存放类的class对象
堆的分代结构
垃圾收集算法:
1.引用计数
2.标记清除(内存碎片)
3.复制:Young代
4.标记-整理:Old代
5.分代收集
java虚拟机内存结构
参数简介:
-Xmn: Young区大小
-XX:SurvivorRadio=8 :Young区和from space大小为8:1