On Sun, Oct 16, 2011 at 2:50 PM, Raffaele P. Guidi <[email protected]> wrote: > It will, definitely. I had two solutions ready in my mind (that rely on > having more than one buffer active): > > 1. *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
IMHO, we can't assume that since its a cache, we can clear any buffer it at our own will. Cache entries must always be evicted based on what is configured by user. Also we need a very efficient way of finding when a buffer is too fragmented. Take a use case, we put an entry a few hundred KB in size, and a lot of entries which are few KB in size. So how would the implementation work in these scenario's. I am just thinking loud, we may already have this working, and I may not be aware of it :) > 2. *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 Lets experiment with different strategies and see which works best. I am yet to take a deep dive into the Pointer implementation :) > > Beside that: I think this was filed in github issue tracker as an > enhancement together with some more - I think I should re-file them in JIRA. Missed that, actually this came up when I was implementing the sample. > > Ciao, > R > > On Sun, Oct 16, 2011 at 9:31 AM, Ashish <[email protected]> wrote: > >> Folks, >> >> 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? >> >> -- >> thanks >> ashish >> > -- thanks ashish Blog: http://www.ashishpaliwal.com/blog My Photo Galleries: http://www.pbase.com/ashishpaliwal
