java学习记录
- java初始化时有构造方法,如果没有声明构造方法,会默认创建一个构造方法
- 构造方法可以进行重载
- 重载时只能通过形式参数进行区分,把形参的顺序调换也可以形成重载
- This表示当前方法的引用
- 在构造方法中可以使用this调用另外一个构造方法,但只能调用一个构造方法,并且还要在当前构造方法的首行进行调用,否则编译器会报错
- Java中可以声明一个finalize()方法,该方法表示当前方法可以进行内存回收
- Java的垃圾回收器只对内存进行回收
- 就算声明了finalize()方法也不一定会进行回收
- System.gc()当前方法是调用终结动作
- java回收机制
引用计数:一种简单但速度慢的垃圾回收技术
每个对象都包含有一个引用计数器,当有引用连接至对象时,引用计数加一,当离开作用域或置为null时减一,这种方式有一个缺陷,如果对象之间存在循环引用,可能会出现“对象应该被回收,但引用计数却不为0”
自适应垃圾回收技术
有一种做法为停止-复制:做法是先停止程序的运行,然后将所有的存活对象从当前堆复制到另一个堆,没有复制的都是垃圾,这种方法有两个劣势:1.需要两个堆 2.复制时如果没有垃圾或只有少量垃圾,还是会进行复制,这样会浪费内存
第二种做法为标记清理:便利所有引用,找出所有的存活对象,给与标记,这个过程不会进行回收,当标记完成后才会进行回收,没有标记的都是垃圾
停止复制和标记清理可以进行自适应调用
如果所有对象都很稳定则使用标记清理,如果堆空间有很多碎片,则使用停止复制