1.servlet的生命周期
Web 容器加载Servlet 并将其实例化后,Servlet 生命周期开始,容器运行其init 方法进行Servlet 的初始化,请求到达时运行其service 方法,service 方法自动派遣运行与请求对应的doXXX 方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy(抵死做儿)方法
2.jvm的五大内存模型
程序计数器
主要控制流的指示器,字节码解释器就是通过改变计数器的值来寻找下一条要执行的字节码文件
本地方法栈
用来存放值类型和引用类型,堆中的地址,如果堆中的地址没有栈中的引用指向就会被GC回收
java虚拟栈
只要用来java程序的运行,保存方法的局部变量,参与方法的调用和返回,生命周期和线程是一样的
堆
-
本地内存
元数据区
java8之前是方法区,java8之后替代了方法区,元数据区是一块空想的内存区,主要用来保存被虚拟机加载的类信息,常量,静态变量和被编译后的代码等。
直接内存
不需要java堆内存进行映射和转换,可以直接操作内存。
优点:减少GC的回收,提高IO速度
缺点:会导致物理内存被消耗完
3.GC的常用回收算法
引用计数法:
每一个对象都有一个counter,只要有任何一个对象引用了该对象,则其counter加1,当引用失效时,counter减1,当counter为0时,对象不存在任何引用,在GC时被清除
标记清除法:
标记所有的存在引用的对象则未被标记的对象就是不存在引用的垃圾对象,GC会清除所有未被标记的对象
复制算法:
将内存空间分为两块相同的存储空间,每次只使用一块,GC时,将正在使用的内存中的存活对象复制到另一块存储空间中,然后清除正在使用的空间的所有对象
标记压缩法:
标记压缩法是对标记清除法的优化,所以也叫标记清除压缩法,先标记所有的可达对象(存在引用的对象),不同的是,标记完成后并不是直接清除未标记的垃圾对象,而是将所有的被标记的对象(即存活对象)压缩到内存空间的一端后在清理边界外所有的空间
分代算法:
将内存空间根据对象的特点不同进行划分,选择合适的垃圾回收算法,以提高垃圾回收的效率。
分区算法:
将整个堆空间划分为连续的不同小区间,每一个小区间都独立使用,独立回收。
4.类的加载过程
5.双亲委派模型
子类加载器先让父类加载器去查找该类来加载,父类又继续请求它的父类直到最顶层,在父类加载器没有找到所请求的类的情况下,子类加载器才会尝试去加载,这样一层一层上去又下来