Java >> Java tutorial >  >> Tag >> Spring

Fjernelse af sun.misc.Unsafe i Java 9 vil bryde Spring, Hibernate

Mark Reinhold havde en tale under JVM Language Summit 2015 med titlen The Secret History and Tragic Fate of sun.misc.Unsafe . Selvom disse samtaler har masser af ansvarsfraskrivelser på dem, kan du se den foreslåede tilgang kl. 10:23, som er beskrevet i JEP260.

Den generelle idé er:

  1. erstat eksisterende funktionalitet med sikrere, understøttede API'er
  2. udvis den tidligere eksisterende Unsafe API'er, der er blevet erstattet
  3. fjern den forældede kode i næste version

Her er noget relevant tekst fra JEP260 (taget fra 20. oktober 2015):

I JDK 9 foreslår vi at:

  • Indkapsl alle ikke-kritiske interne API'er som standard:Modulerne, der definerer dem, eksporterer ikke deres pakker til ekstern brug. (Adgang til sådanne API'er vil være tilgængelig, som en sidste udvej, via et kommandolinjeflag på både kompileringstidspunkt og køretid, medmindre disse API'er revideres eller fjernes af andre årsager.)

  • Indkapsl kritiske interne API'er, for hvilke der findes understøttede erstatninger i JDK 8, på samme måde og med samme sidste løsning. (En understøttet erstatning er en, der enten er en del af Java SE 8-standarden (dvs. i en java.*- eller javax.*-pakke) eller JDK-specifik og annoteret med @jdk.Exported (typisk i en com.sun. * eller jdk.* pakke).)

  • Ikke indkapsle kritiske interne API'er, for hvilke understøttede erstatninger ikke eksisterer i JDK 8, og udelad endvidere dem, der har understøttede erstatninger i JDK 9 med den hensigt at indkapsle dem, eller muligvis endda fjerne dem, i JDK 10.

...

Kritiske interne API'er, for hvilke der er indført erstatninger i JDK 9, vil blive udfaset i JDK 9 og enten indkapslet eller fjernet i JDK 10.


Måske er referencerne ikke i kernen af ​​Spring eller Hibernate, men et andet sted. Det linkede dokument siger med hensyn til Spring

Spring Framework (via Objenesis, med en fallback)

Jeg forsøgte at søge efter anvendelser af Unsafe i det projekt, jeg arbejder på i øjeblikket, så der er stadig en del biblioteker, som kan gå i stykker.

resultat af hurtig søgning:

  • Guava
  • GWT
  • Netty
  • Jersey-Common
  • Infinispan
  • Jboss-moduler

Denne ressource giver en ordentlig forståelse af den aktuelle status for JDK 9 og dens funktioner. Fællesskabet startede en diskussion relateret til Unsafe og dets fremtid i Javas fremtid. Det givne dokument er fællesskabets indsats for at reagere på JEP-260, der foreslår at skjule nogle interne API'er, men at efterlade nogle kritiske API'er tilgængelige, blandt heksen Unsafe. Som uddrag fra selve dokumentet:

De kritiske interne API'er, der foreslås at forblive tilgængelige i JDK 9, er:

sun.misc.Cleaner

sun.misc.{Signal,SignalHandler}

sun.misc.Unsafe (Funktionaliteten af ​​mange af metoderne i denne klasse er nu tilgængelig via variable håndtag (JEP 193).)

sun.reflect.Reflection::getCallerClass (funktionaliteten af ​​denne metode kan leveres i en standardform via JEP 259.)

sun.reflect.ReflectionFactory

Så for at konkludere, i det mindste baseret på den givne JEP, bør Unsafe forblive.


Java tag