类的加载
类的加载是指什么?
类的加载流程是什么?各个阶段做了什么事情?
加载、验证、准备、解析、初始化
加载成二进制存放于方法区,在堆中生成class文件,作为访问方法区数据结构的入口
验证就是确保被加载类的正确性
准备就是为静态变量赋予默认零值
解析就是符号引用转换为直接引用
初始化就是为静态变量赋予程序默认值
类加载的机制是什么?
全盘负责(依赖和引用)、双亲委托(父加载器)、缓存机制
什么是类加载器?
BootstrapClassloader、ExtClassloader、AppClassloader
为什么要自定义类加载器?
自己验证 2. 定制所需构建 3.加载特定路径的类,网络数据库等
什么是双亲委派模型?有什么意义?
避免重复,保证安全稳定
类的加载又哪些方式?
系统本地直接加载 2.java源文件编译 3.jar等压缩文件读取 4.网络class 5.数据库class
Jvm初始化步骤
类是否被加载?父类是否被加载?是否又初始化语句,如果有则顺序执行初始化语句。
类的初始化时机?
1.创建实例 new对象 2.静态属性或者方法被调用 3. 反射 4.子类被初始化 5. 启动类
Jvm内存结构
jvm内存由哪些区域组成?各有什么作用?
堆,方法区,程序计数器,jvm栈,本地方法栈
堆用来存放对象 2. 方法区存放类信息 3.程序计数器代码执行行号标识 4.jvm栈对应发放的栈,方法的执行对应相应的栈帧进出 5.本地方法栈native方法的栈帧
堆的结构?
年轻代,老年代;eden区 from speace 、to speace、 8:1:1
控制参数 Xms最小堆空间 Xmx最大堆空间 -XX:newSize最小年轻代空间 -XX:MaxNewSize最大年轻代空间 -XX:permSize最小方法区空间 -XX:MaxPermSize最大方法区空间
GC算法
对象存活判断标准?
引用计数、可达性分析
算法有哪些?
标记-清除 标记-整理 复制 分带收集