Skip to content

Commit 8e71c13

Browse files
Merge branch '1.9.x' into 1.10.x
2 parents b5fa79e + 0fb75c1 commit 8e71c13

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

micrometer-core/src/main/java/io/micrometer/core/instrument/MeterRegistry.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import java.util.concurrent.TimeUnit;
3838
import java.util.concurrent.atomic.AtomicBoolean;
3939
import java.util.function.*;
40+
import java.util.stream.Collectors;
4041

4142
import static java.lang.String.format;
4243
import static java.util.Collections.emptyList;
@@ -63,6 +64,18 @@
6364
*/
6465
public abstract class MeterRegistry {
6566

67+
// @formatter:off
68+
private static final EnumMap<TimeUnit, String> BASE_TIME_UNIT_STRING_CACHE = Arrays.stream(TimeUnit.values())
69+
.collect(
70+
Collectors.toMap(
71+
Function.identity(),
72+
(timeUnit) -> timeUnit.toString().toLowerCase(),
73+
(k, v) -> { throw new IllegalStateException("Duplicate keys should not exist."); },
74+
() -> new EnumMap<>(TimeUnit.class)
75+
)
76+
);
77+
// @formatter:on
78+
6679
protected final Clock clock;
6780

6881
private final Object meterMapLock = new Object();
@@ -287,7 +300,7 @@ protected String getConventionName(Meter.Id id) {
287300
protected abstract DistributionStatisticConfig defaultHistogramConfig();
288301

289302
private String getBaseTimeUnitStr() {
290-
return getBaseTimeUnit().toString().toLowerCase();
303+
return BASE_TIME_UNIT_STRING_CACHE.get(getBaseTimeUnit());
291304
}
292305

293306
/**

micrometer-core/src/test/java/io/micrometer/core/instrument/MeterRegistryTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package io.micrometer.core.instrument;
1717

18+
import io.micrometer.core.Issue;
1819
import io.micrometer.core.instrument.config.MeterFilter;
1920
import io.micrometer.core.instrument.config.MeterFilterReply;
2021
import io.micrometer.core.instrument.distribution.DistributionStatisticConfig;
@@ -205,4 +206,12 @@ void shouldNotLetRegisteringMetersTwice() {
205206
.hasNoCause();
206207
}
207208

209+
@Test
210+
@Issue("#4352")
211+
void baseUnitStringShouldBeCachedAndReturnTheSameInstance() {
212+
Timer timer1 = registry.timer("test.timer1");
213+
Timer timer2 = registry.timer("test.timer2");
214+
assertThat(timer1.getId().getBaseUnit()).isSameAs(timer2.getId().getBaseUnit());
215+
}
216+
208217
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy