Презентация с Highload++ 2011
---
Принципы работы сборщика мусора в JVM. Использование принципа поколений. Параллельная и фоновая сборка мусора. Особенности реализации алгоритмов сборки мусора в HostSpot и JRockit JVM. Причины пауз сборки мусора и способы борьбы с ними. Особенности работы с "большими" JVM - 32 гигабайта и больше. Альтернативы сборщике мусора, прямое управление памятью в Java.
The 5-th lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
Презентация с Highload++ 2011
---
Принципы работы сборщика мусора в JVM. Использование принципа поколений. Параллельная и фоновая сборка мусора. Особенности реализации алгоритмов сборки мусора в HostSpot и JRockit JVM. Причины пауз сборки мусора и способы борьбы с ними. Особенности работы с "большими" JVM - 32 гигабайта и больше. Альтернативы сборщике мусора, прямое управление памятью в Java.
The 5-th lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
Лекция для сотрудников фирмы Soft-logic, проведенная 25.12.2014. В ходе лекции рассматривались следующие ключевые моменты:
1. Постановка проблемы. Паттерн пул потоков
- Проблема производительности
- Описание паттерна в общем виде
- Основные два подхода к запуску задач
- Три стратегии организации пулов потоков
2. Интерфейсы и классы взаимодействия с пулами потоков
- Интерфейсы ExecutorService, ScheduledExecutorService
- Реализации ThreadPoolExecutor, ScheduledThreadPoolExecutor
- Интерфейсы Runnable, Callable<v>,Future<v>, RunnableFuture<v>
3. Фабрика пулов Executors
- CachedThreadPool
- SingleThreadExecutor
- FixedThreadPool
- ThreadScheduledExecutor
- WorkStealingPool
4. Классы задач
- ForkJoinTask, RecursiveTask, RecursiveAction
- CompletableFuture<v>
5. ForkJoinPool
- Особенности производительности
- Общий пул ява машины
В презентации рассказывается о структурах памяти в JVM: Heap, Non-Heap, Stack, об атомарности операций и о garbage collector. Рассмотрен пример, как работает стек. Также, приведены примеры, как использовать jVisualVM и что она может показать.
JDK 12 includes several new features and improvements including:
- Adding a microbenchmark suite to easily run and create microbenchmarks (JEP 230)
- Introducing an API to model loadable constants to simplify bytecode manipulation (JEP 334)
- Extending the switch statement to be used as either a statement or expression (JEP 325)
- Automatically generating a default class data sharing archive to improve startup times (JEP 341)
- Making mixed collections in G1 abortable if pause targets are exceeded (JEP 344) and promptly returning unused Java heap memory (JEP 346)
- Adding Shenandoah, a low-pause garbage collector that performs evacuation concurrently (JEP 189
This document summarizes the new features and improvements in JDK 11, including:
- JEP 181 which introduces nests to allow private member access between logically related classes;
- JEP 309 which extends class files to support dynamic constants;
- Improvements to Aarch64 intrinsics, the HTTP client API, lambda parameters syntax, Unicode support and single file program launching.
The list of open java online courses from the world famous universities. All courses are actual and available using Coursera online education platform.
The document discusses the lifecycle of Apache Camel including the core elements of CamelContext, Component, Endpoint, and Route. It describes the lifecycles of the CamelContext, services, and routes. The CamelContext manages routes and components. Components create endpoints which implement message exchanges. Routes define message processing between endpoints. The lifecycle operations of start, stop, suspend, and resume can be used on the CamelContext, services, and routes to control their active state.
2. Java 8: Date & Time
Java SE 8 представила новые и современные средства
для работы со значениями даты и времени. Их можно
найти в пакете: java.time.
Классы данного пакета реализуют спецификацию JSR
310: Date and Time API, и основаны на стандарте ISO
8601.
Проект разрабатывался под руководством автора Joda
Time Stephen Colebourne и компании Oracle.
3. Java 8: Date & Time
Date & Time API используют:
-Unicode Common Locale Data Repository (CLDR)
самая большая в мире коллекция данных для
различных локалей
-Time Zone Database (TZDB)
коллекция данных о мировых часовых поясах и
изменениях в них, начиная с 1970-ого года
4. Java 8: Date & Time
Date & Time API принципы:
-Clear - методы хорошо определены, а их поведение
понятно и ожидаемо
-Fluent - свободный и легкий интерфейс, облегчающий
понимание кода. Вызов методов может быть соединен
в единую цепочку.
5. Java 8: Date & Time
Date & Time API принципы:
-Immutable - большинство создаваемых объектов не
изменяемые. При изменении значения объекта,
создается новый объект с новым значением. Это
обеспечивает Date & Time API потокобезопасность по
определению.
-Extensible - большие возможности для расширения и
реализации функционала под конкретную задачу.
Написания пользовательских библиотек.
6. Java 8: Date & Time
Cостав java.time:
java.time - API для работы с датой и временем. Все
классы immutable и thread-safe. Основное API.
java.time.chrono - API для работы с календарями
отличными от стандарта ISO 8601.
java.time.format - API для парсинга и форматирования
значений даты и времени
java.time.temporal - API для доступа к единицам
измерения даты и времени
java.time.zone - API для поддержки временных зон
7. Java 8: Date & Time
Время
human time
Удобное для
восприятия
человеком
год, месяц, день, час, минута, секунда
machine time
Удобное для
восприятия
машиной
миллисекунды, наносекунды
8. Java 8: Date & Time
java.time.DayOfWeek - множество, представляющее 7
дней недели.
Нумерация дней согласно ISO-8601:
1 - Monday
…
…
7 - Sunday
9. Java 8: Date & Time
java.time.DayOfWeek - множество, представляющее 7
дней недели.
DayOfWeek dow = DayOfWeek.MONDAY; => MONDAY
dow.getDisplayName(TextStyle.FULL, Locale.ENGLISH) => Monday
dow.getDisplayName(TextStyle.NARROW, Locale.ENGLISH) => M
dow.getDisplayName(TextStyle.SHORT, Locale.ENGLISH) => Mon
10. Java 8: Date & Time
java.time.Month - множество, представляющее 12
месяцев года.
Нумерация дней согласно ISO-8601:
1 - January
…
…
12 - December
11. Java 8: Date & Time
java.time.Month - множество, представляющее 12
месяцев года.
Month month = Month.MARCH; => MARCH
month.getDisplayName(TextStyle.FULL, Locale.ENGLISH); => March
month.getDisplayName(TextStyle.NARROW, Locale.ENGLISH); => M
month.getDisplayName(TextStyle.SHORT, Locale.ENGLISH)); => Mar
12. Java 8: Date & Time
java.time.LocalDate - значение даты без учета
временной зоны. Данный класс не содержит какой-либо
информации о времени или временной зоне.
LocalDate.now(); => 2014-02-23
13. Java 8: Date & Time
Внимание!
Класс java.time.LocalDate - value-based класс.
Класс java.time.LocalDate использует календарную
систему ISO-8601, что может вызвать проблемы в
приложениях работающих с историческими датами.
14. Java 8: Date & Time
java.time.YearMonth - значение года и месяца. Данный
класс не содержит какой-либо информации о дате,
времени или временной зоне.
YearMonth.now(); => 2014-02
15. Java 8: Date & Time
Внимание!
Класс java.time.YearMonth - value-based класс.
16. Java 8: Date & Time
java.time.MonthDay - значение месяца и дня. Данный
класс не содержит какой-либо информации о годе,
времени или временной зоне.
MonthDay.now(); => --02-23
17. Java 8: Date & Time
Внимание!
Класс java.time.MonthDay - value-based класс.
Класс java.time.MonthDay использует календарную
систему ISO-8601, что может вызвать проблемы в
приложениях работающих с историческими датами.
18. Java 8: Date & Time
java.time.Year - хранит информацию об определенном
годе. Данный класс не содержит какой-либо
информации о времени или временной зоне.
Year.now(); => 2014
19. Java 8: Date & Time
Внимание!
Класс java.time.Year - value-based класс.
Класс java.time.Year использует календарную систему
ISO-8601, что может вызвать проблемы в приложениях
работающих с историческими датами.
20. Java 8: Date & Time
java.time.LocalTime - хранит информацию о времени.
Данный класс не содержит какой-либо информации о
дате или временной зоне. Представляется с точностью
до наносекунд.
LocalTime.now(); => 01:53:42.656
21. Java 8: Date & Time
Внимание!
Класс java.time.LocalTime - value-based класс.
22. Java 8: Date & Time
java.time.LocalDateTime - хранит информацию о дате и
времени. Данный класс не содержит какой-либо
информации о временной зоне. Представляется с
точностью до наносекунд.
LocalDateTime.now(); => 2014-02-25T01:57:52.250
23. Java 8: Date & Time
Внимание!
Класс java.time.LocalDateTime - value-based класс.
Класс java.time.LocalDateTime использует
календарную систему ISO-8601, что может вызвать
проблемы в приложениях работающих с историческими
датами.
24. Java 8: Date & Time
TimeZone - регион использующий одинаковый стандарт
времени.
ZoneId - идентификатор часового пояса,
предоставляющий правила преобразования между
Instant и LocalDateTime.
ZoneOffset - определяет смещение часового пояса
относительно Greenwich/UTC
25. Java 8: Date & Time
java.time.ZonedDateTime - хранит информации о дате
и времени, с указанием временной зоны.
Представляется с точностью до наносекунд.
ZonedDateTime.now(); => 2014-02-25T02:09:53.321+03:00[Europe/Minsk]
26. Java 8: Date & Time
Внимание!
Класс java.time.ZonedDateTime - value-based класс.
27. Java 8: Date & Time
java.time.OffsetDateTime - хранит информацию о дате
и времени, с указанием смещения относительно
Greenwich/UTC. Представляется с точностью до
наносекунд.
OffsetDateTime.now(); => 2014-02-25T02:13:34.737+03:00
28. Java 8: Date & Time
Внимание!
Класс java.time.OffsetDateTime - value-based класс.
29. Java 8: Date & Time
java.time.OffsetTime - хранит информаци о времени, с
указанием смещения относительно Greenwich/UTC.
Представляется с точностью до наносекунд.
OffsetTime.now(); => 02:15:50.779+03:00
30. Java 8: Date & Time
Внимание!
Класс java.time.OffseTime - value-based класс.
31. Java 8: Date & Time
java.time.Instant - временная метка. Представляется с
точностью до наносекунд.
Instant.now(); => 2014-02-24T23:18:45.866Z
32. Java 8: Date & Time
Внимание!
Класс java.time.Instant - value-based класс.
UTC использует концепцию високосных секунд. Java
Time API использует собственную шкалу Java TimeScale, которая для значений времени начиная с 197211-03 идентична UTC-SLS.
33. Java 8: Date & Time
java.time.Duration - служит для представления
промежутка времени выраженного в единицах времени.
Instant instant1 = Instant.now();
Instant instant2 = instant1.plusSeconds(10);
Duration.between(instant2,instant1).getSeconds() => -10
Duration.between(instant2,instant1).abs().getSeconds() => 10
34. Java 8: Date & Time
Внимание!
Класс java.time.Duration - value-based класс.
35. Java 8: Date & Time
java.time.Period - служит для представления
промежутка времени выраженного в единицах даты.
LocalDate today = LocalDate.now();
LocalDate birthday = LocalDate.of(1986, Month.JUNE, 05);
Period.between(birthday,today).getYears() => 27
36. Java 8: Date & Time
Внимание!
Класс java.time.Period - value-based класс.
37. Java 8: Date & Time
Value-based классы:
- equals, hashCode, и toString опираются на
конкретное состояние объекта, а на класс, который он
представляет
- не сравнивайте объекты данного рода при помощи
сравнения их ссылок (==)
- используйте для сравнения объектов данного рода
только метод equals()
38. Java 8: Date & Time
Value-based классы:
- конструкторы отсутствуют, есть только фабричные
методы
- свободно заменяемые (любые два X и Y равные
согласно equals(), при любых вычислениях и вызовах
методов не должны производить никаких видимых
изменение в поведении)
39. Java 8: Date & Time
java.time.Clock - абстрактный класс для доступа к
временной метке, времени и дате с учетом часового
пояса.
40. Java 8: Date & Time
java.time.Clock - Best practice:
public class MyBean {
private Clock clock; // dependency inject
...
public void process(LocalDate eventDate) {
if (eventDate.isBefore(LocalDate.now(clock)) {
...
}
}
}
41. Java 8: Date & Time
java.time.Clock - Текущие методы могут
использоваться для тестирования:
Clock.offset(Clock, Duration)
Clock.systemUTC()
Clock.fixed(Instant, ZoneId)
42. Java 8: Date & Time
java.time.chrono - API для работы с календарями
отличными от стандарта ISO 8601:
JapaneseDate.now() => Japanese Heisei 26-02-26
HijrahDate.now() => Hijrah-umalqura AH 1435-04-26
MinguoDate.now() => Minguo ROC 103-02-26
ThaiBuddhistDate.now() => ThaiBuddhist BE 2557-02-26
43. Java 8: Date & Time
java.time.format.DateTimeFormatter - используется для
форматирования и парсинга значений даты и времени.
Для этого используются методы format() и parse()
соответственно.
java.time.format.DateTimeFormatter позволяет
использовать предопределенные форматы даты и
времени, либо определять собственные.
44. Java 8: Date & Time
Основные классы java.time определяют собственные
методы для форматирования и парсинга значений даты
и времени.
45. Java 8: Date & Time
Парсинг:
LocalDate.parse("20140225",DateTimeFormatter.BASIC_ISO_DATE)
20140225 => 2014-02-25
Форматирование:
ZonedDateTime.now().format(DateTimeFormatter.RFC_1123_DATE_TIME)
2014-02-25T03:00:09.559+03:00[Europe/Minsk] =>
Tue, 25 Feb 2014 03:00:09 +0300
46. Java 8: Date & Time
Стандартизованные префиксы имен методов:
of
with
from
plus
parse
minus
format
to
get
at
is
47. Java 8: Date & Time
Стандартизованные префиксы имен методов:
of - создаем экземпляр объекта указанного класса,по
набору параметров. Входные данные проверяются, но
не конвертируются.
LocalDate localDate = LocalDate.of(1986, Month.JUNE, 5);
localDate => 1986-06-05
48. Java 8: Date & Time
Стандартизованные префиксы имен методов:
from - создаем экземпляр объекта указанного класса,
из другого объекта. Может наблюдаться потеря
некоторых исходных данных (их усечение).
LocalDateTime localDateTime = LocalDateTime.now(Clock.systemUTC());
localDateTime => 2014-02-15T23:48:52.701
LocalDate localDate = LocalDate.from(localDateTime);
localDate => 2014-02-15
49. Java 8: Date & Time
Стандартизованные префиксы имен методов:
parse - создаем экземпляр объекта указанного класса
из входной строки
LocalDate.parse("2014-12-23") => 2014-12-23
50. Java 8: Date & Time
Стандартизованные префиксы имен методов:
format - форматируем строку согласно указанному
формату
LocalDate localDate = LocalDate.now();
localDate => 2014-02-16
localDate.format(DateTimeFormatter.BASIC_ISO_DATE)) => 20140216
51. Java 8: Date & Time
Стандартизованные префиксы имен методов:
get - берем элемент состояния объекта
LocalDate.now().getYear() => 2014
52. Java 8: Date & Time
Стандартизованные префиксы имен методов:
is - спрашиваем состояние объекта
LocalDate.now().isLeapYear() => false
53. Java 8: Date & Time
Стандартизованные префиксы имен методов:
with - возвращаем копию объекта с одним измененным
элементом состояния
LocalDate localDate = LocalDate.now();
localDate => 2014-02-16
localDate.withYear(2016) => 2016-02-16
54. Java 8: Date & Time
Стандартизованные префиксы имен методов:
plus - возвращаем копию объекта с
увеличенным элементом состояния
LocalDate localDate = LocalDate.now();
localDate => 2014-02-16
localDate.plusDays(14) => 2014-03-02
одним
55. Java 8: Date & Time
Стандартизованные префиксы имен методов:
minus - возвращаем копию объекта с
уменьшенным элементом состояния
LocalDate localDate = LocalDate.now();
localDate => 2014-02-16
localDate.minusYears(15) => 1999-02-16
одним
56. Java 8: Date & Time
Cтандартизованные префиксы имен методов:
to - конвертируем текущий объект в объект другого типа
LocalDateTime localDateTime = LocalDateTime.now(Clock.systemUTC());
localDateTime => 2014-02-16T00:51:35.731
localDateTime.toLocalDate() => 2014-02-16
57. Java 8: Date & Time
Стандартизованные префиксы имен методов:
at - комбинируем текущий объект с другим объектом
LocalDate localDate = LocalDate.now();
localDate => 2014-02-16
LocalTime localTime = LocalTime.now();
localTime => 03:55:32.360
localDate.atTime(localTime) => 2014-02-16T03:55:32.360
58. Java 8: Date & Time
Совместимость со старым кодом:
Calendar.toInstant():
Calendar -> Instant
GregorianCalendar.toZonedDateTime():
GregorianCalendar -> ZonedDateTime
GregorianCalendar.from(ZonedDateTime):
ZonedDateTime -> GregorianCalendar
(с использованием дефолтной локали)
59. Java 8: Date & Time
Совместимость со старым кодом:
Date.from(Instant):
Instant -> Date
Date.toInstant():
Date -> Instant
TimeZone.toZoneId():
TimeZone -> ZoneId
60. Java 8: Date & Time
Работа с базой данных:
ANSI SQL
Java SE 8
DATE
LocalDate
TIME
LocalTime
TIMESTAMP
LocalDateTime
TIME WITH TIMEZONE
OffsetTime
TIMESTAMP WITH TIMEZONE
OffsetDateTime
61. Java 8: Date & Time
Дополнительная информация:
Стандарт ISO 8601
http://en.wikipedia.org/wiki/ISO_8601
JSR 310: Date and Time API
https://jcp.org/en/jsr/detail?id=310
Tutorial:
http://docs.oracle.com/javase/tutorial/datetime/index.html
62. Java 8: Date & Time
Дополнительная информация:
Unicode Common Locale Data Repository
http://cldr.unicode.org/
Time Zone Database
http://www.iana.org/time-zones
UTC SLS
http://www.cl.cam.ac.uk/~mgk25/time/utc-sls/