簡體   English   中英

如何提高合並連續堆空間的性能

[英]How to improve performance of merging continuous heap space

我寫了一個堆管理器模擬器。 我使用兩個列表來保留分配的塊和空閑塊的地址和大小。 我發現以下函數極大地降低了我的代碼性能,因為我需要分配百萬個對象……該函數的目的是在堆中找到連續的空閑塊並將其合並,但是問題是在其中存在線性搜索,並且結果需要很長時間(超過1小時)才能完成? 有任何想法嗎?

public void updateFreeList(tuple freeElement)
{
  int i=0;
  if(freeList.size()> 1)
  {
    while(i<freeList.size())
    {
      try{
        if((freeList.get(i).getAddress()+freeList.get(i).getSize()) == (freeList.get(i+1).getAddress()))
        {
          freeList.get(i).setSize(freeList.get(i).getSize() + freeList.get(i+1).getSize());
          freeList.remove(i+1);
          continue;
        }
        i++;
      }
      catch (Exception e)
      {
       break;
      }
    }
  }
}

您可以使用以下觀察結果:兩個塊只有在其中一個剛剛被釋放后才能合並。 這就是為什么不需要檢查整個列表的原因:當您取消分配一個塊並將其返回到空閑塊列表時,您只需檢查上一個和下一個塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM