`
leonzhx
  • 浏览: 786084 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Zz Java 中使用内存映射文件需要考虑的 10 个问题

    博客分类:
  • Java
阅读更多

java中的内存映射IO和内存映射文件是什么?

 

内存映射文件非常特别,它允许Java程序直接从内存中读取文件内容,通过将整个或部分文件映射到内存,由操作系统来处理加载请求和写入文件,应用只需要和内存打交道,这使得IO操作非常快。加载内存映射文件所使用的内存在Java堆区之外。Java编程语言支持内存映射文件,通过java.nio包和MappedByteBuffer 可以从内存直接读写文件。

 

内存映射的优缺点

 

内存映射IO最大的优点可能在于性能,这对于建立高频电子交易系统尤其重要。内存映射文件通常比标准通过正常IO访问文件要快。另一个巨大的优势是内存映 射IO允许加载不能直接访问的潜在巨大文件 。经验表明,内存映射IO在大文件处理方面性能更加优异。尽管它也有不足——增加了页面错误的数目。由于操作系统只将一部分文件加载到内存,如果一个请求 页面没有在内存中,它将导致页面错误。同样它可以被用来在两个进程中共享数据。

 

支持内存映射IO的操作系统

 

大多数主流操作系统比如Windows平台,UNIX,Solaris和其他类UNIX操作系统都支持内存映射IO和64位架构,你几乎可以将所有文件映射到内存并通过JAVA编程语言直接访问。

Java的内存映射IO的要点

 

如下为一些你需要了解的java内存映射要点:

 

    1)  java通过java.nio包来支持内存映射IO。

      2)  内存映射文件主要用于性能敏感的应用,例如高频电子交易平台。

      3)  通过使用内存映射IO,你可以将大文件加载到内存。

      4)  内存映射文件可能导致页面请求错误,如果请求页面不在内存中的话。

      5)  映射文件区域的能力取决于于内存寻址的大小。在32位机器中,你不能访问超过4GB或2 ^ 32(以上的文件)。

      6)  内存映射IO比起Java中的IO流要快的多。

    7)  加载文件所使用的内存是Java堆区之外,并驻留共享内存,允许两个不同进程共享文件。

      8)  内存映射文件读写由操作系统完成,所以即使在将内容写入内存后java程序崩溃了,它将仍然会将它写入文件直到操作系统恢复。

      9)  出于性能考虑,推荐使用直接字节缓冲而不是非直接缓冲。

      10)  不要频繁调用MappedByteBuffer.force()方法,这个方法意味着强制操作系统将内存中的内容写入磁盘,所以如果你每次写入内存映射文件都调用force()方法,你将不会体会到使用映射字节缓冲的好处,相反,它(的性能)将类似于磁盘IO的性能。

      11)  万一发生了电源故障或主机故障,将会有很小的机率发生内存映射文件没有写入到磁盘,这意味着你可能会丢失关键数据。

    好吧,小伙伴们,就是这些。内存映射IO是高级程序员特别是对于用Java编写高性能应用的程序员来说是一个重要的概念。 如果你喜欢这些建议的话,你可以到我的博客http://javarevisited.blogspot.com 来浏览更多类似文章。

谢谢!

分享到:
评论

相关推荐

    文件上传下载需要的jar包 java文件上传下载

    7. **性能优化**: 文件上传和下载可能涉及大文件处理,因此要考虑性能优化,如使用流处理避免内存溢出,使用断点续传支持大文件分块上传和下载,以及通过缓存提高文件访问速度。 8. **错误处理与日志记录**: 为确保...

    java版ckfinder文件管理Demo

    这个"java版ckfinder文件管理Demo"显然是一个示例项目,用于展示如何在Java环境中使用CKFinder。 CKFinder是一个开源的文件管理器,它支持多种语言,并提供了丰富的API,可以方便地集成到各种Web应用中。其核心功能...

    Aspose.cad19.5+dwg使用Java转pdf

    需要注意的是,Aspose.cad是一个商业库,虽然提供了试用版,但在商业项目中使用可能需要购买许可证。此外,转换过程可能需要消耗一定的系统资源,因此在处理大量文件或性能敏感的场景时,应考虑优化代码执行效率。 ...

    阿里巴巴java笔试zz.

    以上问题主要涉及逻辑推理、决策分析、问题解决等软技能,这些技能在Java开发中也是不可或缺的,比如在解决编程难题、设计算法、分析用户需求等方面都需要用到。虽然题目本身不直接测试Java编程技术,但这些能力是...

    深入Java核心 Java内存分配原理精讲

    不过需要注意的是,在Java 8之后,永久代已经被元空间(Metaspace)所取代,这部分内存不在Java堆中,而是使用本地内存。 #### 三、常量池 在类加载阶段,每个类都会有一个与之对应的常量池(Constant Pool),用来...

    base zz zz zz zz

    base zz zz zz zz zz base zz zz zz zz zz base zz zz zz zz zz base zz zz zz zz zz

    zz.rar_JAVA俄罗斯方块

    线程间的同步和通信也是需要考虑的问题,例如使用synchronized关键字或wait/notify机制防止竞态条件。 8. **状态管理**:游戏状态的管理非常重要,包括游戏开始、暂停、结束等状态的切换。这通常通过设置全局变量或...

    java中四个核心思想

    Java作为一种广泛使用的编程语言,在其设计与实现中蕴含了四大核心思想,这四个核心思想不仅体现了Java的设计理念,也决定了Java程序的运行方式。接下来,我们将详细探讨这四个核心思想:Java虚拟机、类装载器的体系...

    springboot+vue前后端分离 实现超大文件分块上传

    本示例项目"springboot+vue前后端分离 实现超大文件分块上传"提供了一个高效且实用的解决方案,将Java后端框架Spring Boot与前端Vue.js及Element UI组件库结合,实现了大文件的分块上传功能。下面我们将详细探讨这个...

    ZZ_MODIFIED_GEEBINF.ENS.zip endnote的样式文件

    标题中的“ZZ_MODIFIED_GEEBINF.ENS.zip”是一个压缩包文件,主要包含一个名为“ZZ_MODIFIED_GEEBINF.ENS”的文件。这个文件是一种特殊格式,用于定义EndNote的引用样式。EndNote是一款强大的文献管理软件,广泛应用...

    Zz: java 线程池设计思想

    本文将深入探讨Java线程池的设计原理、核心组件以及如何在实际开发中合理使用。 线程池的实现主要依赖于Java的`java.util.concurrent`包中的`ExecutorService`接口和`ThreadPoolExecutor`类。`ExecutorService`是...

    聊天工具的java开发 超越QQ 天翔ZZ

    本文将深入探讨使用Java语言开发聊天工具的关键知识点,结合"天翔ZZ"这个项目,我们将分析服务器程序和客户端程序的设计与实现。 首先,Java作为跨平台的编程语言,因其强大的网络编程能力而成为开发聊天工具的理想...

    利用 Best Fit 算法解决物流3D bin packing问题 Java实现

    1. **空间优化**:可以考虑使用数据结构如`BitSet`或自定义位数组,表示每个箱子的状态,以节省内存。 2. **缓存优化**:对于频繁的箱子查找操作,可以使用缓存机制如`HashMap`,将箱子的体积和索引关联起来,加快...

    ZZ_MODIFIED_GEEBINF.ENS.zip

    "ZZ_MODIFIED_GEEBINF.ENS"文件则是实际的EndNote样式文件,用户可以直接在EndNote程序中导入这个文件,以便在自己的文献库中使用。导入后,用户就可以按照这个样式格式化自己的参考文献,确保它们符合论文要求的...

    解决java.security.InvalidKeyException: Illegal key size

    为了克服这个问题,你需要更新或替换Java的本地策略文件。在Java安装目录的`%JAVA_HOME%\jre\lib\security`路径下,有两个关键的文件:`local_policy.jar`和`US_export_policy.jar`。这两个文件定义了Java运行时环境...

    java实现logistic回归算法

    在Java中实现Logistic回归算法,我们需要理解其基本原理、步骤以及如何利用Java编程语言来构建模型。 1. **Logistic回归的基本原理** Logistic回归的核心是将线性回归的结果通过一个非线性的函数(Logistic函数,...

    10种java性能优化方案.docx

    本文将详细介绍10种Java性能优化策略,并重点解析文档中提到的几个关键点。 #### 二、hashCode() 方法优化 1. **背景**:`hashCode()` 方法在Java中用于快速查找对象。当对象存储在哈希表中时,例如`HashMap`,其...

    使用RandomAccessFie分段写大文件,创建多线程程席、通讨多线程分段读取大文件并分段写入到新文件

    总结,本教程介绍了如何在Java中使用`RandomAccessFile`和多线程技术处理大文件。通过理解这些概念和技术,开发者可以编写出更高效的文件处理程序,尤其是对于处理大量数据的场景。记得在实践中不断测试和优化,以...

    zz牌类小游戏24点

    "zz牌类小游戏24点" 是一个基于Java编程语言开发的桌面游戏,其核心玩法是24点游戏。24点游戏是一种流行的心算游戏,玩家需要利用四张给出的扑克牌上的数字,通过加、减、乘、除运算,使得结果等于24。这个游戏旨在...

    Java处理Excel,Word,网页数据抓取

    在IT行业中,Java是一种广泛应用的编程语言,尤其在处理数据方面表现出强大的能力。...在实际操作中,我们可能需要解压这个文件,然后使用Java的压缩/解压缩库,如Java的`java.util.zip`包,来处理这些数据。

Global site tag (gtag.js) - Google Analytics