failsafe-lib / failsafe

Fault tolerance and resilience patterns for the JVM
https://failsafe.dev
Apache License 2.0
4.2k stars 297 forks source link

FYI: Very compact "lean" version of DelegatingScheduler #353

Open magicprinc opened 2 years ago

magicprinc commented 2 years ago

This is the continuation of https://github.com/failsafe-lib/failsafe/issues/349

Here: https://github.com/magicprinc/failsafe/commits/leap_of_faith

Final memory balance: -1 fat object CompletableFuture -1 lambda Callable in DelegatingScheduler.schedule -1 Callable-Runnable wrapper in delayer().schedule (Runnables are wrapped as Callables in FutureTask ctor)

+1 very lean object ScheduledCompletableFuture implements ScheduledFuture, Callable (not a CompletableFuture anymore)

I am sure this is the final step and one can't optimize this class further. Not a single unused byte in memory!

magicprinc commented 2 years ago

I did a (not scientific) memory test:

Old scheduled task in memory: 193 bytes New scheduled task in memory: 136 bytes 70% of original

https://github.com/magicprinc/failsafe/blob/9f23989e3bf77e9b525d0863ba89b89075240355/core/src/test/java/dev/failsafe/internal/util/DelegatingSchedulerTest.java#L404