理解Java中对象基础Object类 (2)

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

理解Java中对象基础Object类

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzzgps.html