Измерение производительности журналаJAVA

Программисты JAVA общаются здесь
Anonymous
Измерение производительности журнала

Сообщение Anonymous »

Я пытаюсь измерить производительность журнала в сочетании с модульным тестом. Что я заметил, так это то, что первый блок, который получается, получает немного накладных расходов. Приведенный ниже код - один случай с stringScapeUtils.escapejava , но я также столкнулся с этим поведением в других тестах. Кто -нибудь столкнулся с этим и знает причину? < /P>

Код: Выделить всё

import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

class MyTests {
private static final Logger LOGGER = LoggerFactory.getLogger(MyTests.class);

protected String getSaltString(final int length) {
String SALTCHARS = "ABCDEFGHIJKLMNOPQRSTUVWXY\nZ1234567890";
StringBuilder salt = new StringBuilder();
Random rnd = new Random();
while (salt.length() < length) { // length of the random string.
int index = (int) (rnd.nextFloat() * SALTCHARS.length());
salt.append(SALTCHARS.charAt(index));
}
String saltStr = salt.toString();
return saltStr;

}

private void dummy(final String str) {

}

@Test
public void testNewlineInString() {
long start = 0, end = 0;
final int Times = 1000;

LOGGER.info("starting..");

String [] strings = new String[Times];
for (int i = 0; i < Times; ++i) {
strings[i] = getSaltString(100);
}

LOGGER.info("Generated strings..");

start = Instant.now().toEpochMilli();
for (int i = 0; i < Times; ++i) {
LOGGER.info("Case 1: String Number: {} Name: {}", i + 1, strings[i]);
//          dummy(strings[i]);
}
end = Instant.now().toEpochMilli();
final long durationNo_escapeJava = end - start;

start = Instant.now().toEpochMilli();
for (int i = 0; i < Times; ++i) {
LOGGER.info("Case 2: String Number: {} Name: {}", i + 1, StringEscapeUtils.escapeJava(strings[i]));
//          dummy(StringEscapeUtils.escapeJava(strings[i]));
}
end = Instant.now().toEpochMilli();
final long duration_escapeJava = end - start;

start = Instant.now().toEpochMilli();
for (int i = 0; i < Times; ++i) {
LOGGER.info("Case 3: String Number: {} Name: {}", i + 1, strings[i]);
//          dummy(strings[i]);
}
end = Instant.now().toEpochMilli();
final long durationNo_escapeJavaAgain = end - start;

LOGGER.info("durationNo_escapeJava: {} duration_escapeJava: {} durationNo_escapeJavaAgain: {}",
durationNo_escapeJava, duration_escapeJava, durationNo_escapeJavaAgain);

}
}
< /code>
Результат последовательно показывает, что первый блок занимает гораздо больше, чем 3 -й блок, который по существу одинаково. < /p>
Например: < /p>
durationno_escapejava: 265 durent_escapejava: 107 DurationNo_escapejavaagain: 28 < /p> p> PROUTION 
 PROMENTAGAVAAGAIN: PRINUTY_ESCAPEJAVA. Dumy 
в примере выше, но у него нет этой проблемы.


Подробнее здесь: https://stackoverflow.com/questions/795 ... erformance

Вернуться в «JAVA»