构造方法
构造方法也叫构造器,用于对象的初始化。
要点:
- 通过new关键字进行调用
- 构造器虽然有返回值,但是不能定义返回值类型(返回值的类型肯定是本类),不能在构造器里使用return返回某个值
- 程序员没有定义构造器的话,编译器会自动定义一个无参的构造函数,如果已定义则编译器不会自动添加
- 构造器的方法名必须和类名一致
构造方法的重载
- 与普通方法的重载相同。
- 对于形参变量,使用就近原则,使用局部变量的。
- this修饰的是成员变量,表示创建好的对象
- 构造方法的第一句总是super(),如果程序员没有写出来,则编译器会自动加上
垃圾回收的原理和算法(了解)
Java有垃圾回收机制,而C++没有。在垃圾回收算法中,要做两件基本事情:
- 发现无用的对象
- 回收无用对象占用的内存空间
初学者需要了解两种垃圾回收的算法: - 引用计数法
堆中每一个对象都有一个引用计数,没引用依次,计数加1,被引用变量值变为null,则计数器减一,直到计数变为0,则表示变成了无用对象。
优点:算法简单
缺点:“循环引用的无用对象”无法进行识别 - 引用可达法(根搜索算法)
把所有的引用关系看作一张图,从一个节点开始,寻找对应的引用节点,找到这个节点后,继续寻找这个节点的引用节点,当所有的引用节点寻找完毕后,剩余的节点则被认为是没有被引用到的节点,就是无用节点
通用的分代回收垃圾机制
根据对象内存的存活时间或者对象大小,分为“年轻代”和“年老代”。
“年轻代”中的对象是不稳定的易产生垃圾,
而“年老代”中的对象比较稳定,不易产生垃圾。
持久代是用于存放静态文件,对垃圾回收没有显著影响。
有三个GC:
- .Minor GC 用于清除年轻代区域。Eden区满了就会触发一次
- .Major GC 用于清除老年代区域
- .Full GC 用于清除年轻代,年老代区域。成本较高,会对系统性能产生影响
JVM调优和Full GC
JVM调优主要是对Full GC的调节。
导致Full GC 有以下4个原因:
- 年老代被写满
- 持久代被写满
- System.gc()被显式调用(程序建议GC启动,不是调用GC)
- 上一次GC之后Heap的各域分配策略动态变化