Разница между страницами «Gitlab» и «JDK»

Материал из Home Wiki
(Различия между страницами)
Перейти к навигации Перейти к поиску
(Новая страница: «Категория:Работа = Вычистить docker registry v = https://gbougeard.github.io/blog.english/2017/05/20/How-to-clean-a-docker-registr…»)
 
 
Строка 1: Строка 1:
[[:Категория:Работа]]
= Reference: Weak, Soft, Phantom, Strong =


https://habr.com/ru/post/169883/


= Вычистить docker registry v =
= Memory =
[[Файл:Memory diagram.png|мини]]
https://stackoverflow.com/questions/10209952/what-is-the-purpose-of-the-java-constant-pool


https://gbougeard.github.io/blog.english/2017/05/20/How-to-clean-a-docker-registry-v2.html
= Java Memory Model (JSR 133) - лучшее  =


https://habrahabr.ru/company/golovachcourses/blog/221133/


== final-поля ==


Attention: rming files on the storage and running the GC are critical operations : your DR must be in Read-Only mode. No image must be pushed while you’re performing those ops.


There are 2 files to rm to cleanly remove a digest :
Значения для final-полей объекта задаются в конструкторе. Если предположить, что объект построен «правильно», то как только объект построен, значения, присвоенные final-полям в конструкторе будут видны всем другим потокам без синхронизации.


Пример:
<syntaxhighlight>
<syntaxhighlight>
<root>/v2/repositories/${name}/_manifests/tags/${tag}/index/sha256/${hash}
public FinalFieldExample() { // bad!
<root>/v2/repositories/${name}/_manifests/revisions/sha256/${hash}
    x = 3;
# ${name} : image name
    y = 4;
# ${tag} : tag name
    // bad construction - allowing this to escape
# ${hash} : digest to delete
    global.obj = this;
}
</syntaxhighlight>
</syntaxhighlight>


After deleting the 2 files, you can run the GC and it should free some space.
в этом случае нет гарантии, что поток, прочитавший ссылку на данный объект из 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>


registry garbage-collect /var/opt/gitlab/registry/config.yml
В 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

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-полям в конструкторе будут видны всем другим потокам без синхронизации.

Пример:

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