Java 如何在内存不足的系统中实现ArrayList,其中内存块在小数据块中可用,但大数据块序列不可用

Java 如何在内存不足的系统中实现ArrayList,其中内存块在小数据块中可用,但大数据块序列不可用,java,memory-management,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);

我已经编写了自己的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
    }
ArrayList
{
国际能力;
int[]元素_数组;
int size();
布尔插入();
布尔insertAtIndex();
布尔删除(int元素);
布尔removeAtIndex(int索引,int元素);
调整大小();
//当容量达到75%时,
//创建一个大小为两倍的新数组,并将所有元素从现有数组重新定位到新数组
}
我的resize实现创建了一个新的双大小数组。 现在,如果我处理的是小型内存系统,很可能内存已分配给多个对象,因此需要将数组加倍。 由于系统内存不足,内存可能仍然可以用于创建一个大小为一百万的数组,但顺序内存无法分配

我该如何处理这种情况

这是一个假设场景,但仍希望处理它。 请提供建议/指南


还是我在阵列内存分配方面遗漏了什么?

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

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

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

e、 g

  • 跟踪收集器
  • 标记扫描集合
  • 复制收藏
  • 增量收集
  • 保守垃圾收集
  • 参考计数
要对顺序内存进行排序,请使用上述技术,而不是TLAB(线程本地缓冲区分配),TLAB有可能通过对堆进行碎片化而导致内存效率低下

要了解更多信息,请使用给定的链接


我通常不认为JVM在扩展集合时是如何分配内存的。你能详细解释一下为什么这对你很重要吗?@TimBiegeleisen:我明白,这只是一个假设的场景,但如果需要,我想知道数据结构实现的熟练程度和充分性,但仍然是假设性的。我必须编写自己的实现,部署在内存不足的系统上?请记住,Java使用垃圾收集,因此内存碎片不是您必须处理的问题。当您要求分配X数量的内存时,Java会在可能的情况下为您获得它。你所要担心的是,如果发生可怕的
OutOfMemoryException
,你该怎么办,你的选择基本上是1)在失败中举手,或者2)再试一次,但下次要求更少的内存。@KevinAnderson:选项2是我目前正在进行的,只是想知道是否有更好的方法,Thanks我更关心GC启动前的内存不足,这不是实际的假设情景。如果您释放资源,您可以利用内存不足。