On Sat, Mar 24, 2018 at 8:38 AM, Matteo Merli <mme...@apache.org> wrote:

> 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.
>

OrderedSafeExecutor extends OrderedScheduler was for BC. We made common
util classes in bookkeeper-common.


>
> The main problem is that since OrderedScheduler supports both immediate and
> delayed execution, it uses a ScheduledThreadPoolExecutor per each bucket,
> plus some decorating wrappers.
>

Sound like this is the solution:

- Keep the OrderedScheduler
- Copy the OrderedScheduler to OrderedExecutor and change it to the
original executor implementation
- Let OrderedSafeScheduler extends OrderedExecutor (bc purpose)


>
> 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>
>

Reply via email to