首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >NativeIO 源码解析

NativeIO 源码解析

作者头像
zeekling
发布2025-12-21 09:13:55
发布2025-12-21 09:13:55
1200
举报

简介

NativeIO主要用于实现一些Java未实现的IO相关的接口。通过JNI的的方式直接调用底层操作系统的系统函数,提升效率和性能。

源码详解

主要分下面几部分:

  • JNI初始化,包括底层JNI代码。

初始化

核心初始化的代码是在NativeIO里面的静态代码块里面实现的,通过参数hadoop.workaround.non.threadsafe.getpwuid控制是否支持线程安全,默认是线程安全的。 初始化只会做一次,不会重复初始化,关键代码如下:

代码语言:javascript
复制
static {
      if (NativeCodeLoader.isNativeCodeLoaded()) {
        //确保只加初始化一次。
        try {
          Configuration conf = new Configuration();
          boolean workaroundNonThreadSafePasswdCalls = conf.getBoolean(
              WORKAROUND_NON_THREADSAFE_CALLS_KEY,
              WORKAROUND_NON_THREADSAFE_CALLS_DEFAULT);

          initNativePosix(workaroundNonThreadSafePasswdCalls);
          nativeLoaded = true;
          // 省略。。。。
        } catch (Throwable t) {
         // 省略。。。。
        }
      }
    }

initNativePosix详解

initNativePosix的JNI在NativeIO.c里面,函数的定义如下,其中,JNIEnv *env, jclass clazz为JNI默认需要带的参数,jboolean doThreadsafeWorkaround是函数initNativePosix的入参。

代码语言:javascript
复制
JNIEXPORT void JNICALL
Java_org_apache_hadoop_io_nativeio_NativeIO_initNative(
  JNIEnv *env, jclass clazz, jboolean doThreadsafeWorkaround) 

在initNativePosix里面核心函数有:

  • nioe_init(env):主要是初始化NativeIOException异常对象。
  • fd_init(env);初始化java.io.FileDescriptor
  • workaround_non_threadsafe_calls_init(env);初始化一个Object对象,用于实现加锁。

底层IO操作

NativeIO提供了很多底层IO操作的JNI。主要包括:

函数名称

作用

getPmdkLibPath()

获取HADOOP_PMDK_LIBRARY的路径

isPmemCheck(long address, long length)

用于判断一段内存区域是否位于真正的持久内存上

pmemMapFile(String path, long length, boolean isFileExist);

是将持久内存(Persistent Memory,PMEM)上的文件映射到进程的虚拟地址空间,调用库函数pmem_map_file

pmemUnMap(long address, long length)

pmem_unmap是持久内存编程中的一个关键函数,它就像一位负责收尾的清道夫,安全地解除之前建立的内存映射关系,并确保数据的持久化。

其他实现可自行查看NativeIO.c,基本都是对操作系统函数的封装,不再重复列出用途。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-12-13/,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 源码详解
    • 初始化
      • initNativePosix详解
    • 底层IO操作
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档