Размер экземпляра объекта А
Размер считается так в 64 битной jvm:
12-байтовый заголовок (object header: mark, object header: class), дополненный до размера, кратного 8-ми байтам
Далее идут поля, уложенные максимально компактно, учитывая выравнивание на 8
И в данном случае еще будет 6 байтов - дырка после выравнивания на 8 (object alignment gap)
То есть, напрмер, можно было бесплатно добавить еще один char и int в объект, размер бы не изменился
Подробнее:
OFF SZ TYPE DESCRIPTION VALUE
0 8 (object header: mark) N/A
8 4 (object header: class) N/A
12 4 int A.i1 N/A
16 8 long A.l1 N/A
24 2 char A.ch1 N/A
26 6 (object alignment gap)
Instance size: 32 bytes
Space losses: 0 bytes internal + 6 bytes external = 6 bytes total
Размер считается так в 64 битной jvm:
12-байтовый заголовок (object header: mark, object header: class), дополненный до размера, кратного 8-ми байтам
Далее идут поля, уложенные максимально компактно, учитывая выравнивание на 8
И в данном случае еще будет 6 байтов - дырка после выравнивания на 8 (object alignment gap)
То есть, напрмер, можно было бесплатно добавить еще один char и int в объект, размер бы не изменился
Подробнее:
OFF SZ TYPE DESCRIPTION VALUE
0 8 (object header: mark) N/A
8 4 (object header: class) N/A
12 4 int A.i1 N/A
16 8 long A.l1 N/A
24 2 char A.ch1 N/A
26 6 (object alignment gap)
Instance size: 32 bytes
Space losses: 0 bytes internal + 6 bytes external = 6 bytes total
🔥2
Какой будет результат выполнения кода?
public static void main(String[] args) {
List<Integer> integers = new ArrayList<>();
integers.add(1);
integers.add(2);
integers.add(3);
final Stream<Integer> stream = integers.stream();
integers.add(4);
stream.forEach(System.out::println);
}
public static void main(String[] args) {
List<Integer> integers = new ArrayList<>();
integers.add(1);
integers.add(2);
integers.add(3);
final Stream<Integer> stream = integers.stream();
integers.add(4);
stream.forEach(System.out::println);
}
Какой будет результат выполнения кода?
Anonymous Quiz
25%
1,2,3
44%
1,2,3,4
16%
1,2,3,ConcurrentModificationException
16%
ConcurrentModificationException
Ответ на вчерашнюю задачу:
Stream в java lazy и поэтому начинает выполнение в момент, когда вызвана терминальная операция, поэтому CME не будет.
Ещё одна похожая задача тут:
https://t.me/java_interview_tasks/11
Stream в java lazy и поэтому начинает выполнение в момент, когда вызвана терминальная операция, поэтому CME не будет.
Ещё одна похожая задача тут:
https://t.me/java_interview_tasks/11
Telegram
Java Interview Tasks
👍4
Ответ на задачу про аннотацию @Autowired: https://t.me/java_interview_tasks/62
@Autowired над полем и над сеттером плох тем, что вы можете инициализировать объект с null полями (например в тестах)
@Autowired над конструктором решает эту проблему и рекомендован к использованию.
Один из вариантов использования @Autowired над сеттером это проблема с циклическими зависимостями, но надо понимать, что это не решение проблемы, а просто workaround
В случае если вы используете @Autowired над конструктором, вы получите ошибку при старте контекста и сможете сразу исправить циклические зависимости в бинах
Почитать про это можно тут:
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-dependency-resolution
@Autowired над полем и над сеттером плох тем, что вы можете инициализировать объект с null полями (например в тестах)
@Autowired над конструктором решает эту проблему и рекомендован к использованию.
Один из вариантов использования @Autowired над сеттером это проблема с циклическими зависимостями, но надо понимать, что это не решение проблемы, а просто workaround
В случае если вы используете @Autowired над конструктором, вы получите ошибку при старте контекста и сможете сразу исправить циклические зависимости в бинах
Почитать про это можно тут:
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-dependency-resolution
Telegram
Java Interview Tasks
Какой вариант использования аннотации @Autowired лучше?
#spring
@Autowired private MyService myService; (field injection) / @Autowired public void setMyService(MyService myService); (setter injection) / @Autowired public TestService(MyService myService);…
#spring
@Autowired private MyService myService; (field injection) / @Autowired public void setMyService(MyService myService); (setter injection) / @Autowired public TestService(MyService myService);…
Есть arrayList из 100 объектов, нужно преобразовать его в массив.
Какой вариант будет самым быстрым?
(JDK 11 64-Bit Server VM, 11-LTS, VM options: "-XX:+UseParallelGC", "-Xms1g", "-Xmx1g" )
Дополнительные вопросы: если элементов в коллекции не 100, а 10, 1000, 1, 0 , какой из вариантов будет быстрее?
Объяснения или рассуждения пишите в комментариях.
#microbenchmarking
Какой вариант будет самым быстрым?
(JDK 11 64-Bit Server VM, 11-LTS, VM options: "-XX:+UseParallelGC", "-Xms1g", "-Xmx1g" )
Дополнительные вопросы: если элементов в коллекции не 100, а 10, 1000, 1, 0 , какой из вариантов будет быстрее?
Объяснения или рассуждения пишите в комментариях.
#microbenchmarking
Какой вариант быстрее?
Anonymous Quiz
45%
collection.toArray()
13%
collection.toArray(new TestObject[0])
42%
collection.toArray(new TestObject[collection.size()])
🤔1
Немного не по теме канала, но что бы все были в курсе:
На прошлой неделе была выявлена уязвимость в суперпопулярной библиотеке log4j, если даже вы ее явно не используете, то скорее всего она у вас где-нибудь внутри спринга, эластика и тп
Подробности тут: https://isc.sans.edu/diary/rss/28120
На прошлой неделе была выявлена уязвимость в суперпопулярной библиотеке log4j, если даже вы ее явно не используете, то скорее всего она у вас где-нибудь внутри спринга, эластика и тп
Подробности тут: https://isc.sans.edu/diary/rss/28120
SANS Internet Storm Center
InfoSec Handlers Diary Blog - SANS Internet Storm Center
Internet Storm Center Diary 2023-02-01, Author: Johannes Ullrich
Нужно ли публиковать новости и какие-то интересные материалы?
Anonymous Poll
70%
можно
15%
не нужно
9%
мне пофиг
7%
узнать результаты
Ответ на вчерашнюю задачу очень подробно расписал @winogradoff :
https://t.me/c/1712587991/300
Спасибо!
https://t.me/c/1712587991/300
Спасибо!
Что может напечатать thread2?
Anonymous Quiz
31%
-1, -1 ; 1, 2
6%
1, 2
13%
1, 0 ; -1, -1 ; 1, 2
8%
1, 0 ; -1, -1 ; 1, 2 ; 0, 2
10%
другой вариант (пишите в комменты)
23%
узнать ответы
9%
1, 0 ; -1, -1 ; 1, 2 ; 0, 2 ; 0, 0
Java Interview Tasks
Что может напечатать thread2? (thread1 и thread2 запускаются одновременно в разных потоках)
Ответ на вчерашнюю задачу: тут проблема в том что публикация объекта небезопасна, в jmm есть раздел про публикацию объектов. Спецификация гарантирует безопасную публикацию объекта если его поля, которые инициализируются в конструкторе объявлены final. То есть в данном случае достаточно x1 и x2 объявить как final. (Тогда могут быть вариант -1,-1 и 1,2) Ещё есть нюанс про утечку объекта из конструктора. Про это будет отдельный вопрос позже.
Что весит больше HashMap или HashSet?
Anonymous Quiz
39%
HashMap
33%
HashSet
22%
одинаково
7%
узнать ответ
Java Interview Tasks
Что весит больше HashMap или HashSet?
Ответ на вчерашний вопрос:
HashSet весит чуть больше так как он реализован через HashMap
Детальнее:
java.util.HashSet object internals:
OFF SZ TYPE DESCRIPTION VALUE
0 8 (object header: mark) N/A
8 4 (object header: class) N/A
12 4 java.util.HashMap HashSet.map N/A
Instance size: 16 bytes
Видим что hashset содержит поле map java.util.HashMap. То есть вес его = 12 байт headers + reference ( в данном случае 4 (из за compressed oop)) на HashMap + вес hash map
java.util.HashMap object internals:
OFF SZ TYPE DESCRIPTION VALUE
0 8 (object header: mark) N/A
8 4 (object header: class) N/A
12 4 java.util.Set AbstractMap.keySet N/A
16 4 java.util.Collection AbstractMap.values N/A
20 4 int HashMap.size N/A
24 4 int HashMap.modCount N/A
28 4 int HashMap.threshold N/A
32 4 float HashMap.loadFactor N/A
36 4 java.util.HashMap.Node[] HashMap.table N/A
40 4 java.util.Set HashMap.entrySet N/A
44 4 (object alignment gap)
Instance size: 48 bytes
HashSet весит чуть больше так как он реализован через HashMap
Детальнее:
java.util.HashSet object internals:
OFF SZ TYPE DESCRIPTION VALUE
0 8 (object header: mark) N/A
8 4 (object header: class) N/A
12 4 java.util.HashMap HashSet.map N/A
Instance size: 16 bytes
Видим что hashset содержит поле map java.util.HashMap. То есть вес его = 12 байт headers + reference ( в данном случае 4 (из за compressed oop)) на HashMap + вес hash map
java.util.HashMap object internals:
OFF SZ TYPE DESCRIPTION VALUE
0 8 (object header: mark) N/A
8 4 (object header: class) N/A
12 4 java.util.Set AbstractMap.keySet N/A
16 4 java.util.Collection AbstractMap.values N/A
20 4 int HashMap.size N/A
24 4 int HashMap.modCount N/A
28 4 int HashMap.threshold N/A
32 4 float HashMap.loadFactor N/A
36 4 java.util.HashMap.Node[] HashMap.table N/A
40 4 java.util.Set HashMap.entrySet N/A
44 4 (object alignment gap)
Instance size: 48 bytes