我必须处理大量的小整数,最大为1700万(值始终在0-255之间),并将它们存储在某种类型的数组上,我目前使用的是普通的int数组,并且性能不是最好的( 符合预期)。

每次执行时,程序都会访问该数组的所有值约260次,因此最重要的是通过减少访问数组的所有值(不使用线程)所花费的时间来减少执行时间。

int[]应该是最快的,因为与int的转换为0。您确定其数据结构就是瓶颈吗?

access all the values of that array by about 260 times更改算法以减少此数字,对于[0-255]值,您也可以使用字节,但请注意使用符号

也许有一种方法可以改善程序相对于该数组的引用位置。 stackoverflow.com/questions/7638932/

@zapl好吧,我没有理论上的时间,所以我以为是问题所在,但是如果int []是最好的,我的代码将尽可能简短,除非一些Summations试图改善它。感谢您的回答。

@Lashane那是我正在尝试做的事情,但是由于我了解到问题不是int [],所以请尝试更深入地检查。

@DavidK感谢您的分享,请检查一下。

我已经实现的目标是将访问量减少到代码允许的最低限度,只有运行程序所需的最低限度,将时间缩短了约20%。

@zapl您可能是错的,请参阅我的答案。转换比缓存未命中便宜得多,使用更少的内存可能有助于消除缓存未命中。

@maaartinus是的,也许,或者它可能会引入一些细微的错误,或者使它变得更慢stackoverflow.com/a/14532302/995891(重新访问一下,不幸的是,这些测试看起来非常糟糕,例如,据我所知没有预热。 )。

当您的值适合带符号的字节时,可以使用byte[]。然后转换为int

int x = a[i] & 255;

因此您可以将rande -128..127中的值转换为无符号范围。

不要被其他操作吓到,它不比慢

int x = a[i];

这都会导致内存加载和扩展指令(扩展为零或符号)。

通过使用byte[],您可以假设速度是由内存访问导致的,这会降低您的速度。缓存中容纳的数据量是原来的四倍,这可以消除缓存未命中的情况。您可能会获得很大的影响,或者根本没有收获,这取决于确切的访问模式:

对于顺序访问,您可能将一无所获,因为内存应该足够快,除非您的计算非常琐碎

对于纯随机访问,您的L3缓存可能小于17 MB,您可能一无所获

对于访问模式,当附近的数据得到更多处理时,您可能会收获很多

鉴于您没有提供任何细节,这就是我能说的。

您可以使用short数据类型,但这可能不会对性能产生太大影响。如果您有44亿次访问,那将需要时间。

您没有说"不是最好的"性能意味着什么,或者您认为应该是什么,但是我相信问题的严重性限制了您的性能。

由于此问题感觉像是XY问题,因此建议您提出一个新问题,并详细解释目标的真实性质。您可能会错过基于此问题我们只能猜测的优化。

感谢您提供答案,但由于没有分配和导入,我会尽力而为,在没有更深入帮助的情况下寻找答案,但感谢您提供的简短数据类型提示。

您可以编辑帖子以表明您看到的表现吗? 如果您确实需要44亿个阵列访问权限,那么通过安排一些事情来减少CPU缓存丢失的情况,您就可以得到一些改善,从而避免在阵列中跳来跳去。即 如果必须访问一个元素数百次,则在可能的情况下,所有访问都应尽可能在时间上尽可能接近,而不能同时访问数组中"相距较远"的元素。

*重要的是我会尽力使其高效并...

java存储整数_关于数组:Java:存储大量整数的最佳数据类型是什么?相关推荐

  1. java从数组查找指定整数_如何在Java中使用重复项查找整数数组中的K个缺失数字?...

    java从数组查找指定整数 自从我讨论任何编码或算法面试问题以来已经有很长时间了,因此我想重新考虑一种最流行的基于数组的编码问题,即在给定数组中查找缺失的数字. 在进行编程工作面试之前,您可能已经听说 ...

  2. java 字节 操作_实例解析Java byte数组操纵方式代码

    字节数组的关键在于它为存储在该部分内存中的每个8位值提供索引(快速),精确的原始访问,并且您可以对这些字节进行操作以控制每个位. 坏处是计算机只将每个条目视为一个独立的8位数 - 这可能是你的程序正在 ...

  3. java编程学习方法_在线学习Java编程的最佳方法

    java编程学习方法 1.简介 Java是使用最广泛的编程语言之一. 根据Github的最新报告 ,Java被列为仅次于JavaScript的第二大最常用的编程语言. 掌握Java的人有很多话题. 好 ...

  4. java arraylist排序_最全Java集合笔记

    集合概述 什么是集合 集合框架:用于存储数据的容器. 集合框架是为表示和操作集合而规定的一种统一的标准的体系结构.任何集合框架都包含三大块内容:对外的接口.接口的实现和对集合运算的算法. 接口:表示集 ...

  5. java小学生加减法_大数加减法 - java实现

    计算机处理的各种数据类型都有个范围,超出范围的就处理不了. 如果做超大数运算加减乘除,普通方法肯定是不行的,那么我们遇到大数的运算怎么处理呢?今天介绍一种大数加减乘除运算的方法 思路: 1. 将两个特 ...

  6. java list翻转_浅谈Java数据结构中的常见问题

    1.常用数据结构 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素间的关系组成.常用的数据有:数组.栈.队列.链表.树.图.堆.散列表. 1)数组:在内存中连续存储多个元素的 ...

  7. java 面试 框架_这份java集合框架面试题,轻松搞定面试官!

    集合框架 1. ArrayList 和 Vector 的区别. 这两个类都实现了 List 接口(List 接口继承了 Collection 接口),他们都是有序集 合,即存储在这两个集合中的元素的位 ...

  8. java 异常机制_深入理解Java异常处理机制

    一.引子 try-catch-finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的"教训"告诉我,这个东西可不是想象中 ...

  9. java 同步锁_死磕 java同步系列之自己动手写一个锁Lock

    问题 (1)自己动手写一个锁需要哪些知识? (2)自己动手写一个锁到底有多简单? (3)自己能不能写出来一个完美的锁? 简介 本篇文章的目标一是自己动手写一个锁,这个锁的功能很简单,能进行正常的加锁. ...

  10. java stringbuffer原理_深入理解Java:String

    在讲解String之前,我们先了解一下Java的内存结构. 一.Java内存模型 按照官方的说法:Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配. JVM主要管理两 ...

最新文章

  1. 2021年3月16日 北京快手Java开发实习面试(海外增长方向)
  2. Selenium之定位元素常用的8种方法整理(第一篇)
  3. 看似简单的问题 静态方法和实例化方法的区别
  4. python用WMI等获取及修改windows系统信息
  5. ASP.NET MVC5微信公众平台整合开发实战教程
  6. Dubbo生产者消费者配置
  7. 一款好用且免费的语句分析工具Plan Explorer
  8. 前端学习(2959):axios介绍
  9. 嘉兴python培训_嘉服集团
  10. 浅谈种子搜索算法及C++实现方法
  11. 如何从初级程序员变成高级程序员?赶紧看一看
  12. C语言的printf一些骚操作
  13. Python 基础 —— time(时间,日期)
  14. 2.UNIX 环境高级编程--UNIX标准及实现
  15. 【Flask+SocketIO】如何用Flask做一个快捷迷你的局域网聊天室
  16. 解析大数据智能分析平台开发
  17. c语言程序设置存根,gmock可以用于存根C函数吗?
  18. 解决Vue项目: verbose stack Error: unable to resolve dependency tree
  19. 第 46 届 ICPC 国际大学生程序设计竞赛亚洲区域赛(沈阳)
  20. 我为什么要辞掉20万的工作去读研?

热门文章

  1. python使用matplotlib可视化subplots绘制子图、自定义几行几列子图,如果M行N列,那么最终包含M*N个子图、在指定的子图中添加可视化结果
  2. python使用matplotlib可视化subplots子图、subplots绘制子图、子图之间有重叠问题、使用subplots_adjust函数合理设置子图之间的水平和垂直距离
  3. Python计算医疗数据训练集、测试集的对应的临床特征:训练集(测试集)的阴性和阳性的样本个数、连续变量的均值(标准差)以及训练测试集阳性阴性的p值、离散变量的分类统计、比率、训练测试集阳性阴性的p值
  4. R语言使用ggradar包可视化基本雷达图(radar chart、蜘蛛图spider plot)、可视化单个数据对象的雷达图、自定义雷达图的线条类型、线条宽度、数据点大小、色彩等
  5. R语言广义加性模型(GAMs:Generalized Additive Model)建模:数据加载、划分数据、并分别构建线性回归模型和广义线性加性模型GAMs、并比较线性模型和GAMs模型的性能
  6. R语言glm拟合logistic回归模型:模型评估(模型预测概率的分组密度图、混淆矩阵、准确率、精确度、召回率、ROC、AUC)、PRTPlot函数获取logistic模型最优阈值(改变阈值以优化)
  7. pandas计算特征与所有数值特征的相关性并排序可视化:包含pearson、spearman、kendall
  8. tar: Cowardly refusing to create an empty archive 问题
  9. 结合实例与代码谈数字图像处理都研究什么?
  10. tensorflow中打印一个tensor值