jjzjj

MappedByteBuffer

全部标签

java - MappedByteBuffer 滑动窗口

有什么方法可以让MappedByteBuffer在文件上有一个滑动窗口。我有一个非常大的文件(20GB),但我一次只想制作100MB。我试过这只是丢弃旧缓冲区并从channel创建一个新缓冲区,但这会占用内存,因为旧缓冲区似乎没有被重用。有什么想法吗? 最佳答案 您可以强制旧缓冲区立即释放它的内存((DirectBuffer)buffer).cleaner().clean();免责声明:我只将它用于Sun/Oracle/OpenJDKJava6update18及更高版本。它可能无法在旧版本或其他平台上使用或无法正常工作。谢谢@EJP

Java MappedByteBuffer.isLoaded()

在我看来MappedByteBuffer.isLoaded()在Windows上始终返回false。当我在BSDUnix上测试时,我使用相同的测试数据得到true。我应该担心吗?无论我使用多大的数据,我基本上都无法让isLoaded()在Windows上返回true。这是我的测试代码供引用:importjava.io.FileNotFoundException;importjava.io.IOException;importjava.io.RandomAccessFile;importjava.nio.MappedByteBuffer;importjava.nio.channels.F

java - 在内存有限的系统上写入大文件时,如何避免 mapFailed() 错误

我刚刚在我的opensrc库代码中遇到了一个错误,该错误分配了一个大缓冲区来修改一个大的flac文件,该错误只发生在使用Java1.8.0_7425.74-b0232bit的具有3Gb内存的旧PC机器上原来我只是分配一个缓冲区ByteBufferaudioData=ByteBuffer.allocateDirect((int)(fc.size()-fc.position()));但有一段时间我把它作为MappedByteBuffermappedFile=fc.map(MapMode.READ_WRITE,0,totalTargetSize);我的(错误)理解是映射缓冲区使用的内存比直接

java - Java中的内存映射大文件

是否可以在Java中对大文件(多个GB)进行内存映射?FileChannel的这个方法看起来很有前途:MappedByteBuffermap(FileChannel.MapModemode,longposition,longsize)position和size都允许64位值——到目前为止,一切顺利。MappedByteBuffer,然而,只提供了32位位置的方法(get(intindex),position(intnewPosition)等.),这似乎暗示我无法映射大于2GB的文件。我怎样才能绕过这个限制? 最佳答案 看看Using

java - 为什么 MappedByteBuffer 的 array() 方法不起作用?

我是Java的新手,正在尝试使用Mathematica的Java接口(interface)访问使用内存映射的文件(希望提高性能)。我的Mathematica代码(我相信)等同于以下Java代码(基于this):importjava.io.FileInputStream;importjava.nio.MappedByteBuffer;importjava.nio.channels.FileChannel;publicclassMainClass{privatestaticfinalintLENGTH=8*100;publicstaticvoidmain(String[]args)thro

Java MappedByteBuffer.get() 出奇的慢

我试图了解我从MappedByteBuffer类的get()方法获得的性能是否正常。我的代码如下:privatebyte[]testBuffer=newbyte[4194304];privateFilesdcardDir,filepath;privateFileInputStreaminputStream;privateFileChannelfileChannel;privateMappedByteBuffermappedByteBuffer;//ObtaintherootfolderoftheexternalstoragesdcardDir=Environment.getExtern

java - 内存映射文件的性能/稳定性 - Native 或 MappedByteBuffer - vs. plain ol' FileOutputStream

我支持使用平面文件(纯文本)实现持久性的遗留Java应用程序。由于应用程序的性质,这些文件的大小每天可以达到100MB,而应用程序性能的限制因素通常是文件IO。目前,该应用程序使用普通的java.io.FileOutputStream将数据写入磁盘。最近,我们有几位开发人员断言,使用以native代码(C/C++)实现并通过JNI访问的内存映射文件将提供更高的性能。然而,FileOutputStream已经为其核心方法(即write(byte[]))使用了本地方法,因此在没有硬数据或至少没有轶事证据的情况下,它似乎是一个脆弱的假设。我有几个问题:这个说法是真的吗?内存映射文件总是提供比

java - 如何在两个 JVM 实例之间共享内存?

我在JVM(Scala)中构建了一个巨大的图形,我想重复使用它来调整算法。我不想每次都从磁盘重新加载它。有没有办法让它位于一个JVM中,同时从另一个正在开发算法的地方连接? 最佳答案 将图形保存到磁盘,然后使用MappedByteBuffer将其映射到内存中.两个进程应该使用相同的内存,这将与页面缓存共享。 关于java-如何在两个JVM实例之间共享内存?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

java - 为什么 mmap()(内存映射文件)比 read() 快

最近在研究JavaNIO的MappedByteBuffer。我读过一些关于它的帖子,所有帖子都提到“mmap()比read()快”在我的结论中:我对待MappedByteBuffer==MemoryMappedFile==mmap()read()必须通过磁盘文件->内核->应用程序读取数据,因此它具有上下文切换和缓冲区复制他们都说mmap()的复制或系统调用比read()少,但据我所知,它还需要在您第一次访问文件数据时从磁盘文件中读取。所以第一次读取:虚拟地址->内存->页面错误->磁盘文件->内核->内存。除了你可以随机访问它,最后3个步骤(磁盘文件->内核->内存)与read()完

java - 为什么 mmap()(内存映射文件)比 read() 快

最近在研究JavaNIO的MappedByteBuffer。我读过一些关于它的帖子,所有帖子都提到“mmap()比read()快”在我的结论中:我对待MappedByteBuffer==MemoryMappedFile==mmap()read()必须通过磁盘文件->内核->应用程序读取数据,因此它具有上下文切换和缓冲区复制他们都说mmap()的复制或系统调用比read()少,但据我所知,它还需要在您第一次访问文件数据时从磁盘文件中读取。所以第一次读取:虚拟地址->内存->页面错误->磁盘文件->内核->内存。除了你可以随机访问它,最后3个步骤(磁盘文件->内核->内存)与read()完
12