Java 8 Arraylist 巨大容量(int) 实现

2024-05-06

我正在阅读文档了解如何ArrayListJava 中的 s 已增长。我不明白为什么hugeCapacity(int minCapacity) http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/java/util/ArrayList.java#ArrayList.hugeCapacity%28int%29方法选择返回Integer.MAX_VALUE or MAX_ARRAY_SIZE.

从如何MAX_ARRAY_SIZE是在类中定义的,

244 |     private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;

这几乎是一样的Integer.MAX_VALUE除非相差一个整数的大小 (32 bits).

264 |     private static int hugeCapacity(int minCapacity) {
265 |         if (minCapacity < 0) // overflow
266 |             throw new OutOfMemoryError();
267 |         return (minCapacity > MAX_ARRAY_SIZE) ?
268 |             Integer.MAX_VALUE :
269 |             MAX_ARRAY_SIZE;
270 |     }

谁能告诉我返回的细微差别是什么Integer.MAX_VALUE versus MAX_ARRAY_SIZE?不管怎样,不应该OutOfMemoryError occur?


最大数组大小限制为某个数字,该数字因不同 JVM 而异,通常略小于Integer.MAX_VALUE。所以分配数组Integer.MAX_VALUE你将拥有的元素OutOfMemoryError在大多数 JVM 上,即使您有足够的内存来执行此操作。MAX_ARRAY_SIZE假定在大多数现有 JVM 上是有效的数组大小。所以当ArrayList尺寸接近于Integer.MAX_VALUE(例如,你有超过1_500_000_000个元素,需要扩大一个数组),它扩大到这样MAX_ARRAY_SIZE,这样就可以成功执行(假设你有足够的内存)。仅当元素数量超过MAX_ARRAY_SIZE, the ArrayList尝试分配一个数组Integer.MAX_VALUEelements(在大多数 JVM 上可能会失败,但是may其中一些取得了成功)。这样您就可以安全地添加元素最多MAX_ARRAY_SIZE在几乎所有 JVM 上,只有在那之后才会出现问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 8 Arraylist 巨大容量(int) 实现 的相关文章

随机推荐

  • HK2 MethodInterceptor 与 Jersey 资源

    如何设置aopMethodInterceptor使用泽西岛资源 这是我尝试过的 如下this https hk2 java net 2 2 0 aop example html文档 第 1 步 拦截服务 public class MyInt
  • Linux 的 gcc __attribute__((selectany)) 替代方案?

    我想知道是否有替代方案 attribute selectany 在Linux中 我想定义这样的东西 char a qwe zxc 并将其包含在许多链接在一起的 c 文件中 因此链接器将看到 a 的多个定义 因此不会链接 我读过这个属性 se
  • 更改 WooCommerce 购物车和结帐页面中的“运输”文本:[重复]

    这个问题在这里已经有答案了 我正在将 WooCommerce 与 Storefront 主题一起使用 并且我正在尝试更改这个词 船运 在带有总计的购物篮页面上 我在这里找到了一些建议 https kriesi at support topi
  • iOS后台Location不发送http请求

    我的应用程序需要在后台跟踪用户位置 但无法发送 获取 请求 当应用程序到达前台时 http 请求会立即发送 我正在使用 RestKit 来处理所有网络请求 并且遵循本教程 http www mindsizzlers com 2011 07
  • Google Cloud Platform:将上传的 MP4 文件转换为 HLS 文件

    我正在构建一个平台 允许用户将一些视频文件 20 40 秒 从手机上传到服务器 所有这些上传目前都运行良好 文件通过nodejs云功能存储在谷歌存储桶中 现在我想创建一个 gcp 转码器作业 它将上传的 mp4 视频文件转换为 hls 视频
  • 在 ASP.NET MVC3 中,应该如何呈现由多个模型支持的多个 PartialView?

    在 MVC3 Razor 中 如何创建具有多个表单的页面 以便每个表单都是使用自己的模型渲染的部分视图 我们一直在尝试各种形式的调用 Html RenderPartial 传入部分视图名称以及我们通过 ViewBag 访问的模型实例 但我们
  • VBA添加图表标题

    我只想使用 vba 将图表标题添加到我的图表中 我实际上想对每张纸中的每个图表递归地执行此操作 但我什至无法让 1 个图表工作 这是我的代码 Dim chnam chnam Left ActiveSheet Name Len ActiveS
  • 多维数组上的数组合并

    要么我是瞎子 要么我在任何地方都找不到这个问题 昨天我在合并数组时遇到了问题 我可以在 SO 的帮助下解决这个问题 今天 我再次遇到了合并数组的问题 但这一次是多维数组 我有一个数组 usergroup groups 和一个数组 userg
  • 在特定时间启动应用程序

    我想知道是否有可能 以及如何 在特定时间启动我的应用程序 就像在特定时间响起的闹钟一样 假设我希望我的应用程序在早上 8 点启动 这可行吗 您可以使用 AlarmManager 来完成此操作 这是一个简短的示例 首先你需要设置闹钟 Alar
  • SSL 到底如何工作?

    SSL 是如何工作的 证书安装在客户端 或浏览器 和服务器 或Web服务器 的哪里 当您在浏览器中输入 URL 并从服务器获取页面时 信任 加密 身份验证过程如何启动 HTTPS协议如何识别证书 当证书负责所有信任 加密 身份验证工作时 为
  • 如何在打字稿订阅功能之外获取价值

    我对某些服务有以下订阅功能 this sub this route params subscribe params gt this id params id this someService thisById this id subscri
  • * 对于结构体来说是非法的吗?

    我尝试编译以下代码 但编译器不会执行此操作 因为 对于结构来说是非法的 这是真的吗 struct String int length int capacity unsigned check char ptr 0 String void ma
  • 抓取多个帐户,即多次登录

    我可以成功抓取单个帐户的数据 我想在一个网站上抓取多个帐户 这意味着多次登录 如何管理登录 注销 您可以在每个帐户会话中使用多个 cookiejar 并行抓取多个帐户 请参阅 cookiejar 请求元密钥http doc scrapy o
  • 计算两个描述符之间的距离

    我正在尝试计算已计算的两个描述符之间的距离 欧几里得或汉明 问题是我不想使用匹配器 我只想计算两个描述符之间的距离 我正在使用 OpenCV 2 4 9 并且我的描述符存储在 Mat 类型中 Mat descriptors1 Mat des
  • 如何创建启动活动,通过按钮调用第二个活动,简单的数据表单 5 个字段和 2 个按钮

    Android 新手需要一个可靠构建的帮助 我可以参考并研究未来的项目 第一个活动是带有按钮的背景图像 单击时会出现 您将看到第二个活动 该活动是一个包含 5 个数据字段和 2 个按钮的表单 一个按钮调用在应用程序内拍照的意图 另一个按钮将
  • VS2012 & TFS2012 单元测试主要问题

    我们使用 VS2012 和 TFS2012 并为我们的代码编写单元测试 我们想要报告代码覆盖率 并在单元测试中使用 config 文件来测试应用程序设置 以及一些其他日志记录设置 MS Enterprise 库设置等 App config
  • 如何将外部项目添加到 Xcode 4?

    我遇到了在 Xcode 4 中包含项目的问题 我拥有所有文档 但它适用于 Xcode 3 而不是 Xcode 4 如何添加ZXingWidget xcodeproj到我的 Xcode 4 项目 在 Xcode 4 中 您主要是要创建一个新的
  • 表单方法=“获取”漂亮的URL

    所以我使用这个 HTML 表单作为一个简单的搜索字段
  • 是否可以使用纬度和经度的舍入值向 Postgres 表添加约束?

    我有一个存储纬度和经度数据的表 像下面这样 CREATE TABLE geo sample id uuid DEFAULT uuid generate v4 latitude FLOAT NOT NULL longitude FLOAT N
  • Java 8 Arraylist 巨大容量(int) 实现

    我正在阅读文档了解如何ArrayListJava 中的 s 已增长 我不明白为什么hugeCapacity int minCapacity http grepcode com file repository grepcode com jav