android ByteBuffer.allocateDirect()造成OutOfMemoryError
最近用一个开源的控件,碰到ByteBuffer.allocateDirect()的时候OutOfMemoryError的问题,偶尔调用没问题,如果频繁的调用这个控件就会发生OutOfMemoryError,造成OutOfMemoryError的原因很简单ByteBuffer.allocateDirect()申请的内存没有释放,再申请的时候就不停的堆积,直到OutOfMemoryError,在网上找了很久都没有找到怎么释放ByteBuffer.allocateDirect()申请的内存,不过查到ByteBuffer.allocateDirect()申请的内存会由java的垃圾回收机制自动释放,可java的垃圾回收啥时候会释放根本不知道,没办法,剑走偏锋
while(true) {try {mByteBuffer = ByteBuffer.allocateDirect(newSize);break;} catch (OutOfMemoryError oome) {System.gc();} }
这样,当内存被释放后就能创建成功了,因为不知道什么时候会释放内存,所以也不知道这个循环会执行多少次,这就会有个等待时间了,System.gc()纯粹是个心理安慰
最后这个循环只能写在子线程里
android ByteBuffer.allocateDirect()造成OutOfMemoryError相关推荐
- ByteBuffer.allocateDirect 与 allocate 方法
一.首先是JavaDocument: 直接与非直接缓冲区 字节缓冲区要么是直接的,要么是非直接的.如果为直接字节缓冲区,则 Java 虚拟机会尽最大努力直接在此缓冲区上执行本机 I/O 操作.也就是说 ...
- ByteBuffer.allocateDirect函数分析
在NIO中,有两种分配字节的方法: 在堆中初始缓冲区 public static ByteBuffer allocate(int capacity) {if (capacity < 0)thro ...
- ByteBuffer.allocate()/ByteBuffer.allocateDirect()/JNI DETECTED ERROR IN APPLICATION: jarray was NULL
在Java中当我们要对数据进行更底层的操作时,一般是操作数据的字节(byte)形式,这时经常会用到ByteBuffer这样一个类.ByteBuffer提供了两种静态实例方式: public stati ...
- android byteBuffer的使用
今天,讲讲android内byteBuffer的使用. 缓冲区(Buffer)就是在内存中预留指定大小的存储空间用来对输入/输出(I/O)的数据作临时存储,这部分预留的内存空间就叫做缓冲区: 使用缓冲 ...
- java allocatedirect_java – ByteBuffer.allocateDirect()和MappedByteBuffer.load()之间的区别
我试图通过使用MappedByteBuffer对特定文件进行内存映射来实现两个或多个JVM之间的一种共享缓存.从规范我看到当我们使用MappedByteBuffer.load()它应该将数据加载到直接 ...
- java byte 释放内存_java java.nio.ByteBuffer.allocateDirect 导致内存泄露
java能够经过java.nio.ByteBuffer.allocateDirect(capacity)直接运用non java heap(java堆外)的内存 . 一.运用意图: 1.拓荒数据缓冲区 ...
- ByteBuffer.allocateDirect()
ByteBuffer.allocate()与ByteBuffer.allocateDirect()方法的区别. https://blog.csdn.net/seebetpro/article/deta ...
- ByteBuffer.allocate()与ByteBuffer.allocateDirect()方法的区别
在Java中当我们要对数据进行更底层的操作时,一般是操作数据的字节(byte)形式,这时经常会用到ByteBuffer这样一个类.ByteBuffer提供了两种静态实例方式: public stati ...
- ByteBuffer.allocate()与ByteBuffer.allocateDirect()方法的区别。
在Java中当我们要对数据进行更底层的操作时,一般是操作数据的字节(byte)形式,这时经常会用到ByteBuffer这样一个类.ByteBuffer提供了两种静态实例方式: public stati ...
最新文章
- ImportError: Failed to import pydot. You must install pydot and graphviz for `pydotprint` to work.
- 如何把Linux工具里的“军刀”BusyBox移植到RT-Thread Smart?
- c语言popen函数多线程,关于多线程:多线程环境中的Python-Subprocess-Popen行为不一致...
- 最小生成树原理及Kruskal算法的js实现
- iphone4 Safari实现滚动条功能
- javascript array map方法
- 2、Kmeans算法处理出租车数据
- Java Web第三弹---Tomcat
- t3软件怎么生成报表_用友t3财务报表生成的步骤和流程
- 项目实训- 基于unity的2D多人乱斗闯关游戏设计与开发(综述)
- 如何查看浏览器cookie?附2个方法
- excel透视表——制作动态饼图
- 游戏音效中竟然有3D音效,这是什么鬼?
- Android studio 中使用GeenDao
- 建造者模式(Builder)---创建型
- c语言常用的运行速度优化,C语言程序设计优化(提速)
- 信奥中的数学 相关资料汇总(2022.07.08)
- python爬取京东手机参数_python爬虫——分页爬取京东商城商品信息(手机为例)...
- CSDN-markdown编辑器啊啊飒飒大
- PostMan9.11.0安装以及汉化教程