notifyAll:唤醒在该对象上所有等待的线程;
public final native void wait(long timeout) throws InterruptedException; public final native void notify(); public final native void notifyAll();注意这里:native关键字修饰的方法,即调用的是原生函数,也就是常说的基于C/C++实现的本地方法,以此提高和系统层面的交互效率降低交互复杂程度。
5、clone
返回当前对象的拷贝:
protected native Object clone() throws CloneNotSupportedException;关于该方法的细节规则极度复杂,要注意下面几个核心点:
对象必须实现Cloneable接口才可以被克隆;
数据类型:值类型,String类型,引用类型;
深浅拷贝的区别和与之对应的实现流程;
在复杂的包装类型中,组合的不同变量类型;
6、finalize
当垃圾收集器确认该对象上没有引用时,会调用finalize方法,即清理内存释放资源:
protected void finalize() throws Throwable { }通常子类不会覆盖该方法,除非在子类中有一些其他必要的资源清理动作。
三、生命周期1、作用域
在下面main方法执行结束之后,无法再访问Each05Obj01的实例对象,因为对象的引用each05丢失:
public class Each05 { public static void main(String[] args) { Each05Obj01 each05 = new Each05Obj01 (99) ; System.out.println(each05); } }这里就会存在一个问题,引用丢失导致对象无法访问,但是对象在此时可能还是存在的,并没有释放内存的占用。
2、垃圾回收机制
Java通过new创建的对象会在堆中开辟内存空间存储,当对象失去所有引用时会被标记为垃圾对象,进而被回收;
这里涉及下面几个关键点:
Jvm中垃圾收集器会监控创建的对象 ;
当判断对象不存在引用时,会执行清理动作;
完成对象清理后会重新整理内存空间;
这里存在一个很难理解的概念,即对象不存在引用的判断,也就是常说的可达性分析算法:基于对象到根对象的引用链是否可达来判断对象是否可以被回收;GC-Roots根引用集合,也可以变相理解为存活对象的集合。(详见JVM系列)
通过Object对象的分析,结合Java方方面面的机制和设计,可以去意会一些所谓的编程思想。
同系列:
四、源代码地址 GitEE·地址 https://gitee.com/cicadasmile/java-base-parent Wiki·地址 https://gitee.com/cicadasmile/butte-java-note/wikis