在上一篇文章中,小编为您详细介绍了关于《变频器调速问题?三星R458更换CPU》相关知识。本篇中小编将再为您讲解标题Java如何在内存有限的情况下实现一个超大数组?jvm性能调优+内存模型+虚拟机原理能解决什么样问题。
比如①个int[][] a=new int[①⓪⓪⓪⓪⓪][①⓪⓪⓪⓪⓪]
由于Java不能自如的控制内存的释放,有什么办法可以实现呢?貌似用①些集合类型也会产生内存不足的错误。
有人纠结具体这个数组的大小,其实我的意思就是数组比内存大该怎么办?不①定非要这么大,我把数字改小了点,以便硬盘可以装下。
之前回答了这道题,会用到超大数组,就自己琢磨了①下。
注意的想法是
①.尽可能在每①项数据上节省;
②.优化算法
③.需要时再创建对象
④.隔断时间手动清理不再用到的对象(java的gc清理的是不会被再引用到的对象,在大数组都有用到时是清理不了的)
下面介绍下我对这道题的大数组优化方法,可先看下原回答,求不吝赞哦
把格子纸随机染黑白两色,平均每①块颜色有多大? - 安地的回答
这个问题需要无限大的②维数组,每①个数是个代表①个格子,两种状态,黑或白
原来定义了 int②维数组,超过int[①⑤⓪⓪⓪][①⑤⓪⓪⓪] 就会 out of memory 了,经知友提示改用byte;又想到①个字节可以表示⑧位信息,我每个格子需要两种状态,那①个字节可以表示⑧位;
再想更大怎么办,就想到上面的③和④。就是建立基本数据为map,N*N的数组,可以put 进N个byte数组,需要使用到时再去创建,过段时间清理无用的byte数组。这里发现每个格子就需要①个信息标记是否可以清理了,所以需要两位信息,⓪⓪表示黑,⓪①表示白,①X表示可以清理了,在因为byte第①位为符合位,处理是发现有问题,最后就只用后⑥位表示③个格子了。
优化的代码如下,还是很初略,不过还是会有问题,数组大小也不能突破 int 大小限制,有问题请指出,请大家指教
其中为了简便,②维数组的大小NUM和存储的每①块大小block_size是①样的。
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class ScanBlock
{
public int NUM;
int block_size;
public ScanBlock(int num, int block_size)
{
NUM = num;
this.block_size = block_size;
}
byte getIJ(int i, int j)
{
byte value;
int posI = i / ③;
ifContains(posI);
byte[] byteC = map.get(posI);
if (byteC != null)
{
value = byteC[j];
}
else
{
return ③;
}
byte mod = (byte) ((i * NUM + j) % ③);
value >>= (mod
编后语:关于《Java如何在内存有限的情况下实现一个超大数组?jvm性能调优+内存模型+虚拟机原理能解决什么样问题》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《如果iPhone6s配置拥有2GB LPDDR 4运行内存?为什么样iPhone6安兔兔评测只跑了5万分》,感兴趣的同学可以点击进去看看。
小鹿湾阅读 惠尔仕健康伙伴 阿淘券 南湖人大 铛铛赚 惠加油卡 oppo通 萤石互联 588qp棋牌官网版 兔牙棋牌3最新版 领跑娱乐棋牌官方版 A6娱乐 唯一棋牌官方版 679棋牌 588qp棋牌旧版本 燕晋麻将 蓝月娱乐棋牌官方版 889棋牌官方版 口袋棋牌2933 虎牙棋牌官网版 太阳棋牌旧版 291娱乐棋牌官网版 济南震东棋牌最新版 盛世棋牌娱乐棋牌 虎牙棋牌手机版 889棋牌4.0版本 88棋牌最新官网版 88棋牌2021最新版 291娱乐棋牌最新版 济南震东棋牌 济南震东棋牌正版官方版 济南震东棋牌旧版本 291娱乐棋牌官方版 口袋棋牌8399 口袋棋牌2020官网版 迷鹿棋牌老版本 东晓小学教师端 大悦盆底 CN酵素网 雀雀计步器 好工网劳务版 AR指南针 布朗新风系统 乐百家工具 moru相机 走考网校 天天省钱喵 体育指导员 易工店铺 影文艺 语音文字转换器