ArrayList 的内存分配是如何工作的?

2024-02-12

据我所知,当我们创建一个ArrayList:

ArrayList<String> list = new ArrayList<String>(SIZE);

JVM为它预留内存的连续部分 https://stackoverflow.com/q/5411095/1021970。当我们向列表中添加新元素时,当元素数量达到列表的 75% 时SIZE它保留新的、连续的内存部分并复制所有元素。

我们的名单越来越大。我们正在添加新对象,并且必须再次重建列表。

现在会发生什么?

JVM 正在寻找连续的内存段,但没有找到足够的空间。

垃圾收集器可以尝试删除一些未使用的引用并对内存进行碎片整理。如果在此过程之后 JVM 无法为列表的新实例保留空间,会发生什么情况?

它是否使用最大可能的段创建一个新的?哪个Exception会被抛出吗?

我读了这个问题Java:ArrayList如何管理内存 https://stackoverflow.com/q/2673398/1021970答案之一是:

引用不会占用太多空间。 https://stackoverflow.com/a/2673458/1021970但无论如何,有些空间被利用了。当数组变大时,这可能是一个问题。我们也不能忘记我们还有其他使用内存空间的东西。


如果 JVM 无法分配请求的内存量,则会抛出异常

OutOfMemoryError

就是这样。实际上JVM内存分配只有两种可能的结果:

  1. 应用程序被给予请求的内存量。
  2. JVM 抛出 OutOfMemoryError。

没有中间选项,例如一定量的内存被分配。

与以下无关数组列表,这是一个 JVM 问题。如果你问是否数组列表以某种特殊的方式管理这种情况 - 那么答案是“不,它不会”。它只是尝试分配所需的内存量,然后让 JVM 考虑其余的事情。

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

ArrayList 的内存分配是如何工作的? 的相关文章

  • 使用 Java 的 Apache Http 摘要身份验证

    我目前正在开发一个 Java 项目 但无法使 http 摘要身份验证正常工作 我尝试使用 Apache 网站 但没有帮助 我有一个需要 HTTP 摘要身份验证的网站 DefaultHttpClient httpclient new Defa
  • Netbeans 8.1 Gnome 3 GTK+ UI 字体和选项卡高度

    我刚刚在运行 GNOME 3 桌面的 Ubuntu 16 04 上安装了 NetBeans 8 1 如果可能的话 我想继续使用 IDE 的 GTK 外观和感觉 但 UI 上的字体 尤其是选项卡中的字体 太小且重叠 我尝试添加 fontsiz
  • 使用 Tabula 通过 Python 读取 pdf 时出现 Java 错误

    我已经安装了 tabula 库 用于使用 python 将 pdf 读取到 pandas 数据框中 但是当我运行代码时 import tabula df tabula read pdf sample1 pdf pages 1 我得到了例外
  • 如何在由子控件组成的 SWT 复合材料上跟踪鼠标?

    我创建了自己的控件 我想跟踪鼠标并添加一个MouseTrackListener 很遗憾MouseEnter and MouseLeave当鼠标移动到我的合成部分 即标签和按钮 上时 也会生成事件 Mouse enter mouse ente
  • TreeMap 删除所有大于某个键的键

    在项目中 我需要删除键值大于某个键的所有对象 键类型为Date 如果重要的话 据我所知TreeMapJava中实现的是红黑树 它是一种二叉搜索树 所以我应该得到O n 删除子树时 但除了制作尾部视图并一一删除之外 我找不到任何方法可以做到这
  • java.lang.ClassNotFoundException:javax.mail.MessagingException

    我想使用 eclipse 将电子邮件从我的 gmail 帐户发送到另一个邮件帐户 我使用 apache tomcat 7 0 34 作为我的 Web 服务器 并使用端口 8080 作为 apache 服务器 HTTP 1 1 并使用 JRE
  • 两个整数乘积的模

    我必须找到c c a b mod m a b c m 是 32 位整数 但 a b 可以超过 32 位 我正在尝试找出一种计算 c 的方法 而不使用 long 或任何 gt 32 位的数据类型 有任何想法吗 如果m是质数 事情可以简化吗 注
  • Mockito 使用 @Mock 时将 Null 值注入到 Spring bean 中?

    由于我是 Spring Test MVC 的新手 我不明白这个问题 我从以下代码中获取了http markchensblog blogspot in search label Spring http markchensblog blogsp
  • 如何在单个查询中搜索 RealmObject 的 RealmList 字段

    假设我有一堂课 public class Company extends RealmObject private String companyId private RealmList
  • 将人类日期(当地时间 GMT)转​​换为日期

    我正在服务器上工作 服务器正在向我发送 GMT 本地日期的日期 例如Fri Jun 22 09 29 29 NPT 2018在字符串格式上 我将其转换为日期 如下所示 SimpleDateFormat simpleDateFormat ne
  • Jetty、websocket、java.lang.RuntimeException:无法加载平台配置器

    我尝试在 Endpoint 中获取 http 会话 我遵循了这个建议https stackoverflow com a 17994303 https stackoverflow com a 17994303 这就是我这样做的原因 publi
  • 使用 Elastic Beanstalk 进行 Logback

    我在使用 Elastic Beanstalk 记录应用程序日志时遇到问题 我正在 AWS Elastic Beanstalk 上的 Tomcat 8 5 with Corretto 11 running on 64bit Amazon Li
  • 不可变的最终变量应该始终是静态的吗? [复制]

    这个问题在这里已经有答案了 在java中 如果一个变量是不可变的并且是final的 那么它应该是一个静态类变量吗 我问这个问题是因为每次类的实例使用它时创建一个新对象似乎很浪费 因为无论如何它总是相同的 Example 每次调用方法时都会创
  • 使用 HtmlUnit 定位弹出窗口

    我正在构建一个登录网站并抓取一些数据的程序 登录表单是一个弹出窗口 所以我需要访问这个www betexplorer com网站 在页面的右上角有一个登录链接 写着 登录 我单击该链接 然后出现登录弹出表单 我能够找到顶部的登录链接 但找不
  • 在 Spring 上下文中查找方法级自定义注释

    我想知道的是 所有的类 方法Spring http en wikipedia org wiki Spring Framework注释为 Versioned的bean 我创建了自定义注释 Target ElementType METHOD E
  • partitioningBy 必须生成一个包含 true 和 false 条目的映射吗?

    The 分区依据 https docs oracle com javase 8 docs api java util stream Collectors html partitioningBy java util function Pred
  • 子类构造函数(JAVA)中的重写函数[重复]

    这个问题在这里已经有答案了 为什么在派生类构造函数中调用超类构造函数时 id 0 当创建子对象时 什么时候在堆中为该对象分配内存 在基类构造函数运行之后还是之前 class Parent int id 10 Parent meth void
  • Java RMI - 客户端超时

    我正在使用 Java RMI 构建分布式系统 它必须支持服务器丢失 如果我的客户端使用 RMI 连接到服务器 如果该服务器出现故障 例如电缆问题 我的客户端应该会收到异常 以便它可以连接到其他服务器 但是当服务器出现故障时 我的客户端什么也
  • 由 Servlet 容器提供服务的 WebSocket

    上周我研究了 WebSockets 并对如何使用 Java Servlet API 实现服务器端进行了一些思考 我没有花费太多时间 但在使用 Tomcat 进行一些测试时遇到了以下问题 如果不修补容器或至少对 HttpServletResp
  • Spring RESTful控制器方法改进建议

    我是 Spring REST 和 Hibernate 的新手 也就是说 我尝试组合一个企业级控制器方法 我计划将其用作未来开发的模式 您认为可以通过哪些方法来改进 我确信有很多 RequestMapping value user metho

随机推荐

  • Github 访问错误 - 遇到 AggregateException [重复]

    这个问题在这里已经有答案了 我使用 github 存储库已经快一年了 从今天早上开始 我无法将我的代码推送到远程存储库 我在命令行中收到以下错误 致命 遇到 AggregateException Mindestens ein Fehler
  • 在使用 Inno Setup 安装期间报告已安装的 .NET Framework 版本

    我正在尝试使用 Inno Setup 来准备创建安装程序 我的第一次尝试是向用户报告当前安装了哪个 NET Framework 我想出了以下脚本 它安装了一个令牌 exe 但它没有显示我想要显示已安装的框架版本的消息框 Setup AppN
  • 使用 ECTO 和 put_assoc/4 进行多对多

    我尝试将 2 个现有多对多记录与 ECTO 和 put assoc 4 关联 但在尝试更新时不会删除元素 基本上我有项目和用户 为了管理用户对项目的访问 我有表 user project def Project do schema proj
  • 如何使用 Keras 预测函数/表?

    我目前正在学习keras 我的目标是创建一个简单的模型来预测函数的值 首先 我创建两个数组 一个用于 X 值 一个用于相应的 Y 值 declare and init arrays for training data X np arange
  • 从python中的字符串中获取两个字符[重复]

    这个问题在这里已经有答案了 如何在Python中从字符串中获取不是一个字符 而是两个字符 I have long str abcd for c in long str print c 它给了我喜欢 a b c d 但我需要得到 ab cd
  • 如何调试 Visual Studio 扩展

    我正在为 Visual Studio 2010 编写 VSIX 扩展 但不知道如何调试它 一种明显的方法是输出消息 扩展模板使用Trace WriteLine 但是在哪里可以找到它的输出呢 Visual Studio Extensions
  • 如何在新窗口中使用jspdf打开生成的pdf

    我在用jspdf生成 pdf 文件 一切都运转良好 但生成后如何打开 pdf 在新选项卡或新窗口中 我在用 doc output datauri 这是在同一选项卡中打开 pdf 根据来源 您可以将 dataurlnewwindow 参数用于
  • 从 csv 文件中删除字母和符号 - python 3.7

    我有一个 CSV 文件 其中有一列名为activity其中有如下数据 instv2 02 00001 20190517235008 instv2 9 Insti2 3 Fbstt1 00001 20190517131933 我需要仅从 活动
  • 如果输入包含数组中的任何单词

    我有一个输入 我想知道数组中是否存在任何值 举个简单的例子 我的数组是 var array sun mon tue wed thu fri sat 例如 我已经弄清楚如果我简单地输入 sun 如何触发它 但我想知道 hhsun 或 sune
  • 定义交换运算时减少代码重复

    我有一组名为的可交换二元函数的重载overlap 它接受两种不同的类型 class A a class B b bool overlap A B bool overlap B A 我的功能overlap当且仅当一个形状与另一个形状重叠时返回
  • 宏函数和内联函数在执行速度方面有什么区别?

    编译器如何通过宏处理内联函数以减少执行时间 编译器也被允许not如果这样做会更快 则内联函数 而编译器不能不内联宏 此外 内联函数比宏安全得多
  • 为基类设计一个基迭代器

    我目前正在设计一个界面 Base在下面的示例中 它提供了一些虚拟方法 包括begin and end 这两个方法简单地返回相应的迭代器 就像在任何其他集合类中一样 派生类应该实现这些方法并返回其迭代器的特定实现 下面的 简化的 示例显示了一
  • 自动将输入提供给 Linux 命令行 [重复]

    这个问题在这里已经有答案了 如果我有一个 linux 命令提示输入 2 个或更多输入 如何通过在命令行中定义它来将这些输入传递到提示符 您可以在命令后面添加一些内容来执行此操作吗 在下面的示例中 如何运行命令并向其传递用户名和密码 而无需在
  • 玩! - 独特的模型领域

    如何使我的模型类字段独一无二 例如 如果已经登录 我想为用户显示正确的消息 我必须编写自己的验证检查并使用它 或者 JPA UniqueConstraint可以用吗 我是这样做的 Entity public class User exten
  • 如何在 Java 中从另一个包中转换出同一类的类型?

    有两个班级 foo bar FileUploader and barbar foofoo FileUploader 两者相同并延伸Uploader 代码中的某处foo bar FileUploader被使用并作为我的函数的参数给出Uploa
  • 将数据从 sqlite 导出到 numpy 数组

    我不是程序员 我这样做纯粹是出于爱好 我找到了一种将 numpy 数组保存到 sqlite 数据库中的方法 import sqlite3 import numpy Array of 4 columns and 100 rows data n
  • 正则表达式分割字符串

    我有这段代码打印 Random
  • CIImage 返回 CMSampleBuffer

    我使用录制视频 mp4 文件 AVAssetWriter with CMSampleBuffer数据 来自视频 音频输入 录制时我想处理帧 我正在转换CMSampleBuffer to CIImage并对其进行处理 但如何更新CMSampl
  • java有频率表吗?

    Java 有内置的频率表吗 我记得在我的一门课程中使用过一个 并且我知道 Python 有一个 但我不记得是我自己构建的还是 Java 是否有一个可供使用 我假设 频率表 是指值到计数的映射 答案是no 不过 创建一个行为良好的人并不困难
  • ArrayList 的内存分配是如何工作的?

    据我所知 当我们创建一个ArrayList ArrayList