1.java编译到class过程:
1.词法分析:将java源文件的字符流转化成token流
2.语法分析:将token流组建成结构化的语法树
3.语义分析:给类添加默认构造函数、检查变量在使用前是否初始化、将一些变量合并处理、检查变量类型是否匹配、消除无用的代码(解除java语法糖forEach->for,类型转换Integer->int,去掉永假的if代码块)
4.代码生成器:遍历语法树生成java字节码
![](https://img.haomeiwen.com/i11787487/76d5ee98ddf55384.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对象
![](https://img.haomeiwen.com/i11787487/935e4ceec47f4a51.png)
垃圾收集算法:
1.引用计数
2.标记清除(内存碎片)
3.复制:Young代
4.标记-整理:Old代
5.分代收集
![](https://img.haomeiwen.com/i11787487/232bf909abb3f297.png)
参数简介:
-Xmn: Young区大小
-XX:SurvivorRadio=8 :Young区和from space大小为8:1
网友评论