当前位置: 首页 > news >正文

java解决超大二维矩阵数组引起的内存占用过大问题

内存咱不行,咱换磁盘,吃磁盘IO

这里文件一定要删除,不然写入数据会有脏数据问题,他不会清除之前已有的数据。还有就是他的存储量也有上限单个文件2GB

这里我用了一个10000*10000的数组弄了点模拟值,画了个图,完美的解决了我们之前矩阵过大无法计算的问题

public static void main(String[] args) throws Exception {Date date = new Date();File file = new File("C:\\Users\\Desktop\\临时文件\\a");file.delete();file.createNewFile();MMF mmf = new MMF(10000, 10000, "C:\\Users\\18833\\Desktop\\临时文件\\a");for (int i = 1500; i < 2000; i++) {System.out.println("存入数组" + i);for (int j = 1500; j < 2000; j++) {mmf.set(i, j, 255);}}int width = 10000;int height = 10000;BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);Graphics2D g2d = image.createGraphics();for (int i = 0; i < 10000; i++) {System.out.println("画入指定位置" + i);for (int j = 0; j < 10000; j++) {if (mmf.get(i, j) != 0) {image.setRGB(i, j, Color.red.getRGB());}}}g2d.dispose();try {ImageIO.write(image, "png", new File("C:\\Users\\Desktop\\临时文件\\output.png"));} catch (IOException e) {System.err.println("保存图片时出错: " + e.getMessage());}System.out.println("耗时:"+(new Date().getTime() - date.getTime())/1000);
}
package com.hydf.upar.service;import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;public class MMF {private final int rows;private final int cols;private final MappedByteBuffer buffer;public MMF(int rows, int cols, String path) throws Exception {this.rows = rows;this.cols = cols;try (RandomAccessFile file = new RandomAccessFile(path, "rw")) {long size = (long) rows * cols * Integer.BYTES;buffer = file.getChannel().map(FileChannel.MapMode.READ_WRITE, 0, size);}}public int get(int row, int col) {int pos = (row * cols + col) * Integer.BYTES;return buffer.getInt(pos);}public void set(int row, int col, int value) {int pos = (row * cols + col) * Integer.BYTES;buffer.putInt(pos, value);}
}
http://www.lryc.cn/news/575710.html

相关文章:

  • 【redis使用场景——缓存——数据过期策略 】
  • 新手向:Neo4j的安装与使用
  • CTF:PHP 多关卡绕过挑战
  • Flink部署与应用——Flink架构概览
  • 国外开源客服系统chathoot部署,使用教程
  • 信息化系统流程管理模块,企业高价值资产的跨省/市运输审批流程的功能
  • 网络安全之SQL RCE漏洞
  • AI 口语陪练:教育领域的新变革​
  • AI智能体——OpenManus 源码学习
  • 使用 ReAct 框架在 Ollama 中实现本地代理(Agent)
  • Docker安装Mysql、配置文件挂载、修改Mysql编码
  • Python-7-读取/写入文件数据
  • Rust与Go:GAN实战对决
  • 合规型区块链RWA系统解决方案报告——机构资产数字化的终极武器
  • SQL语句在MySQL中的执行过程
  • python pyecharts 数据分析及可视化
  • Python 将文件夹中的所有文件打包成Zip压缩包
  • easyExcel导入多sheet的Excel,存在合并单元格、列不固定的情况
  • 超实用AI工具分享——ViiTor AI视频配音功能教程(附图文)
  • html 照片环 - 图片的动态3D环绕
  • 渗透实战:使用隐式转换覆盖toString的反射型xss
  • Linux 统一方式安装多版本 JDK 指南
  • python基于协同过滤的动漫推荐系统
  • CSP-J 2021 入门级 第一轮(初赛) 阅读程序(1)
  • CSMA/CD相关习题---谢希仁课后题
  • 数据分享:医学数据集-糖尿病数据集
  • Git 使用规范与命令使用场景详解
  • 与 AI 聊天更顺畅:cat_code.py
  • MIT 6.824学习心得(1) 浅谈分布式系统概论与MapReduce
  • 【全志V821_FoxPi】3-2 Linux 5.4 SPI + XPT2046触摸(ADS7846) + tslib