我已经编写了自己的 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 存在通过堆碎片导致内存效率低下的风险。
要获得更多说明,请彻底使用给定的链接
关于java - 如何使用低内存系统实现 ArrayList,其中内存块以小块形式可用,但大块序列不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45339994/