Core-1 Flashcards

1
Q

Что такое ООП?

A

Представление программы в виде совокупности
обменивающихся сообщениями объектов, каждый из которых
является экземпляром определенного класса, а классы образуют иерархию наследования.

Объекты могут обладать состоянием, единственный способ изменить состояние объекта – послать ему сообщение, в ответ на которое объект может изменить собственное состояние.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

3 требования для ООП Программы

A
  • объектно-ориентированное программирование использует в качестве основных
    логических конструктивных элементов объекты, а не алгоритмы;
  • каждый объект является экземпляром определенного класса;
  • классы образуют иерархии.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Какие преимущества у ООП?

A

Легко читается – не нужно выискивать в коде функции и выяснять, за что они отвечают.
Быстро пишется – можно быстро создать сущности, с которыми должна работать программа.
Простота реализации большого функционала – т. к. на написание кода уходит меньше времени, можно гораздо быстрее создать приложение с множеством возможностей.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Какие недостатки у ООП?

A

Потребление памяти – объекты потребляют больше оперативной памяти, чем примитивные
типы данных.
Снижается производительность – многие вещи технически реализованы иначе, поэтому
они используют больше ресурсов.
Сложно начать – парадигма ООП сложнее функционального программирования, поэтому на
старт уходит больше времени.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Инкапсуляция

A

СОКРЫТИЕ РЕАЛИЗАЦИИ:
Объединение данных и работающих с ними методов
в классе с целью скрыть детали реализации от пользователя, открыв только то, что необходимо при использовании этого класса.
=> Всё то, что не входит в интерфейс, инкапсулируется в классе.
Полезна для:
- контроль доступа
- контроль целостности/валидности данных
- возможность изменения реализации

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Наследование

A

Создание нового класса на основе уже существующего с частично или полностью заимствующейся функциональностью.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Полиморфизм

A

ВОЗМОЖНОСТЬ ИМЕТЬ РАЗНЫЕ ФОРМЫ ДЛЯ ОДНОЙ И ТОЙ ЖЕ СУЩНСТИ:
это свойство системы использовать объекты с одинаковым интерфейсом
без информации о типе и внутренней структуре объекта.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

ключевая особенность
полиморфизма

A

использование объекта производного класса вместо объекта базового:
потомки могут переопределять родительское поведение, даже если обращение к ним будет
производиться по ссылке родительского типа.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Преимущество полиморфизма

A

он помогает снижать сложность программ, разрешая использование одного и того же интерфейса для задания единого набора действий. Выбор же конкретного действия, в зависимости от ситуации, возлагается на компилятор языка программирования.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

2 Типа Полиморфизма

A
  1. Динамический: переопределение
  2. Статический: перегрузка
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Полиморфная переменная

A

Может принимать значение разных типов

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Полиморфная функция

A

хотя бы 1 ее аргумент - полиморфная переменная.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

2 типа полиморфных функций

A
  1. Ad hoc - Ф. ведет себя по разному для разных типов ( draw() )
  2. Параметрический: Ф. ведёт себя одинаково для аргументов разных типов (Collections.sort )
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Абстракция

A

Абстрагирование – это способ выделить набор общих характеристик объекта, исключая из рассмотрения частные и незначимые. Соответственно, абстракция – это набор всех таких
характеристик.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Что такое обмен сообщениями?

A

Сообщение - запрос на выполнения действия, отправка сообщения = вызов метода.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Класс

A

Класс описывает состояние и зависящее от него поведение сущности, а также правила для взаимодействия с данной сущностью (контракт).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Объект

A

Объект (экземпляр) – это представитель класса, имеющий конкретное состояние
и поведение, полностью определяемое классом.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Что такое Интерфейс и как он связан с классом?

A

И. - набор всех публичных методов класса в совокупности с набором
публичных атрибутов.
И. специфицирует класс, четко определяя все
возможные действия над ним.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Ассоциация

A

означает, что объекты двух классов могут ссылаться один на другой. Композиция и агрегация – частные случаи ассоциации «часть-целое».
«is a» - наследование
«has a» - ассоциаия

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Агрегация

A

Агрегация предполагает, что объекты связаны взаимоотношением «part-of». Student - Course

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Композиция

A

более жесткое отношение , чем агрегация: когда объект не только является частью другого объекта, но и вообще не может принадлежат еще кому-то. Engine - Car.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Связывание метода (binding)

A

Присоединение вызова метода к телу метода

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

early binding

A

статическое или раннее связывание: связывание
проводится компилятором (компоновщиком) перед запуском программы

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

late binding

A

позднее связывание (dynamic или runtime binding) - связывание, проводимое непосредственно во время выполнения программы в зависимости от типа объекта.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Q

Виртуальный метод

A

Метод, который может быть переопределен в классах наследниках так, что конкретная реализация будет определяться во время исполнения.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
26
Q

Различия между ранним и поздним связыванием в Java (3)

A

1) в языке Java Статическое связывание используется для перегруженных методов, динамическое для переопределенных.
2) Следовательно, приватные, статические и терминальные (final) методы разрешаются при помощи статического связывания, поскольку их нельзя переопределять, а все виртуальные методы разрешаются при помощи динамического связывания.
3) В статическом связывании для выбора метода используется тип ссылочной переменной, при динамическом связывании для нахождения нужного метода в Java используется конкретный объект.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
27
Q

Перечислите SOLID принципы

A

https://javarush.com/groups/posts/osnovnye-principy-dizajna-klassov-solid-v-java

https://habr.com/ru/company/ruvds/blog/426413/

S - Single Responsibility - Каждый класс должен иметь только одну зону ответственности.

O - Open-Closed - описываемый класс должен быть открыт для расширения, но закрыт для изменений.

L - Liskov Substitution - Методы, использующие ссылки на базовые классы, должны иметь возможность использовать объекты классов-наследников, не зная об этом.

I - Interface Segregation - клиенты не должны быть вынуждены реализовывать методы, которые они не будут использовать..

D - Dependency Inversion - Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
28
Q

SOLID: Single Responsibility

A

Принцип единственной ответственности: На каждый объект возлагается единственная обязанность, полностью инкапсулированная в класс. Такие классы всегда будет просто изменять и не бояться последствий — влияния на другие объекты.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
29
Q

SOLID: Open-Closed

A

https://habr.com/ru/company/tinkoff/blog/472186/

программные сущности (классы, модули, функции и т.п.) должны быть открыты для расширения, но закрыты для изменения:
классы разрабатываются так, чтобы для подстройки класса к конкретным условиям применения было достаточно расширить его и переопределить некоторые функции.
Это можно решить с помощью интерфейса: он закрыт для изменения, но его можно расширить, добавив новую имплементацию.
=> В хорошо спроектированных программах новая функциональность вводится путем добавления нового кода, а не изменением старого, уже работающего.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
30
Q

SOLID: Liskov Substitution

A

https://habr.com/ru/company/tinkoff/blog/490738/

Объекты в программе можно заменить их наследниками без изменения свойств программы.
Правильная иерархия наследования в ООП — это иерархия, построенная согласно LSP, чтобы отвечать принципу открытости-закрытости.

31
Q

SOLID: Interface Segregation

A

Принцип разделения интерфейсов говорит о том, что слишком «толстые» интерфейсы необходимо разделять на более мелкие и специфические, чтобы клиенты мелких интерфейсов знали только о методах, необходимых в работе. В итоге, при изменении метода интерфейса не должны меняться клиенты, которые этот метод не используют.

32
Q

SOLID: Dependency Inversion

A

Зависимости внутри системы строятся на основе абстракций:
программное обеспечение нужно проектировать так, чтобы модули высокого и низкого уровней были автономными и соединялись друг с другом с помощью абстракции.

33
Q

Какая основная идея языка?

A

«Написано однажды – работает везде» (WORA).
Идея основывается в написании одного кода, который будет работать на любой платформе.

34
Q

За счет чего обеспечивается кроссплатформенность?

A

за счет JRE –
это программа, являющаяся прослойкой между
операционной системой и Java-программой. В среде виртуальной машины выполняются
коды Java-программ. Сама JVM реализована для разных ОС.

35
Q

Какие преимущества у Java?

A
  • ООП
  • Безопасность
  • Кроссплатформенность
  • garbage collector
  • Многопоточность
36
Q

Какие недостатки у java?

A
  • низкая производительность
  • не развитые инструменты по созданию GUI-приложений на чистой java.
  • многословный код
37
Q

кратко определить JDK, JRE, JVM

A
  • JDK позволяет создавать программы запускаемые посредством JRE & JVM
  • JRE создает и запускает JVM
  • JVM отвечает за исполнение программ.
    JDK может включать в себя JRE, которая включает в себя JVM.
38
Q

Что такое JDK? Что в него входит (4)?

A

Основной компонент среды Java, он предоставляет все инструменты, исполняемые и бинарные файлы, которые нужны для компиляции, отладки и выполнения программы. Включает:
- JRE
- Компилятор
- Отладчик
- Базовые Классы

https://topjava.ru/blog/what-is-the-jdk

39
Q

Что такое Cреда Выполнения?

A

Cреда выполнения (окружение) — это часть программного обеспечения, предназначенная для запуска другого программного обеспечения.

40
Q

Что такое JRE? Что в него входит (4)?

A

Runtime Environment.
JRE - это уровень ПО, работающий поверх ОС и предоставляющий дополнительные службы, специфичные для Java.
Она берет Java-код, объединяет его с необходимыми библиотеками и запускает JVM для его выполнения.

Включает:
- Class Loader
- Byte Code Verification
-JVM
- стандартного набора библиотек классов Java.

JRE не содержит инструменты для разработки (компилятор, отладчик и т.д).

https://topjava.ru/blog/what-is-the-jre

41
Q

Что такое JVM? 2 основные функции?

A

JVM — это спецификация программного обеспечения, которое выполняет код и предоставляет среду выполнения для этого кода:
- считывает команды, представленные в class-файлах и транслирует их в виде инструкций процессору.
- Управляет и оптимизирует память, используемую приложением.

JVM является виртуальной машиной, потому что обеспечивает интерфейс, который не зависит от операционной системы и аппаратных средств.

42
Q

Что такое byte code?

A

набор инструкций, скомпилированный компилятором, исполняемый JVM

43
Q

Что такое rt.jar

A

Файл, содержащий классы, входящие в JRE.

44
Q

Что такое загрузчик классов (classloader)?

A

POJO, отвечающий за динамическую загрузку классов в JVM и, соответственно в память.

45
Q

Какие загрузчики классов создаются в начале работы программы?

A
  • базовый (bootstrap) является native «корневым» и частью JVM. Загружает основные системные и внутренние классы JDK из rt.jar и порождает остальные сущности ClassLoader
  • загрузчик расширений (extention).Загружает различные пакеты расширений, которые располагаются в директории <JAVA_HOME>/lib/ext или другой директории, описанной в системном параметре java.ext.dirs.</JAVA_HOME>
  • системный загрузчик (system/application). Загружает классы, пути к которым
    указаны в переменной окружения CLASSPATH или пути, которые указаны в
    командной строке запуска JVM после ключей -classpath или -cp.
46
Q

Иерархия загрузчиков классов

A

Bootstrap -> Extension -> System.
Каждыж загрузчик содержит ссылку на родителя, чтобы делегировать ему загрузку, если сам будет не в состоянии загрузить класс.

47
Q

Как работае Модель Делегирования в Загрузчиках Классов?

A
  • Поиск класса в кэше от потомка к родителю, затем попытки загрузки класса в обратном порядке
  • В случае неудачи генерится ClassNotFoundException
48
Q

Этапы загрузки класса? (3)

A
  1. Loading – поиск и физическая загрузка файла класса из
    определенного источника (в зависимости от загрузчика) . Этот процесс определяет
    базовое представление класса в памяти. На этом этапе такие понятия как
    «методы», «поля» и т. д. пока неизвестны.
  2. Linking – приведение класса в run-time state (готов к исполнению).
    Он может быть разбит на 3 части:
    * Bytecode verification – проверка корректности полученного байт-кода.
    * Class preparation – выделение оперативной памяти под статические поля и инициализация их значениями по умолчанию согласно их типу.
    * Resolution (optional) – загрузка и линковка прочих классов, с которыми связан данный.
  3. Initialization – вызов init метода класса:
    - инициализация статических переменных их значениями
    - инициализация супер классов, если еще не.
49
Q

Как получить экземпляр системного загрузчика?
Как получить экземпляр загрузчика класса А?

A
1. ClassLoader.getSystemClassLoader()
2. A.class.getClassLoader()
50
Q

Что такое LAZY загрузка?

A

Первоначально загружается только один класс. Как только код этого класса обращается к какому-то другому классу (любым способом: вызовом конструктора, обращением к статическому методу или полю), загружается другой класс.

51
Q

Что такое текущий загрузчик?

A

экземпляр некоторого наследника ClassLoader, который загрузил класс, код которого исполняется в данный момент.

52
Q

Как инициировать загрузку требуемого класса?

A
  • явно: вызов ClassLoader.loadClass() или Class.forName() (по умолчанию
    используется загрузчик, создавший текущий класс, но есть возможность и явного
    указания загрузчика);
  • неявно: когда для дальнейшей работы приложения требуется ранее не использованный класс, JVM инициирует его загрузку.
53
Q

Что такое JIT?

A

Подразумевает компиляцию кода, когда это нужно, а не до выполнения программы.
Главный принцип JIT — это не компилировать всю программу, а лишь те ее участки, которые наиболее часто используются пользователем.
Они хранятся в памяти устройства.
В результате быстродействие программ при JIT-компиляции достигается за счет увеличенного потребления памяти устройства.

54
Q

Что такое ссылка? Виды ссылок в Java (4)

A

ссылка - переменная, содержащая адрес ячейки памяти, где хранится объект.
 сильные (strong reference) - запрещено удалять объект
 мягкие (SoftReference) - удалять только при острой нехватке памяти. Подходят для кэша
 слабые (WeakReference) - можно удалять в любой момент. Подходят для метаданных
 фантомные (PhantomReference)- можно удалять в любой момент
Особенности каждого типа ссылок связаны с работой
Garbage Collector.

55
Q

ReferenceQueue

A

сюда попадают ссылки на удаленные объекты

56
Q

Что такое сборщик мусора?

A

Это отдельный поток. Он ведет каждый существующий в HEAP объект и помечает их, и удаляет в зависимости от своих настроек и типа ссылки на конкретный объект.

57
Q

Описать жизненный цикл объекта (4.4)

A

) Все новые объекты, за исключением очень больших, попадают в Young Generation. Очень большие - могут сразу попасть в Old.
2) В первую очередь сборщик собирает Young Generation. Объекты, которые пережили несколько сборок, могут быть “повышены” до Old Generation.
3) Объекты в Old Generation собираются тогда, когда памяти, очищенной в Young Generation, уже недостаточно.
4) Процесс сборки примерно таков:
— 4.1) Пометить все “живые” объекты.
— 4.2) Удалить из памяти все “мертвые” объекты.
— 4.3) (Желательно) Переставить оставшиеся объекты так, чтобы они компактно занимали одну область.
— 4.4) Получилась большая свободная область памяти для новых объектов.

58
Q

Какие принципиальные варианты дизайна сборщика мусора вы знаете? (3.3)

A

1) Последовательный (serial) VS параллельный (parallel) - использовать ли одно ядро процессора или несколько.
2) Действующий параллельно с приложением (concurrent) или “остановись, мгновенье” (stop-the-world”).
3) Уплотняющий (compacting), не уплотняющий (non-compacting) или копирующий (copying).
— 3.1) Уплотняющий сдвигает после очистки оставшиеся живые объекты, чтобы создать за ними большой блок свободной памяти
— 3.2) Не сдвигающий - так и оставляет кусками. Это быстрее, но возникает проблема “влезет ли туда объект”.
— 3.3) Копирующий - копирует (“эвакуирует”) живые объекты в другую область памяти.

59
Q

Как устроена коллекция Young Generation в HotSpot JVM? (5)

A

1) Большая область “Рай” (Eden). В нее помещаются все вновь созданные объекты (кроме очень больших, которые идут сразу в Old).
2) Также есть две области From и To. Область From хранит объекты, выжившие при прошлой сборке мусора. Область To - пустая.
3) При сборке мусора сборщик смотрит области Eden и From. Выжившие объекты в Eden копирует в блок To. Выжившие объекты из блока From могут копироваться в To (если они еще “молодые”) или в блок Old (если уже “старые”).
4) После сборки мусора теперь уже блок From стал пустым, а блок To - заполнен. Они меняются местами.
5) Если Old не может принять все young объекты, ставшие old, GC запускает очистку Old.

60
Q

Какие типы сборщиков мусора в HotSpot JVM вы знаете?

A

1) Последовательный (Serial Collector).
2) Параллельный (Parallel)
3) Параллельный уплотняющий (Parallel Compacting, Parallel Old)
4) Параллельный приложению “метка-удаление” (Concurrent Mark-Sweep, CMS). С Java 9 считается устаревшим.
5) Коллектор G1 (Garbage-First). Модифицированная версия CMS Collector. С Java 9 является коллектором по-умолчанию.

61
Q

Что за алгоритм сборки мусора mark-sweep-compact?

A

1) Сначала размечаем живые и мертвые объекты.
2) Затем очищаем “мертвые” объекты.
3) Затем “уплотняем” живые объекты, смещая их в одно место. Тем самым, свободное место превращается в один большой свободный блок.

62
Q

Опишите сборщик мусора - Serial Collector. (3)

A

1) Serial Collector - однопоточный, копирующий, stop-the-world сборщик.
2) Собирает Young Generation, копируя объекты из блоков Eden и From в To.
3) Собирает Old Generation с помощью mark-sweep-compact.

63
Q

Опишите сборщик мусора - Parallel.

A

Многопоточен при работе с Young, в остальном - как Serial.
1) Parallel Collector - копирующий, stop-the world. Уменьшает pause time по сравнению с Serial за счет многопоточности при сборке Young Generation.
2) Собирает Young Generation, копируя объекты из блоков Eden и From в To. Применяет для этого несколько потоков, тем самым сильно уменьшая pause time.
3) Собирает Old Generation с помощью mark-sweep-compact.

64
Q

Опишите сборщик мусора - Parallel Compacting (Parallel Old).

A

1) Parallel Compacting Collector - копирующий, stop-the world. То же, что Parallel Collector, но применяет многопоточность не только при сборке Young Generation, но и при сборке Old Generation:
Собирает Old Generation с помощью mark-sweep-compact. Делит Old Generation на области для потоков, затем потоки очищают место, затем делает compact свободного места (уже в один поток).

65
Q

Опишите сборщик мусора - Concurrent Mark-Sweep (CMS). (x+5)

A

Young Generation собирается ровно так же, как в Parallel Collector.
Сбор Old Generation разбивается на фазы:
— 1) Начальная метка (Initial mark) - короткая stop-the-world, помечаются “живые” объекты, на которые напрямую ссылается приложение.
— 2) Параллельная приложению Marking Phase - проход по ссылкам помеченных объектов и пометка “живыми” объектов, на которые ссылаются помеченные объекты.
— 3) Короткая stop-the world фаза Remark. Еще раз пройтись по всем помеченным объектам и проверить, что они не умерли, пока шла предыдущая фаза.
— 4) Наконец, идет параллельная приложению Sweep Phase, во время которой помеченные объекты очищаются, освобождая место.
—- 5) Фазы Compact у этого коллектора нет - и в этом его большой минус.

66
Q

Опишите сборщик мусора - G1 (Garbage First). Его основные отличия от CMS? (2)

A

Коллектор G1 является заменой Concurent Mark-Sweep (CMS) коллектора и коллектором по-умолчанию с Java 9.
Два главных отличия от CMS:
(1) Коллектор G1 группирует живые объекты (compacting), не допуская большой фрагментации памяти.
(2) Коллектор стремится минимизировать stop-the-world паузы и делает их меньше, чем CMS, за счет разбивания Old Generation на регионы.

1) Каждый регион может быть частью Young или Old generation - по мере надобности.
2) В первую очередь G1 старается освобождать память в регионах с малым количеством живых объектов - отсюда - “Garbage first”.
3) В Young идет копирование из региона Eden в другой регион Survivor (аналог To). В Old идет initial mark, concurrent mark, remark. Только вместо concurrent sweep идет concurrent copy живых объектов в другой регион, за счет чего и происходит уплотнение.

67
Q

Какие типы памяти в JVM вы знаете?

A

1) Heap
2) Stack
3) MetaSpace (с Java8).
4) До Java8 вместо MetaSpace была область PermGen в Heap.

68
Q

Расскажите про тип памяти Heap. (4)

A

1) Абсолютно все объекты, созданные в ходе работы приложения, размещаются в heap.
2) Обычно делится на Young и Old Generation.
3) Работает медленнее, чем Stack память.
4) Если нет места под объект после сборки мусора, выкидывается OutOfMemoryException

69
Q

Расскажите про тип памяти Stack. (6.4)

A

1) Stack (стек) - область памяти для хранения ЛОКАЛЬНЫХ переменных, создаваемых в методе.
2) Stack значительно меньше, чем Heap, скорость доступа - значительно быстрее.
3) Память Stack не требует сборщика мусора - блок полностью очищается при выходе из метода.
4) Если локально создается объект, то сам объект помещается в Heap, а ссылка на него - в Stack.
5) Если память стека полностью занята (н-р бесконечная рекурсия), выбрасывается StackOverflowException.
6.1) Устройство: по принципу LIFO. Вызван метод - ему выделяется блок стек-памяти и кладется “сверху”.
6.2) Внутри вызван подметод - выделяется еще блок памяти и кладется “сверху”.
6.3) Всегда доступен только последний, самый “верхний” блок памяти.
6.4) Метод отработал - его верхний блок памяти очищается, становится доступен более нижний блок

70
Q

Что такое MetaSpace? В чём отличие от PermGen? (5)

A

1) MetaSpace - область памяти, отдельная от Heap. Зарезервирована JVM для размещения классов, методов, статических переменных.
2) В отличии от PermGen умеет автоматически расширяться, пока позволяет операционная система (или до заданного макс. значения).
3) MetaSpace появилась в Java 8+ как замена PermGen.
4)В отличии от PermGen проверяется сборщиком мусора на “мертвые объекты”.
5) Раньше класс загружался вместе с JVM и умирал с ее выключением. Сейчас есть динамическая загрузка/выгрузка классов в ходе жизни JVM. Отсюда - нужна сборка “мертвых” классов и расширение под добавленные.

71
Q

Расскажите про String Pool в Java (5)

A

1) String Pool - область памяти, где хранятся объекты строк для многоразового использования.
2) В пул попадают строки, созданные с помощью литералов или строки, на которых вызван string.intern().
3) До Java 7 String Pool находился в PermGen. Не проверялся сборщиком мусора, нет возможности расти.
4) В Java 7+ String pool находится в heap, проверяется сборщиком мусора и может возрастать.
5) Начальный размер пула можно задать в ключах запуска JVM

72
Q

Что такое литерал?

A

Литералы — это явно заданные значения в коде программы: константы определенного типа, которые находятся в коде в момент запуска.
- Числовые:
- Целочисленные;
- С плавающей точкой;
- Строковые;
- Символьные;
- Логические.

73
Q

Расскажите про Integer pool в Java. (4)

A

1) Часть пула объектов-оберток примитивов. Он создается статически, при инициализации соответствующего класса.
2) По спецификации пул используется для переменных: 1) byte и boolean; 2) int и long в интервале [-128…127] и 3) char в интервале [0…127].
3) Для таких объектов при автобоксинге (а также при вызове метода valueOf()) не будет создаваться новый объект, а будет возвращаться объект из пула.
4) Например, Integer.valueOf(127) == Integer.valueOf(127), а вот Integer.valueOf(128) != Integer.valueOf(128).