Does anyone have any thoughts or suggestions on this please? Ralph
> On Apr 2, 2021, at 4:47 PM, Ralph Goers <ralph.go...@dslextreme.com> wrote: > > Log4j 2 supports the notion of a PreciseClock - one that can be initialized > to something more precise than a millisecond. At the same time it also > supports running with no heap allocations in certain circumstances. I am in > the process of moving our master branch to require Java 11 as the minimum. In > doing so I am encountering unit test errors while verifying that logging is > garbage free. They all occur allocating an Instant. > > The code we have simply does > > public void init(MutableInstant mutableInstant) { > Instant instant = java.time.Clock.systemUTC().instant(); > mutableInstant.initFromEpochSecond(instant.getEpochSecond(), > instant.getNano()); > } > In our previous tests we had thought the allocation was being eliminated due > to escape analysis since the data is being extracted from the Instant and not > passed along. However, after upgrading the Google test library and the JDK > version it appears that is not the case. > Ideally we would really like something like > > public void init(MutableInstant mutableInstant) { > java.time.Clock.systemUTC().initInstant(mutableInstant); > } > > where Mutable instant would implement an interface that has the two set > methods.The method would execute the same logic that is in the instant() > method but instead of creating a new Instant it would call the set methods > for the provided object. > > This would allow us to either have the MutableInstants in ThreadLocals or > some other mechanism to ensure they are thread safe and have no heap > allocations. As it stands now I see no way to gain access to the higher > precision clock without memory allocation. > > Do you know of another way to do this? Am I missing something? > > Ralph