Oracle планирует убрать sun.misc.Unsafe в Java 9. Очень негативно подобное решение может сказаться на всей экосистеме. Кто не в теме, можете почитать об этом звере. Если вкратце, то это приватное API использовалось для низкоуровневого программирования: напрямую работать с памятью и т.п.

Чтоб оценить размах, можно глянуть список проектов, которые используют unsafe:

  • Netty
  • Hazelcast
  • Cassandra
  • Mockito / EasyMock / JMock / PowerMock
  • Scala Specs
  • Spock
  • Robolectric
  • Grails
  • Neo4j
  • Spring Framework
  • Akka
  • Apache Kafka
  • Apache Wink
  • Apache Storm
  • Apache Hadoop
  • Apache Continuum



Небольшой комментарий из переписки:
Let me be blunt — sun.misc.Unsafe must die in a fire. It is — wait for it — Unsafe. It must go. Ignore any kind of theoretical rope and
start the path to righteousness


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

Из предложений (взамен полного удаления пакета) можно выделить:
  1. Задокументировать это API вместо полного выпиливания. А так же сделать публичным.
  2. В то же время Oracle должны сделать публичную альтернативу Unsafe с тем же функционалом, чтоб люди потихоньку переходили на него. В таком случае люди автоматически откажутся от Unsafe и переведут постепенно проекты на новое API.


Что-то подобное было с bytecode verifier в Java 7.

СЕО Hazelcast Greg Luck предлагает, если всё же API будет выпилено, оставаться на Java 8 и не переходить на девятку (которая предположительно выдйте в 2016).

Комментарии (19)


  1. Envy
    29.07.2015 14:36

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


    1. seregamorph
      29.07.2015 14:52
      +9

      Этот принцип не распространяется на приватные API.


  1. chabapok
    29.07.2015 14:38

    Если они не предложат ничего взамен, то скорей всего полностью не уберут. Потому что безопасность-безапосностью — но работать тоже ведь как-то надо.

    Когда-то, например, они обещали задепрекейтить в 7 и совсем убрать в 8 метод sun.reflect.Reflection.getCallerClass(int) — а этот метод используется логгерами. Сейчас проверил с 1.8.0-45 — этот метод помечен deprecated, но все еще есть.


  1. vladimir_dolzhenko
    29.07.2015 14:52
    +7

    Черт бы вас всех побрал — хватит истерить уже — никто не планирует его выбрасывать! Не надо поднимать панику, не разобравшись в вопросе.


    1. Suvitruf Автор
      29.07.2015 14:55
      -3

      Много профильных сайтов об этом сообщало. Если у вас есть достоверная информация на этот счёт, с радостью добавлю в статью.


      1. vladimir_dolzhenko
        29.07.2015 15:03
        +2

        Могу отправить на twitter Леши Шипилева и ко. — потом еще вопрос всплывал в Разборе полетов: Прогулки по минным полям — там вроде и ссылки были куда дальше — словом можно при желании покопать и найти, если есть желание выдавать не истерические вопли, а по делу.


    1. vladimir_dolzhenko
      29.07.2015 15:00

      Пожалуй стоит развернуть чуть подробней:
      — в java 9 таки введут модульность, и все private API станут доступны только изнутри corelib — как это было задумано изначально — однако изначально нельзя было это реализовать технически в виду отсутствия той самой модульности — и получить просто так Unsafe нельзя даже сейчас — нужно делать 3 приседания с reflection.
      — public api для таких низкоуровневых вопросов давно уже напрашивался — и в общем-то не удивительно, что за него взялись и товарищи из Hazelcast, Peter Lawrey и прочие шаманы — в конце концов вариантов еще допилить в OpenJDK н-р через какие-нибудь intrinsic-и java классы типа ByteBuffer никто не запрещал
      — хватит истерить уже! Вопрос далеко не вчера возник и даже не в этом году — почему только сейчас все об этом вспомнили?


      1. Suvitruf Автор
        29.07.2015 15:09

        Вопрос про unsafe да. Но лента у меня полна статьями про это последние пару дней. Если не всё так плохо, то это радует.


        1. msd
          29.07.2015 15:20

          к примеру, вот презентация за 2014 год — www.oracle.com/technetwork/java/jvmls2014sandoz-2265216.pdf и там уже говорится, что sun.misc.Unsafe (is going away) will be made in accessible.


          1. vladimir_dolzhenko
            29.07.2015 15:25

            It is not a commitment to deliver any
            material, code, or functionality, and should not
            be relied upon in making purchasing
            decisions. The development, release, and
            timing of any features or functionality
            described for Oracle’s products remains at
            the sole discretion of Oracle.


            1. msd
              29.07.2015 15:31

              я о том, что об это реально говорят давно, а паника началась только сейчас почему-то :)


              1. vladimir_dolzhenko
                29.07.2015 15:34

                Согласен. Я к тому, что inaccessible может быть реализовано по разному — н-р и в java8 нельзя получить Unsafe через SecurityManager (привет апплеты).


        1. vladimir_dolzhenko
          29.07.2015 15:22

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


          1. Suvitruf Автор
            29.07.2015 15:26

            javaworld.com и т.п.


            1. vladimir_dolzhenko
              29.07.2015 15:29

              Читал — тот же истеричный тон, что у и одной изначальной статьи Removal of sun.misc.Unsafe in Java 9 — A disaster in the making.


              1. Suvitruf Автор
                29.07.2015 15:40
                -2

                То есть, это явная истерия, не более? Просто по вашим ссылкам наблюдаю рассуждения, но явного опровержения нет.


                1. vladimir_dolzhenko
                  29.07.2015 15:52
                  +1

                  Опровержения чему?
                  Unsafe таки еще больше закроют от посторонних глаз в Java9 — но будут и флажки, чтобы пока еще работать по старому — т.е. скорее стоит воспринимать java9 как вариант, где будет возможность чуть с большим приседанием, но таки получить тот самый Unsafe
                  — Идет работа над public API той функциональности, которая доступна из Unsafe — в идеале было бы хорошо, чтобы новый public API был уже в java9 — и можно было бы мигрировать на него
                  — Проблеме не первый месяц срок


  1. freehome
    29.07.2015 15:13
    +1

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


  1. Walrus
    29.07.2015 15:40
    +2

    «На четвёртый день Зоркий Сокол заметил, что одной стены нет»