Есть ли способ обновить ссылку каждого объекта в куче JVM? - PullRequest
0 голосов
/ 23 января 2019

Предположим, у меня есть следующий код:


    public class Main {
      public static String foo;

      public static void main(String[] args) {
        Main.foo = new String("a");
        String a = Main.foo;

        Main.foo = new String("b");
        // TODO update a's reference

        String b = Main.foo;
      }
    }

, который создает статическую переменную с именем foo с помощью new String("a");, а затем назначает ее переменной a.Затем он повторно вводит foo с new String("b"); и присваивает его переменной b.В этот момент и, как и ожидалось, a и b "указывают" на разные Main.foo: a указывает на предыдущую версию Main.foo, а b указывает на самую последнюю версию Main.foo.

Хотя код работает, как и ожидалось, я хотел бы автоматически обновлять ссылку a и b каждый раз, когда Main.foo изменяется.То есть каждый раз, когда статическая переменная Main.foo изменяется, ссылка на переменные a и b должна обновляться и указывать на самое последнее значение.

Обратите внимание, что я не могу контролироватьисходный код.Следовательно, любое предлагаемое решение может включать в себя инструментарий байт-кода или любое другое решение, которое не требует каких-либо изменений в исходном коде.

Стоит ли изучать что-то вроде класса toAddress/fromAddress из sun.misc.Unsafe?Должен ли я пойти еще глубже и использовать Java Native Interface (JNI)?Или, может быть, мне понадобится код инструмента и реализовать что-то вроде прокси-шаблона или наблюдателя ?

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...