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,原因:
因为新生代中的对象的存货周期都很短,因此每次拷贝所需的空间都不大。
老年代:
标记-清除算法和标记-整理算法。标记-清除法是指对死亡的对象先标记再清除。标记整理法多了一个整理的步骤,即划定一段内存空间,存放死亡的对象,然后再去清除。
原文:https://www.cnblogs.com/A-PP-Z-droplet/p/13826384.html