20.类的生命周期
1、加载,查找并加载类的二进制数据,在Java堆中也创建一个java.lang.Class类的对象
2、加载,连接又包含三块内容:验证、准备、初始化。
- 验证,文件格式、元数据、字节码、符号引用验证
- 准备,为类的静态变量分配内存,并将其初始化为默认值;
- 解析,把类中的符号引用转换为直接引用。
3、初始化,为类的静态变量赋予正确的初始值
4、使用,new出对象程序中使用
5、卸载,执行垃圾回收。
21.垃圾回收器
Serial收集器,串行收集器是最古老,最稳定以及效率最高的收集器,可能会产生较长的停顿,只适用一个线程去回收。
ParNew收集器,ParNew收集器其实就是Serial收集器的多线程版本。
Parallel收集器,Parallel Scavenge收集器类似ParNew收集器,Parallel收集器更关注系统的吞吐量。
Parallel Old 收集器,Parallel Old 是Parallel Scavenge 收集器的老年代版本,适用多线程和“标记-整理”算法
CMS收集器,CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。
G1收集器,G1(Garbage-First)是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的机器。以极高概率满足GC停顿时间要求的同时,还具备高吞吐量性能特征。
22.JVM调优命令
Sun JDK 监控和故障处理命令有jps jstat jmap jstack jinfo
1、jps,JVM Process Status Tool, 显示指定系统内所有的HotSpot虚拟机进程。
2、jstat,JVM statistics Monitoring 是用于见识虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中类装载、内存、垃圾收集、JIT编译等运行数据
3、jmap,JVM Memory Map命令用于生成heap dump 文件
4、jhat,JVM Heap Analysis Tool 命令是与jmap搭配使用,用来分析jmap生成的dump,jhat内置了一个微型的http/html 服务器,生成dump的分析结果后,可以在浏览器中查看
5、jstack,用于生成java虚拟机当前时刻的线程快照。
6、jinfo,JVM Configuration info 这个命令作用是实时查看和调整虚拟机运行参数。
23.JVM调优工具
常用调优工具分为两类,jdk自带监控工具:jconsole 和 jvisualvm ,第三方有:MAT(Memory AnalyzerTool)、GChisto。
1、jconsole,Java Monitoring and Management Console 是从java5开始的,在JDK中自带的java监控和管理控制台,用于对JVM内存、线程和类等的监控
2、jvisualvm,jdk自带全能工具,可以分析内存快照、线程快照;监控内存变化、GC变化等。
3、MAT,Memory Analyzer Tool, 一个基于Eclipse的内存分析工具,是一个快速、功能丰富的java heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗
4、GChisto,一款专业分析gc日志的工具
24.描述一下JVM加载class文件的原理机制
JVM中类的装载是由类加载器(ClassLoader)和它的子类来实现的,Java中的类加载器是一个重要的Java运行时系统组件,它负责在运行时查找和装入类文件中的类。类的加载是指把类的.class文件中的数据读入到内存中,通常市创建一个字节数组读入.class文件。
25.GC是什么?为什么要有GC?
GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动检测对象是否超过作用域从而达到自动回收内存的目的。Java语言没有提供释放已分配内存的显示操作方法。
26.垃圾回收器的基本原理是什么?
对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是“可达的”,哪些对象是“不可达的”。当GC确定一些对象为“不可达”时,GC就有责任回收这些内存空间。可以。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。