java - 如何使用低内存系统实现 ArrayList,其中内存块以小块形式可用,但大块序列不可用

标签 java memory-management

我已经编写了自己的 ArrayList 实现,例如

    ArrayList<T>
    {
    int capacity;
    int[] element_array;
    int size();
    boolean insert();
    boolean insertAtIndex();
    boolean remove(int element);
    boolean removeAtIndex(int index,int element);
    resize();
// when capacity is filled 75% , 
//create a new array with double size and relocate all element from existing array to new array
    }

我的调整大小实现创建了一个双倍大小的新数组。 现在,如果我正在处理小型内存系统,很可能内存已分配给多个对象,并且需要将我的数组加倍。 由于系统内存不足,内存可能仍可用于创建一百万大小的数组,但无法分配顺序内存。

遇到这种情况我该如何处理?

这是一个假设的场景,但仍然想处理它。 请提出建议/指南。

或者我是否遗漏了数组内存分配的某些内容?

最佳答案

因此,垃圾收集器有两个任务:

快速释放未引用的内存以满足应用程序的分配率,从而不会耗尽内存。 回收内存,同时尽量减少对正在运行的应用程序的性能(例如延迟和吞吐量)的影响。

根据垃圾收集器的概念使用回收技术

例如

  • 追踪收集者
  • 标记-清除集合
  • 复制集合
  • 增量收集
  • 保守的垃圾收集
  • 引用计数

要整理顺序内存,请使用上述技术,而不是使用 TLAB(线程本地缓冲区分配),因为 TLAB 存在通过堆碎片导致内存效率低下的风险。

要获得更多说明,请彻底使用给定的链接

http://www.javaworld.com/article/2078645/java-se/jvm-performance-optimization-part-3-garbage-collection.html

关于java - 如何使用低内存系统实现 ArrayList,其中内存块以小块形式可用,但大块序列不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45339994/

相关文章:

java - 我怎样才能在 pdf 上插入图像或图章,其中有可用的可用空间,如密度扫描仪

java - JFC和API的概念总体上是一样的吗?

java - Clojure 转换器与 Java 中流的中间操作的概念相同吗?

java - Java 中的 Webkit/chrome 时间戳到人类可读时间

ios - 使用SecCertificateCopyData时对象的潜在泄漏

haskell - Haskell 或 OCAML 能否在不通过垃圾收集泄漏的情况下处理敏感数据?

Java:JLS第5.2节赋值转换

r - 什么时候在 RStudio 中将数据存储在内存之外变得有益?

c++ - 是否有一种简单、标准的方法通过分配器访问 "new"和 "delete"对象?

linux - 缓冲区/缓存使用 100% 内存