ObjectMapper.readValue의 첫 번째 초기화 및 실행이 느림
7737 단어 java
ObjectMapper.readValue
이 느리다는 사실을 알게 되었습니다. 정적 인스턴스objectMapper
를 재사용하거나 매번 새 인스턴스objectMapper
를 사용하더라도 최초 비용은 사라지지 않습니다. 그러나 전반적으로 정적objectMapper
이 인스턴스보다 빠릅니다.첫 번째 실행에는 약 420ms가 소요되지만 두 번째 실행에는 23ms만 필요합니다. 정적
objectMapper
인스턴스 또는 objectMapper
인스턴스를 실행하더라도 첫 번째 인스턴스가 가장 깁니다.String json = "{\"name\":\"car2\",\"keyA\":1,\"keyB\":2,\"wheels\":null,\"atomicCounter\":0,\"counter\":0,\"brand\":\"car brand\"}\n";
// static objectMapper
Stopwatch stopwatch = Stopwatch.createStarted();
List<CompletableFuture<Car>> futureList = new ArrayList<>();
for (int i =0; i < 9; i++) {
CompletableFuture<Car> future = CompletableFuture.supplyAsync(() -> {
// JsonUtil.toObject is a method to get static objectMapper and execute 'readvalue'
return JsonUtil.toObject(json, new TypeReference<Car>() {});
});
futureList.add(future);
}
CompletableFuture.allOf(futureList.toArray(new CompletableFuture[]{})).join();
System.out.println("static objectMapper " + stopwatch.toString());
// instance objectMapper
Stopwatch stopwatch1 = Stopwatch.createStarted();
List<CompletableFuture<Car>> futureList2 = new ArrayList<>();
for (int i =0; i < 9; i++) {
CompletableFuture<Car> future = CompletableFuture.supplyAsync(() -> {
Car car = null;
try {
car = new ObjectMapper().readValue(json, new TypeReference<Car>() {});
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return car;
}).exceptionally(e -> {throw new RuntimeException(e.getMessage());});
futureList2.add(future);
}
CompletableFuture.allOf(futureList2.toArray(new CompletableFuture[]{})).join();
System.out.println("instance objectMapper " + stopwatch1.toString());
실행 가능한 코드:
repo
Reference
이 문제에 관하여(ObjectMapper.readValue의 첫 번째 초기화 및 실행이 느림), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aldora/first-initialization-and-execution-of-objectmapperreadvalue-is-slow-3kn9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)