1. 类的初始化过程
1) 父类的静态变量, 代码块的初始化;
2) 静态变量, 代码块的初始化;
2. 对象的初始化过程
1) 父类对象的初始化;
2) 普通成员, 构造代码块初始化;
3) 调用构造器
3. 方法的重写
++++++++++++++++++MyBatis+++++++++++++++++++
1.MyBatis 中, 实体类的属性名和表中的字段名对不上, 怎么办?
1) 写 sql 语句的时候给字段起别名
2) 在 mabatis-config.xml 配置文件中的 setting 标签里开启驼峰命名规则
3) 在映射文件中的 < select > 里定义 resultMap 属性, 然后指定字段属性和 bean 的属性的对应关系
- ++++++++++++++Linux++++++++++++++++++++++
- ++++++++++++JVM++++++++++++++++++++
- 1.GC(垃圾回收机制)
堆被分为新生代区, 老年代区和永久代 (存放类加载器),GC 使用分代回收算法完成前两个代中的垃圾回收, 所谓的分代回收算法, 是指: 新生代使用复制算法完成 MinorGC, 老年代使用标记 - 整理算法完成 fullGC(包含一次 major GC 和 minorGC).
在什么时候进行 GC?
1) 手动调用 system.gc(), 一般会进行 fullGC;
2)minorGC:
新生代被分为 Eden 区, From survive 区和 To survive 区. 刚开始的时候只有 Eden 区和 from 区存放对象, 当满了之后, 就触发一次 minorGC,Eden 区和 from 区存活的对象被拷贝到
to 区, 然后 Eden 区和 from 区清空. 紧接着, to 区变为 from 区, 之前的 from 区变为 to 区, 重复上述过程. 直到达到 JVM 中的设置的年龄阈值 (通过 MaxTenuringThreshold 参数决定, 默认 15 次).
3)majorGC:
当新生代中年龄到达阈值的对象被传送到老年代 或者 新生代中 to 区放不下的对象被传送到老年代 时, 如果系统判断老年代内存空间不足, 就会进行一次 majorGC.
对谁进行 GC?
对死亡的对象进行 GC.
判断对象死亡的依据是: 从一系列被称为 GC roots 的对象出发, 依次遍历被引用的对象, 构成一个引用链, 如果 A 对象没有出现在引用链上, 则判定 A 对象死亡.
能够充当 GC roots 的对象:
1) 虚拟机栈引用的对象;
2) 方法区中静态变量引用的对象;
3) 方法区中常量引用的对象;
4) 本地方法栈中 JNI(即 native 方法) 引用的对象.
当清除对象时, 虚拟机会先判断对象的 finalize() 方法是否执行且被覆盖, 如果没有执行且被覆盖, 那就把对象放入一个名为 F-Queue 的队列中, 在对象清除线程中对该队列进行清除.
否则, 就直接进行清除.
怎么进行 GC?
新生代:
新生代使用复制算法进行 GC, 原因:
因为新生代中的对象的存货周期都很短, 因此每次拷贝所需的空间都不大.
老年代:
标记 - 清除算法和标记 - 整理算法. 标记 - 清除法是指对死亡的对象先标记再清除. 标记整理法多了一个整理的步骤, 即划定一段内存空间, 存放死亡的对象, 然后再去清除.
来源: http://www.bubuko.com/infodetail-3683457.html