当前位置: 首页 > 网络应用技术

应使用arraylist避免的凹坑

时间:2023-03-09 00:01:52 网络应用技术

  每个人都知道阵列列表是由数组实现的,并且数据的长度受到限制。有必要在正确的时间扩展数组。

  当我们初始化2的长度并在内部写三个数据时,我们必须扩展,即将先前的数据复制到3个新数组长度为3。

  以下是扩展的源代码。3的原因是因为*新长度=原始长度1.5 **。

  我们可以通过源代码知道的默认长度为10。

  但是实际上,它不是初始化时创建的数组。instead,当第一个数据内部的第一个数据时,它将扩展到10。

  现在默认长度为10,这意味着一旦将来写下第九个元素,它将扩展。该步骤是复制数组,也就是说,重新打开一个新的内存空间来存储这15个数组一旦我们经常写,数量很大,将复制许多阵列,并且这种效率极低。

  但是,如果我们预测可能提前编写多少数据,我们可以提前避免此问题。

  例如,我们在其中编写了1000W数据,并且在初始化时,数组长度与默认10的长度之间的性能很大。

  用JMH基准测试。

  关于JMH,据估计有些合作伙伴不知道。让我们先解释一下JMH。

  JMH是Java Microbench Marks线束的缩写。中文的含义大致是“基于Java Microfi的测试试剂盒”。首先,了解“基准测试”是什么。

  百度百科全书给出的定义如下:

  基准测试是指通过设计科学测试方法,测试工具和测试系统的一种测试对象的定量和比较测试。

  可以简单地将其与诸如Master Lu之类的性能检测软件进行比较,该软件通常在我们的计算机中使用,也可以运行手机常用的软件。卡,IO,CPU等。

  基准测试的特征如下:

  重复性:可以进行重复测试。这有利于比较每个测试的测试结果,性能结果的长期变化趋势以及在系统前的容量计划和启动前的容量参考。

  天文台:通过所有调节监视(包括测试结束到末尾,执行机,服务器,数据库),及时理解和分析发生了什么。

  显示:相关人员可以直观地了解测试结果(Web界面,仪表板,折叠地图树地图等)。

  现实:测试的结果反映了客户体验的真实情况(真实,准确的业务场景+生产的一致配置+合理和正确的测试方法)。

  可执行性:相关人员可以快速测试,验证和修改调整(定位分析)。

  可以看出,进行符合特征的基准测试非常乏味且难以进行。外部因素很容易影响最终的测试结果。特别是对于Java的基准测试。

  您运行的结果不同,时间可能会有所不同,并且很难获得相对稳定的结果。

  在这种情况下,有一个解决方案,可以进行大量重复调用,并且可以在进行实际测试之前进行一定的预热,以使结果尽可能准确。

  除此之外,我们还需要良好的显示结果,使我们能够通过这些显示结果来判断性能质量。

  这些JMH还有!还有什么?

  JMH带有JDK9。如果您是JDK9之前的版本,也可以导入OpenJDK

  以下示例用于证明:在初始化时,数组长度和默认长度的长度之间的性能差距很大。

  操作结果:

  根据结果,可以看出,默认长度的效率远高于默认效率的效率(在此处完成功能所消耗的时间)。

  因此,强烈建议在这里:当有很多数据时,请确保初始化指定的长度。

  请小心将数据写入指定的位置,源代码如下:

  通过源代码,我们可以看到每次我编写它,索引之后的数据将再次移回。实际上,本质是复制阵列;效率极低。

  就像这里提到的坑一样,高性能应用程序是从小细节中堆叠的。日常使用没有重大问题。一旦所有小问题的数据都将成为一个大问题。