Add a defragmentation mechanism
-------------------------------

                 Key: DIRECTMEMORY-9
                 URL: https://issues.apache.org/jira/browse/DIRECTMEMORY-9
             Project: Apache DirectMemory
          Issue Type: Task
            Reporter: Raffaele P. Guidi


Add a defragmentation mechanism 

>From the ML: (paliwalashish)
>Will the offHeapMemoryBuffer get fragmented over time? Say after a
couple thousand get/remove operations, will the off-heap have start
having holes in the Buffer?
(Me:)
>It will, definitely. I had two solutions ready in my mind (that rely on having 
>more than one buffer active): 
Simplest, and fastest but with some drawbacks: when buffer.isTooDefragmented() 
then simply buffer.clear() - you loose everything, but - hey, it's a cache, not 
a db
Less simple, slower, less drawbacks: when buffer.isTooDefragmented() mark the 
buffer as readOnly and then foreach (ptr in buffer) copy ptr.content in 
emptyBuffer and update ptr accordingly
where isTooFragmented==number_of_empty_pointers over total_pointers > desirable 
quota

The first one could be accomplished during a put() operation (buffer.clear is a 
logical operation that takes no time) while the second should be taken care of 
by the background thread. Those quick&dirty solutions could of course be 
replaced with real defragmentation algorithms - may taken from various malloc() 
implementations, that are the original inspiration 
http://en.wikipedia.org/wiki/Malloc#Implementations


See also https://github.com/raffaeleguidi/DirectMemory/issues/43

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to