一 、java的几个重要关键字(static、final、volatitle、fransient)。
二、JVM 的内存划分、class加载机制、GC策略。
1、JVM内存划分:程序计数器(Program Counter Register)、Java栈(VM Stack)、本地方法栈(Native Method Stack)、方法区 (Method Area)、堆(Heap)。
2、Class加载机制:
- 将.java文件通过编译器编译后会形成.class文件。
- 当我们运行该文件时,java虚拟机就会通过类加载器把.class文件加载到内存, 在方法区形成形成该类各方法的代码段和描述该类细节信息的常量池,同时在堆区形成一个表示该类的Class对象(一个java.lang.Class类的实例)
3、GC策略
GC算法
- 标记—清除算法(Mark-Sweep)
- 复制算法(Copying)
- 标记—整理算法(Mark-Compact)
- 分代收集算法(Generational Collecting)
垃圾回收分析
在用代码分析之前,我们对内存的分配策略明确以下三点:
- 对象优先在Eden分配。当Eden没有足够空间分配时,将发起一次Minor GC
- 大对象(需要大量连续空间的java对象,如长的字符串和数组)直接进入老年代。由于新生代使用复制算法回收内存,这样可以避免在Eden和两个Survivor区之间发生大量的内存复制。
- 长期存活的对象将进入老年代。
对垃圾回收策略说明以下两点:
- 新生代GC(Minor GC):发生在新生代的垃圾收集动作,因为Java对象大多都具有朝生夕灭的特性,因此Minor GC非常频繁,一般回收速度也比较快。
- 老年代GC(Major GC/Full GC):发生在老年代的GC,出现了Major GC,经常会伴随至少一次Minor GC。由于老年代中的对象生命周期比较长,因此Major GC并不频繁,一般都是等待老年代满了后才进行Full GC,而且其速度一般会比Minor GC慢10倍以上。另外,如果分配了Direct Memory,在老年代中进行Full GC时,会顺便清理掉Direct Memory中的废弃对象。
三、并发知识与concurrent包
四、设置模式
五、反射技术知识
持续更新中。。。