Il sab 24 mar 2018, 16:38 Matteo Merli <mme...@apache.org> ha scritto:
> While profiling the allocations of a BookKeeper client (from current > master) writing entries, I've noticed that there are multiple allocations > per entry related to the OrderedScheduler. > > I think OrderedScheduler was introduced in 4.6 and now OrderedSafeExecutor > is just an extension of OrderedScheduler as well. > Good catch IMHO if you can find a way to simply existing classes and preserve BK functionalities any change will be appreciated. I know that they are 'limited private' classes but only users of them are Pulsar and DL (which now has been merged to main codebase). This to say that you have a full vision about those classes. Enrico > The main problem is that since OrderedScheduler supports both immediate and > delayed execution, it uses a ScheduledThreadPoolExecutor per each bucket, > plus some decorating wrappers. > > The ScheduledThreadPoolExecutor, needs a Priority queue and also always > return future objects. > > From my memory snapshot I have counted 12 objects allocated (per addEntry > operation) for a total of 472 bytes per each entry, all due the scheduled > executor. > > I think the delayed execution is only used in unit tests. In critical paths > we're only using the immediate task submission. > > I think it might be worth to refactor OrderedScheduler or > OrderedSafeExecutor to avoid that overhead. > > Thoughts? > > Matteo > -- > Matteo Merli > <mme...@apache.org> > -- -- Enrico Olivelli