Java源码阅读–Object

Object

在类层次结构中Object是所有类对对象的根类,并且Object是每个类的超类。

本地方法

registerNatives

private static native void registerNatives();

当包含registerNatives()方法的类被加载的时候,注册的方法就是该类所包含的除了registerNatives()方法以外的所有本地方法

一个Java程序想要调用一个本地方法需要执行两个步骤:

  1. 通过System.loadLibrary()将包含本地方法实现的动态文件加载进内存
  2. 当Java程序需要调用本地方法时,虚拟机再在加载的动态文件中定位并链接该本地方法,从而执行本地方法。

registerNatives的作用就是取代第二个步骤,让程序主动将本地方法链接到调用方,当Java程序需要调用本地方法时就可以直接调用,而不需要虚拟机再去定位并链接。

使用registerNatives方法的三点好处:

  • 通过registerNatives方法在类被加载的时候就主动将本地方法链接到调用方,比当方法被使用时再由虚拟机来定位和链接更方便有效;
  • 如果本地方法在程序运行中更新了,可以通过调用registerNative方法进行更新;
  • Java程序需要调用一个本地应用提供的方法时,因为虚拟机只会检索本地动态库,因而虚拟机是无法定位到本地方法实现的,这个时候就只能使用registerNatives方法进行主动链接。

clone

protected native Object clone() throws CloneNotSupportedException;

此方法用于拷贝对象,属于浅拷贝,调用时会创建一个新的对象,但是新的对象内的属性会使用旧的对象的属性进行填充并且旧的对象的属性如果是属性只有拷贝其内存引用

finalize

protected void finalize() throws Throwable { }

当GC确定要回收对象之前,会调用此方法(并且只会调用一次,也就是说此对象最多“复活”一次),子类覆写此方法时,需要调用基类的此方法,不然基类的finalize方法不会被执行,此方法不推荐使用, 可以使用finally代替此方法回收资源

推荐这些文章:

ONNXRuntime源码阅读(一)

在构建一个推理模型时(如NanoDet,一个目标检测模型),需要继承 BasicOrtHandler。BasicOrtHandler 的初始化函数中会调用 initialize_handler() 方法,该方法会对 Ort::Env ort_env(构建在栈上)、Ort::Session ort_session(构建在堆上)等属性进行初...

Spring源码系列导航

spring源码阅读(一)-附录例子
spring源码阅读(二)-IOC之ClassPathXmlApplicationContext
Spring源码阅读(八)-IOC之AnnotationConfigApplicationContext
spring源码阅读(三)-Spring AOP用法和理解
spring源码阅读(四)-Spri...

源码阅读四步走,这才是阅读源码的正确姿势

在《15个小技巧,助你源码阅读事半功倍》一文中,给出了15个提高源码阅读效率的小技巧。本文是《如何高效阅读源码》专题的第三篇,来聊一聊「阅读源码的具体步骤」!

在本专题第一篇,我们已经知道了不正确的阅读源码的方法,那正确的阅读源码的方式是什么呢?其实很简单,我总结为四步:

建模:基于源码进行建模

梳理:基于模型进行流程的...

文章标题:Java源码阅读–Object
文章链接:https://www.dianjilingqu.com/51171.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。
THE END
< <上一篇
下一篇>>