2017-07-27 36 views
1

我写我自己的ArrayList实现诸如如何实现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 
    } 

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

我该如何处理这种情况?

这是一个假设情景,但仍然希望处理它。 建议/指导方针。

或我缺少数组内存分配的东西?

+0

我通常不会看到它正在讨论如何扩大集合时,JVM实际上引擎盖下分配内存。你能详细说明为什么这对你很重要吗? –

+0

@TimBiegeleisen:我明白,这只是一个假设情景,但如果出现需要,我想知道数据结构实施的熟练程度和适当性,但仍然是假设的.i必须编写我自己的实现来部署在内存不足的系统上。 –

+0

https://en.wikipedia.org/wiki/Unrolled_linked_list? –

回答

1

一个垃圾收集器,从而具有两个任务:

要以满足应用程序的分配速度,使其不会耗尽内存快速免费未引用的内存。 回收内存,同时对正在运行的应用程序的性能(例如,延迟和吞吐量)产生最小影响。

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

e.g

  • 跟踪收藏家
  • 标记 - 清除收集
  • 复制收集
  • 增量收集
  • 保守的垃圾收集
  • 引用计数

理清顺序内存使用上述技术,而不是TLAB(线程本地缓冲区分配),它是通过分割堆内存诱导效率低下的风险。

更多的澄清使用给定链路彻底

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

+0

我更担心内存不足GC踢之前,不实际的,假设的情景 –

+0

您可以利用内存如果您取消分配资源,则不足。 – Tehmina