Я хочу видеть горячие классы / методы (сколько они создали и сколько их размер для классов и сколько они вызывали / время выполнения для методов) через JMC (Java Mission Control). Для начала я разработал приложение se и spring для углубленного изучения этой темы.
1) Для этого я создал два простых приложения: SE https://github.com/Arxemond777/java_jmc_profiling и подпружиненный загрузчик https://github.com/Arxemond777/spring_jmc_jmeter_profiling
2 *) Для приложения Spring я генерирую нагрузку через @Sheduler (cron) и через Jmeter (https://github.com/Arxemond777/spring_jmc_jmeter_profiling/blob/master/src/main/resources/jmeter/Test%20Plan.jmx) jmeter сохраненная конфигурация
3) Я использую jms 5.5 (/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/bin/jmc) и 6.0 (/Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home / бен / СВК).
Я пытаюсь запустить «начать запись полета» по умолчанию и с различными настройками для измерения точности, и изучить вкладки (jmc 5.5) «code» -> «Overview» «code» -> «Горячие методы» и (jmc 6.0) «Outline» -> «Метод профилирования».
4.1) Для моего приложения я иногда вижу (со временем записи 1 или 2 минуты), как вызывается метод CountSizeOfHashMap # a (), но иногда я не вижу этой информации, как на следующем экране https://yadi.sk/d/8xtFmga9Ufhp2Q Но я никогда не видел вот как вызывается CountSizeOfHashMap # b ().
4.2) Для моего весеннего приложения я никогда не видел, как вызывается Cron # scheduleFixedDelayTask () https://github.com/Arxemond777/spring_jmc_jmeter_profiling/blob/master/src/main/java/example/cron/Cron.java
или GreetingController #reeting () / GreetingController # delay () / GreetingController #lessDelay ()
https://github.com/Arxemond777/spring_jmc_jmeter_profiling/blob/master/src/main/java/example/controller/GreetingController.java
Я никогда не видел также, сколько экземпляров создано для одного цикла записи «записи полета» для https://github.com/Arxemond777/spring_jmc_jmeter_profiling/blob/master/src/main/java/example/dto/MyClass.java
Я вижу только, как вызывается jdk-методы, например: j.u.HashMap.put () ets
А как создаются классы jdk например: j.u.TimerThread ets
SE код приложения https://github.com/Arxemond777/java_jmc_profiling
public class CountSizeOfHashMap {
static Map<Character, Long> map = new HashMap<>();
public static void main(String[] args) {
a();
}
private static void a() {
for (long i = 0; i < 8_000L; i++) {
map.put((char)i, i + b());
}
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
a();
}
private static long b() {
final long l = new Random().nextInt(11);
map.put('a', l);
return l;
}
}
Весеннее приложение https://github.com/Arxemond777/spring_jmc_jmeter_profiling
GreetingController.java
@RestController
public class GreetingController {
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
private final String URL = "http://arxemond.ru";
private final List<MyClass> myClasses = new ArrayList<>();
@Autowired
private RestTemplate restTemplate;
@RequestMapping("/greeting")
public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
return new Greeting(counter.incrementAndGet(),
String.format(template, name));
}
@RequestMapping("/delay")
public String delay() throws InterruptedException {
final int delay = new Random().nextInt(3000 - 500 + 1) + 500;
System.out.printf("delay: %d ms" + System.lineSeparator(), delay);
Thread.sleep(delay);
myClasses.add(new MyClass(String.valueOf(delay)));
return restTemplate.getForEntity(URL, String.class).getBody();
}
@RequestMapping("/without-delay")
public String withoutDelay() {
return restTemplate.getForEntity(URL, String.class).getBody();
}
}
Cron.java
@Service
public class Cron {
@Scheduled(fixedDelay = 500)
public void scheduleFixedDelayTask() { // 120
System.err.println("Fixed delay task - " + System.currentTimeMillis() / 1000);
}
}
MyClass.java
public class MyClass {
private final String name;
public MyClass(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
Ожидаемое:
*) Я хочу увидеть, сколько классов создано и их размер, сколько вызванных методов и время выполнения методов для моих приложений se и spring.
Фактически:
*) Я вижу для моего SE-приложения, что метод CountSizeOfHashMap # a () иногда вызывался, но он определенно меньше, чем должен быть в реальном времени, и я никогда не видел, как вызывался метод CountSizeOfHashMap # b ().
*) Я никогда не видел, как вызывается (сколько) методов моей весны и там время выполнения. И как создаются мои классы из моего пакета (сколько экземпляров) и сколько они имеют размер.