Разница между страницами «Gitlab» и «JDK»
FireWolf (обсуждение | вклад) (Новая страница: «Категория:Работа = Вычистить docker registry v = https://gbougeard.github.io/blog.english/2017/05/20/How-to-clean-a-docker-registr…») |
FireWolf (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
= Reference: Weak, Soft, Phantom, Strong = | |||
https://habr.com/ru/post/169883/ | |||
= | = Memory = | ||
[[Файл:Memory diagram.png|мини]] | |||
https://stackoverflow.com/questions/10209952/what-is-the-purpose-of-the-java-constant-pool | |||
= Java Memory Model (JSR 133) - лучшее = | |||
https://habrahabr.ru/company/golovachcourses/blog/221133/ | |||
== final-поля == | |||
Значения для final-полей объекта задаются в конструкторе. Если предположить, что объект построен «правильно», то как только объект построен, значения, присвоенные final-полям в конструкторе будут видны всем другим потокам без синхронизации. | |||
Пример: | |||
<syntaxhighlight> | <syntaxhighlight> | ||
public FinalFieldExample() { // bad! | |||
x = 3; | |||
y = 4; | |||
// bad construction - allowing this to escape | |||
global.obj = this; | |||
} | |||
</syntaxhighlight> | </syntaxhighlight> | ||
в этом случае нет гарантии, что поток, прочитавший ссылку на данный объект из global.obj прочитает 3 из x. | |||
Или не явный пример: | |||
<syntaxhighlight> | |||
public class EventListener2 { | |||
public EventListener2(EventSource eventSource) { | |||
eventSource.registerListener( | |||
new EventListener() { | |||
public void onEvent(Event e) { | |||
eventReceived(e); | |||
} | |||
}); | |||
} | |||
public void eventReceived(Event e) { | |||
} | |||
} | |||
</syntaxhighlight> | |||
= Отладка = | |||
== Удаленная отладка из Eclipse == | |||
Старт приложения (на примере spring boot) с портом для отладки 8888 | |||
<syntaxhighlight> | |||
$ JAVA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:8888,server=y,suspend=n -Dspring.profiles.active=dev,swagger,liquibase" ./app-0.0.1-SNAPSHOT.war | |||
</syntaxhighlight> | |||
В Eclipse выбрать Debug configurations... -> Remote Java Application -> New, исправить порт и нажать Debug | |||
= Порядок модификаторов private static final = | |||
Порядок формально не определен, но лучше придерживаться как написано в JLS '''private static final''' |
Версия 09:09, 31 мая 2019
Reference: Weak, Soft, Phantom, Strong
https://habr.com/ru/post/169883/
Memory
https://stackoverflow.com/questions/10209952/what-is-the-purpose-of-the-java-constant-pool
Java Memory Model (JSR 133) - лучшее
https://habrahabr.ru/company/golovachcourses/blog/221133/
final-поля
Значения для final-полей объекта задаются в конструкторе. Если предположить, что объект построен «правильно», то как только объект построен, значения, присвоенные final-полям в конструкторе будут видны всем другим потокам без синхронизации.
Пример:
public FinalFieldExample() { // bad!
x = 3;
y = 4;
// bad construction - allowing this to escape
global.obj = this;
}
в этом случае нет гарантии, что поток, прочитавший ссылку на данный объект из global.obj прочитает 3 из x.
Или не явный пример:
public class EventListener2 {
public EventListener2(EventSource eventSource) {
eventSource.registerListener(
new EventListener() {
public void onEvent(Event e) {
eventReceived(e);
}
});
}
public void eventReceived(Event e) {
}
}
Отладка
Удаленная отладка из Eclipse
Старт приложения (на примере spring boot) с портом для отладки 8888
$ JAVA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:8888,server=y,suspend=n -Dspring.profiles.active=dev,swagger,liquibase" ./app-0.0.1-SNAPSHOT.war
В Eclipse выбрать Debug configurations... -> Remote Java Application -> New, исправить порт и нажать Debug
Порядок модификаторов private static final
Порядок формально не определен, но лучше придерживаться как написано в JLS private static final