Object类代码结构

Object

Object是所有类的父类。

方法结构如下

在这里插入图片描述

一些不知道的方法

private static native void registerNatives();

* JNI机制
* 这里定义了一个 native 方法 registerNatives(),它没有方法体。
* native 关键字表示这个方法的实现是由本地代码
* (通常是 C 或 C++ 代码)提供的,而不是由 Java 提供。
* 该方法通常通过 Java Native Interface(JNI)调用本地代码。
*/

protected native Object clone() throws CloneNotSupportedException;

解释:

*子类,使用时必须实现 Cloneable 接口,并且它的拷贝时浅拷贝*

protected void finalize() throws Throwable { }

解释:

释放系统资源 或 执行其他清理任务
* 在gc的时候会被调用
*
* finalize()在现代Java开发中已经被视为过时和不推荐使用的方式。
* JVM中对它的调用时机不可控,可能导致资源无法及时释放。
* 在Java 9及以后版本中,Java更推荐使用try-with-resources或显式资源管理(如close()方法)
* 来管理资源,而不依赖于finalize()。
*
* 总结来说,finalize()是一个被设计用于资源清理的机制,
* 但由于其不可预测性和性能问题,逐渐被更好的替代方案取代。

JNI机制是什么?

JNI(Java Native Interface,Java本地接口)是一种允许Java代码与其他编程语言(通常是C或C++)编写的本地代码进行交互的机制。它是Java平台的一个重要组成部分,提供了一种调用和访问本地代码库、系统资源或者是无法用纯Java实现的功能的途径。

JNI的主要特点和作用

  1. 跨语言互操作性:
    • JNI使得Java程序可以调用其他编程语言(主要是C和C++)编写的本地函数,反之,本地代码也可以调用Java代码。这在需要与操作系统的底层功能或现有的本地库交互时尤为有用。
  2. 平台相关性:
    • Java是一种跨平台的编程语言,通过JNI调用本地代码会打破这种跨平台性,因为本地代码是针对特定平台(操作系统和硬件)的。调用本地代码通常需要编译不同的二进制文件来适应不同的操作系统,如Windows、Linux、macOS等。
  3. 性能提升:
    • 使用JNI可以在某些场景下提高性能,尤其是在需要频繁使用低级别系统功能或需要执行高效的计算时。C和C++等语言在某些情况下比Java具有更高的执行效率。
  4. 扩展功能:
    • 有时,某些操作系统特有的功能或硬件相关的操作无法直接用Java实现,JNI可以用来扩展Java程序的功能,调用系统API或硬件设备驱动程序。

JNI工作机制

  1. 加载本地库:

    • 使用System.loadLibrary()方法加载一个动态链接库(如.dll.so.dylib),这些库通常是用C或C++编写并编译的。
    
    System.loadLibrary("myNativeLib");
  2. 声明本地方法:

    • 在Java中,声明本地方法时使用native关键字,表明该方法没有用Java实现,而是由本地代码提供。
    
    public class MyClass {public native void myNativeMethod();
    }
  3. C/C++实现:

    • 对应的本地方法需要在C或C++中实现。使用工具javah生成Java类对应的C/C++头文件,或者通过手动映射,确保方法签名匹配。
    
    #include <jni.h>
    JNIEXPORT void JNICALL Java_MyClass_myNativeMethod(JNIEnv *env, jobject obj) {// 实现具体的功能
    }
  4. 调用本地方法:

    • 一旦本地库加载完成并且本地方法实现了,Java代码就可以像调用普通Java方法一样调用本地方法。

JNI的主要组成部分

  1. JNIEnv
    • JNIEnv是一个指向结构体的指针,它提供了一系列用于操作Java对象、调用Java方法、以及处理异常的函数。每个本地方法的第一个参数通常是JNIEnv *env
  2. jobject
    • jobject是对Java对象的引用,C/C++代码可以通过它操作Java对象,如调用对象的方法或访问其属性。
  3. JNIEXPORTJNICALL
    • 这些宏是JNI函数声明中的标准修饰符,JNIEXPORT用于表明函数是导出的(供Java调用),而JNICALL定义调用约定。
  4. 类型签名:
    • JNI使用一种特定的方式表示Java中的数据类型和方法签名。例如,I表示intLjava/lang/String;表示String类。

JNI常见用途

  1. 与操作系统交互:
    • 通过JNI可以调用操作系统特有的API,执行文件操作、访问硬件设备、调用系统级服务等。
  2. 调用已有的本地库:
    • 有些已有的库(如硬件驱动程序、优化算法库)是用C/C++编写的,Java程序可以通过JNI调用这些库。
  3. 提高性能:
    • 某些计算密集型的任务,尤其是需要大量数学运算或实时处理的场景(如音视频处理、图形渲染),可以通过JNI调用C/C++代码来提高性能。
  4. 访问特定硬件:
    • JNI可以直接访问特定平台上的硬件,如传感器、摄像头等设备,这对于嵌入式系统或移动设备编程尤为重要。

JNI的局限性

  • 复杂性: JNI的使用增加了开发的复杂性,Java和C/C++之间的互操作代码比较难写、难调试。
  • 跨平台问题: 本地代码是平台相关的,需要为不同的平台分别编译二进制文件,破坏了Java跨平台的优点。
  • 安全性问题: 本地代码可能引入安全漏洞,如内存泄漏、缓冲区溢出等问题,Java本身对这些问题有很好的保护,但本地代码需要手动管理。

总结

JNI是一种强大的工具,允许Java应用程序调用和交互C/C++等本地代码。它在需要提高性能、调用系统资源或与现有本地库集成时发挥重要作用,但同时也带来了复杂性和跨平台挑战。在实际开发中,除非必要,通常更倾向于用纯Java或第三方Java库来解决问题,而JNI适合需要本地代码支持的特定场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1542607.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【Pytorch】一文快速教你高效使用torch.no_grad()

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 博主简介 博主致力于嵌入式、Python、人工智能、C/C领域和各种前沿技术的优质博客分享&#xff0c;用最优质的内容带来最舒适的…

BERT的代码实现

目录 1.BERT的理论 2.代码实现 2.1构建输入数据格式 2.2定义BERT编码器的类 2.3BERT的两个任务 2.3.1任务一&#xff1a;Masked Language Modeling MLM掩蔽语言模型任务 2.3.2 任务二&#xff1a;next sentence prediction 3.整合代码 4.知识点个人理解 1.BERT的理论 B…

Linux 静态库与动态库的制作与使用

在Linux中&#xff0c;库library是一组函数和资源的集合&#xff0c;他们可以被不同的程序共享和使用&#xff0c;库的主要目的是代码重用&#xff0c;减少内存占用&#xff0c;并简化程序的维护。 Linux操作系统支持的函数库分为&#xff1a;静态库和动态库。 静态库&#xf…

【线程池】Tomcat线程池

版本&#xff1a;tomcat-embed-core-10.1.8.jar 前言 最近面试被问到 Tomcat 线程池&#xff0c;因为之前只看过 JDK 线程池&#xff0c;没啥头绪。在微服务横行的今天&#xff0c;确实还是有必要研究研究 Tomcat 的线程池 Tomcat 线程池和 JDK 线程池最大的不同就是它先把最…

二分+优先队列例题总结(icpc vp+牛客小白月赛)

题目 思路分析 要求输出最小的非负整数k&#xff0c;同时我们还要判断是否存在x让整个序列满足上述条件。 当k等于某个值时&#xff0c;我们可以得到x的一个取值区间&#xff0c;若所有元素得到的x的区间都有交集(重合)的话,那么说明存在x满足条件。因为b[i]的取值为1e9&…

Maven-一、分模块开发

Maven进阶 文章目录 Maven进阶前言创建新模块向新模块装入内容使用新模块把模块部署到本地仓库补充总结 前言 分模块开发可以把一个完整项目中的不同功能分为不同模块管理&#xff0c;然后模块间可以相互调用&#xff0c;该篇以一个SSM项目为目标展示如何使用maven分模块管理。…

没错,我给androidx修了一个bug!

不容易啊&#xff0c;必须先截图留恋&#x1f601; 这个bug是发生在xml中给AppcompatTextView设置textFontWeight&#xff0c;但是却无法生效。修复bug的代码也很简单&#xff0c;总共就几行代码&#xff0c;但是在找引起这个bug的原因和后面给androidx提pr却花了很久。 //App…

云手机的海外原生IP有什么用?

在全球数字化进程不断加快的背景下&#xff0c;企业对网络的依赖程度日益加深。云手机作为一项创新的工具&#xff0c;正逐步成为企业优化网络结构和全球业务拓展的必备。尤其是云手机所具备的海外原生IP功能&#xff0c;为企业进入国际市场提供了独特的竞争优势。 什么是海外原…

DNF Decouple and Feedback Network for Seeing in the Dark

DNF: Decouple and Feedback Network for Seeing in the Dark 在深度学习领域&#xff0c;尤其是在低光照图像增强的应用中&#xff0c;RAW数据的独特属性展现出了巨大的潜力。然而&#xff0c;现有架构在单阶段和多阶段方法中都存在性能瓶颈。单阶段方法由于域歧义&#xff0c…

如何使用 3 种简单的方法将手写内容转换为文本

手写比文本更具艺术性&#xff0c;这就是许多人追求手写字体的原因。有时&#xff0c;我们必须将手写内容转换为文本&#xff0c;以便于存储和阅读。本文将指导您如何轻松转换它。 此外&#xff0c;通常以扫描的手写内容编辑文本很困难&#xff0c;但使用奇客免费OCR&#xff…

视觉距离与轴距离的转换方法

1.找一个明显的参照物&#xff0c;用上方固定的相机拍一下。保存好图片 2.轴用定长距离如1mm移动一下。 3.再用上相机再取一张图。 4.最后用halcon 将两图叠加 显示 效果如下 从图上可以明显的看出有两个图&#xff0c;红色标识的地方。 这时可以用halcon的工具画一个长方形…

Cesium 绘制可编辑点

Cesium Point点 实现可编辑的pointEntity 实体 文章目录 Cesium Point点前言一、使用步骤二、使用方法二、具体实现1. 开始绘制2.绘制事件监听三、 完整代码前言 支持 鼠标按下 拖动修改点,释放修改完成。 一、使用步骤 1、点击 按钮 开始 绘制,单击地图 绘制完成 2、编辑…

误差评估,均方误差、均方根误差、标准差、方差

均方根误差 RMSE/RMS 定义 RMSE是观察值与真实值偏差的平方&#xff0c;对于一组观测值 y i y_i yi​ 和对应的真值 t i t_i ti​ R M S E 1 n ∑ i 1 n ( y i − t i ) &#xff0c;其中n是观测次数 RMSE\sqrt{\frac1n \sum_{i1}^n (y_i-t_i)} \text{&#xff0c;其中n是…

2.个人电脑部署MySQL,傻瓜式教程带你拥有个人金融数据库!

2.个人电脑部署MySQL&#xff0c;傻瓜式教程带你拥有个人金融数据库&#xff01; ‍ 前边我们提到&#xff0c;比较适合做量化投研的数据库是MySQL&#xff0c;开源免费。所以今天我就写一篇教程来教大家如何在自己的环境中部署MySQL。 在不同的设备或系统中安装MySQL的步骤…

局部凸空间及其在算子空间中的应用之四——归纳极限空间2

局部凸空间及其在算子空间中的应用之四——归纳极限空间2 前言一、归纳极限拓扑中极限的含义总结 数学的真理是绝对的&#xff0c;它超越了时间和空间。——约翰冯诺伊曼 前言 在上一篇文章中&#xff0c;我们讨论了归纳极限拓扑的概念和与连续线性算子有关的一个重要结论。认…

为什么编程很难?

之前有一个很紧急的项目&#xff0c;项目中有一个bug始终没有被解决&#xff0c;托了十几天之后&#xff0c;就让我过去协助解决这个bug。这个项目是使用C语言生成硬件code&#xff0c;是更底层的verilog&#xff0c;也叫做HLS开发。 项目中的这段代码并不复杂&#xff0c;代码…

postman控制变量和常用方法

1、添加环境&#xff1a; 2、环境添加变量&#xff1a; 3、配置不同的环境&#xff1a;local、dev、sit、uat、pro 4、 接口调用 5、清除cookie方法&#xff1a; 6、下载文件方法&#xff1a;

calibre-web报错:File type isn‘t allowed to be uploaded to this server

calibre-web报错&#xff1a;File type isnt allowed to be uploaded to this server 最新版的calibre-web在Upload时候会报错&#xff1a; File type isnt allowed to be uploaded to this server 解决方案&#xff1a; Admin - Basic Configuration - Security Settings 把…

2024PDF内容修改秘籍:工具推荐与技巧分享

现在我们使用PDF文档的频率越来越高了&#xff0c;很多时候收到的表格之类的资料也都是PDF格式的&#xff0c;如果进行转换之后编辑再转换为PDF格式还是有点麻烦的&#xff0c;那么pdf怎么编辑修改内容呢&#xff1f;这篇文章我将介绍几款可以直接编辑PDF文件的工具来提高我们的…

鸿蒙next 带你玩转鸿蒙拍照和相册获取图片

前言导读 各位网友和同学&#xff0c;相信大家在开发app的过程中都有遇到上传图片到服务器的需求&#xff0c;我们一般是有两种方式&#xff0c;拍照获取照片或者调用相册获取照片&#xff0c;今天我们就分享一个小案例讲一下这两种情况的实现。废话不多说我们正式开始 效果图…