
[Musica]
quindi benvenuto a questo discorso su Java 9 I
ho cercato di capire cosa sarebbe stato di più
interessante per la maggior parte dei programmatori Java
Java 9 come tale è stato rilasciato in
Settembre quindi è un paio di settimane fa
per così dire, non so quante persone
hanno già una seria intenzione di trasferirsi
su Java 9 è probabilmente interessante
per imparare un po ‘ sul modulo
sistema perché penso che sia così
la funzionalità di Java 9 che colpirà di più
persone quando provano a migrare a Java
9 ma non voglio parlare solo di
il sistema del modulo Java sì, c’è un
elenco degli argomenti che ho scelto ci sono
alcune ottimizzazioni riguardo l’uso di
stringhe ci sono un paio di cambiamenti
modifiche molto minori lo farò brevemente
dì loro che c’è qualcosa in merito
letterali di collezione che mostrerò
tu che potresti venire utile ma è un
caratteristica molto piccola perché questa è la
grande funzionalità di Java 9 e poi lo farò se
il tempo consente di scavare un po ‘ più a fondo
riguardo a cose che potresti non avere
state usando fino ad ora alcune applicazioni
quadri e librerie usano pacchetti
Pacchetti interni Java / JDK che ora
che il JDK è modulare è no
più disponibile e che probabilmente lo farà
creare qualche problema e ci sono Java
proposte di estensione e sforzi sul
modo per venire con sostituzioni per
questi pacchetti interni, ma questi sono
cose che sono state rese disponibili in
Java 9 in parte, ma la parte principale è
ancora in arrivo e arriverà in uno di
le versioni future di Java come Java
1011 forse 12 non sappiamo che ci sono
molte molte altre caratteristiche che non lo farò
menzione in realtà hanno troppe diapositive così
non essere deluso se saltero una coppia
di loro avrai il mazzo completo di
diapositive quando li scarichi ok
riguardo a me sto lavorando come ero abituato
lavoro come sviluppatore e in via di sviluppo
in C ++ e Java e poi ho iniziato a farlo
allenamento per vivere per quasi 20 anni
anni intanto e così ogni volta lì
è un nuovo
Versione di Java Dare un’occhiata a cosa
potrebbe essere interessante e quale conoscenza
deve essere distribuito per poter essere gestito
la nuova e la prossima versione così ho guardato
nei generici Java con Java 5 o
guardato in lambda e scorrere attraverso
Java 8 e in realtà ho esaminato Java 9
ok quindi iniziamo con la raccolta
alfabetizzazione qualcuno ricorda Java 7 è
per Java 7 Sun Microsystems in quel momento
ha chiesto alla comunità Java di osservare il mio
proposte linguistiche di caratteristiche o
convenienza che vorrebbero avere e
una delle proposte che è stata sollevata da
le comunità java volevano a
sintassi conveniente per la creazione di piccoli
collezioni immutabili e loro no
sono venuti a risolvere quel problema per Java 7
ora con una soluzione per Java 9
ciò che è stato discusso per Java 7 è il
sintassi che ho mostrato lì
la sintassi non esiste che non hanno risolto
il problema in Java 9 estendendo il
lingua e creando invece una nuova sintassi
ci hanno dato una soluzione basata sulla libreria così
quello che avremo è spento funzioni in
varie interfacce in java.util
pacchetto così oggigiorno con Java 9 è possibile
crea una lista e poi solo
enumerare la coppia di elementi che
si desidera visualizzare in tale elenco immutabili
di pochi elementi e questo è in linea
con altre 50 funzionalità che avevamo già
le collezioni si interfacciano già a
qualcosa come voglio creare un vuoto
lista Voglio creare un elenco di uno
elemento un elenco singleton e ora è possibile
di ‘una lista di qualcosa di qualcosa
e tutte queste collezioni sono immutabili
collezioni con il numero di elementi
che hai elencato in questa funzione di fabbrica
chiamato fuori ok allora ci sono un paio di
altre caratteristiche linguistiche minori dubito
che qualcuno di voi in realtà le mancava
uno di questi è che potresti ricordarlo
con i metodi di interfaccia Java 8 erano
ha inventato metodi così statici e predefiniti
nelle interfacce che hanno un
implementazione e dal momento che tutto in
un’interfaccia è pubblica e tutte queste impostazioni predefinite
e anche i metodi statici dovevano essere pubblici
e alcune persone esprimono il desiderio che
volevano avere privato
metodi a due facce come metodi di supporto
per questi metodi di interfaccia pubblica e
questo è permesso no in Java mangia
ramen non mi era permesso mangiare a Java allora
abbiamo un operatore di diamanti con
classi anonime l’operatore diamante
è stato aggiunto in con ricordi Java 7 penso
sei o sette l’ operatore diamante è
convenienza se si creano oggetti di a
tipo generico come un thread locale di lista
di una coppia di qualcosa allora hai un
nome del tipo molto lungo quando si crea un
variabile di questo tipo devi
specificare il nome del tipo molto lungo
digitando quindi hai un nome variabile e
quindi in genere si desidera inizializzarlo
creando un nuovo oggetto di quel tipo
e così quando dici nuovo oggetto si dispone
per ripetere l’intero nome del tipo e così via
hanno inventato un operatore di diamanti
sto dicendo okay
il compilatore può dare un’occhiata al
lato sinistro del mio incarico e
capire che tipo è effettivamente così
che non devo digitare tutto così
con Java 7 potresti già dire che voglio
avere un filo locale dell’angolo vuoto
parentesi e il compilatore potrebbe capire
fuori il resto del tipo e questo non era
disponibile per la creazione di classi anonime
e ora con Java 9 possiamo anche usare il
operatore di diamanti quando creiamo
sottoclassi di classe anonima di qualche tipo
di parametrizzare il tipo generico quindi loro
cambia le provate entrambe le risorse finora
con prova con risorse dovevi
crea la variabile e l’oggetto in
davanti al blocco try e al giorno d’oggi con
Java 9 puoi usare una variabile finale
invece in modo che tu possa creare un oggetto
che è già stato creato prima di te
inserire l’ ordine del blocco try che aveva o
che è stato passato a un a
funzione come argomento finale per il
la funzione e quindi si potrebbe usare che in
il blocco try che non era possibile
prima di Java notte nessuno ha usato il
sicuro Vioxx una notazione di sempre, oh, facciamolo
tienilo intendo che è un complicato
cosa per quanto riguarda la combinazione di
liste di argomenti variabili con parametro
sono i tipi e le parole sicure a che fare con
che ora è disponibile su privato
metodi di istanza a
e un’altra cosa la sottolineatura è ora
un identificatore illegale era legale
prima di Java 9 ora è illegale perché
vogliono usare in combinazione con
espressioni lambda in futuro
la versione di Java va bene questi sono gli unici
i cambi di lingua si vedono cose minori no
davvero eccitante cosa potrebbe essere di più
interessante è l’ottimizzazione per quanto riguarda
il consumo di memoria e il
esecuzione di archi una cosa loro
già aggiunto in Java 8, l’aggiornamento 20 è il
deduplicazione stringa che cosa hanno fatto è
cambiano o hanno costruito nel
prima la spazzatura
collezionista una caratteristica che la spazzatura
il primo collezionista sa come quando
vede le stringhe duplicate poi D
duplica le corde mette le corde
in un denaro e quindi in tal modo cerca di
ridurre il consumo di memoria delle stringhe
quindi l’osservazione era quella in un normale
Applicazione Java qualunque cosa possa essere
circa un quarto della memoria heap è
occupato da archi e l’idea siamo noi
voglio ridurre il consumo di memoria
per accelerare la spazzatura
collezione fondamentalmente per utilizzare lo spazio
più economicamente e uno sforzo è stato
cambiando la spazzatura prima spazzatura
collezionista ciò che effettivamente fa è
durante la sua fase di marketing quando lo fa
una raccolta dei rifiuti di cui ha bisogno
identificare tutti gli oggetti raggiungibili e
in tal modo segna e visita tutto il
oggetti raggiungibili e tra loro di
corso tutte le stringhe e ogni stringa ha
una serie allegata e poiché le bevande sono
oggetti immutabili l’array mai
cambia quindi il contenuto della stringa
non cambia mai e ne approfitta
questo fatto se trovano un array allegato
a una stringa ciò che la spazzatura prima a
Garbage Collector lo mette in un
cache e la prossima volta ne trova un altro
array cerca se ha già
la stessa matrice con lo stesso contenuto in
la cache e poi cambia la seconda
stringa oggetto per poter utilizzare lo stesso
array di cache così strettamente parlando è
non stringa la deduplicazione ma è
duplicazione di una razza collegata a
stringhe e questa è una caratteristica che tu
può accendere / spegnere, dice che c’è una JVM
opzione di avvio e se ne hai molte
duplicati potresti vedere qualche beneficio a
riduzione del consumo di memoria se di
Certo , non hai quasi nessuna corda
deduplica o duplica il
la deduplica ti costerà solo te
devi davvero se provi tu
Dare un’occhiata al consumo
altrimenti pagheresti solo per il
la cache e la cache cercano e
non farebbe nulla di buono quindi è un
opzione che puoi attivare se tu
usa il primo raccoglitore di spazzatura che di
il modo è il garbage collector predefinito
in Java 9 sì sì, se non si specifica
quale algoritmo di raccolta dei dati inutili
utilizzare quando si avvia la JVM
al giorno d’oggi in Java 9 hanno la spazzatura
primo raccoglitore come raccoglitore predefinito
ok allora la compattazione della stringa è qualcosa
che abbiamo davvero aggiunto in Java 9
l’osservazione è il 90% di tutte le stringhe
sono codificati o utilizzati e codifiche che possono
essere rappresentato da un solo byte e
c’è solo una piccola parte che davvero
ha moltiplicato le codifiche e ha davvero bisogno
un personaggio che in Java è 2 byte
tanto che la maggior parte delle volte la metà del
spazio che lo spazio heap è
occupato da archi va inutilizzato perché
non abbiamo bisogno di metà del personaggio e
quindi quello che fanno oggigiorno è che fanno a
compattazione della stringa nel cambiamento
ogni volta che crei una stringa , prendono un
guarda il contenuto della stringa e al giorno d’oggi
la stringa è rappresentata da un byte
array invece di un array di caratteri e a
la bandiera che dice è un byte
codifica o abbiamo davvero bisogno di caratteri
una codifica a 2 byte e così ogni volta che lo è
possibile e fattibile si limitano a ridurre
a un array di byte più un flag di codifica
e se la codifica dice ok, deve essere
in più parti ho davvero bisogno del personaggio
i due byte per carattere poi loro
interpreto anche l’array di byte due
byte alla volta interpretano questo come a
array di caratteri in modo da fare questo penso
è l’impostazione predefinita che non è necessario
accendilo ok
poi qualcosa che colpisce l’interno
gestione della concatenazione di stringhe finora
probabilmente conosci quella stringa
concatenazione usando la stringa più
l’operatore è una cosa abbastanza costosa
perché per ogni concatenazione Java ha
creare una nuova stringa perché il
gli oggetti a corda sono immutabili per te
creare se si fa una concatenazione di
stringhe
ciao più parola, più qualcos’altro che
creare un sacco di stringhe temporanee che a
molte copie vanno bene così loro
ottimizzare questo in Java cinque qualsiasi cosa e
il Java vede il compilatore statico di Java C
imparato a sostituire la concatenazione di stringhe
sequenze usando un generatore di stringhe e
append builder e una stringa di due stringhe
operazione alla fine quindi questo è uno
cosa non è ottimale in tutti i casi
perché inizia con un equo
breve stringa anche se sappiamo che il
la concatenazione di stringhe porterebbe a a
grande stringa non c’è ottimizzazione
come usare una capacità pre calcolata per
la stringa in modo che sviluppi la capacità
col passare del tempo che è inefficiente intendo noi
potrebbe fare di meglio e poi c’è un
seconda parte della costruzione che prende anche
cura di ottimizzare la concatenazione di stringhe
e questo è nel just-in-time
compilatore hotspot e hotspot di output
compilatore se si specifica questo
stringa ottimizzata Concord of team ization
cerca anche di fare aggressivo
ottimizzazioni mmm
aggressivo è già ti dice che è
una specie di fragile difficile ottimizzazione
e quindi hanno fondamentalmente due
siti di costruzione il compilatore java c
che cerca di ottimizzare la stringa
concatenazione e il compilatore hotspot
e cercano di semplificarlo e cosa
lo fanno oggigiorno in Java 9 quando è lì
è una sequenza di concatenazione di stringhe
il compilatore java c non ne fa nessuno
ottimizzazioni invece emette
un invoke codice byte dinamico
invokedynamic è uno dei codici byte
invokedynamic è disponibile da allora
Java 7 e inizialmente non è stato aggiunto
per l’utilizzo da parte di Java, ma era un codice byte
che era stato aggiunto
per supportare altre lingue che vengono eseguite
cima alla JVM e che ha avuto difficoltà
con invocare static invoke virtual e
invocare speciali i tre codici byte che
sono stati progettati per invocare metodi Java
perché le altre lingue hanno differenti
idee su come cercare metodi e come
invocarli per la chiamata
sequenze e quindi avevano bisogno di qualcosa
questo è più flessibile e poi loro
aggiunto invocare dinamico e il punto chiave
di invocare la dinamica è chiunque emetta questo
bytecode deve anche fornire ciò che è
chiamato una meta fabbrica che è fondamentalmente
una descrizione di ciò che è invocato dinamico
dovrebbe fare in fase di esecuzione e questo è
molto flessibile e lo usano qui dentro
per aggiungere una questione di fabbrica
dice ok, dobbiamo fare una stringa
concatenazione in questo posto e poi
internamente alla JVM quando viene eseguita
runtime può capire cosa fare basandosi
sulla meta Factory e può applicare qualsiasi
tipo di ottimizzazione con cui oggigiorno
questa riorganizzazione della stringa
concatenazione hanno un posto dove
possono fare tutte le ottimizzazioni che è
fatto in fase di esecuzione ed è interamente
interno in modo da non notarne nessuno
questo è solo un cambiamento che lo rende
più facile mantenere ed evolvere la JVM
un’altra cosa relativa alle stringhe è buona
abbiamo questa funzione di condivisione dei dati di classe
per un po ‘di tempo non ricordo per quanto tempo
ma hanno cercato di ridurre l’avvio
tempo e impronta di JVM molto tempo fa
creando i cosiddetti archivi condivisi
quando distribuiscono il JDK, creano un
archivi condivisi e questi condivisi
gli archivi in genere contengono classi di classi
file fondamentalmente già preparati caricati
classi che all’avvio della JVM sono
semplicemente mappato nella memoria e l’idea
è stato risparmiato il tempo per la lezione vera e propria
caricamento se prepariamo cose come oggetto
e buttabile tutte le cose che ogni
l’applicazione ha già bisogno e questi
archivi di dati condivisi sono stati in giro
per un bel po ‘e loro sono un
sforzo per accelerare l’ avvio e ora
usano anche questi archivi di dati condivisi
per inserire tutte le stringhe interne in
la stessa condivisione che archivia in modo che loro
bisogno
non è necessario creare in fase di runtime all’indirizzo
tempo di avvio sono le stringhe interne
quelle stringhe quando il compilatore C Java
compila il tuo codice sorgente per a
classe e all’interno del codice sorgente
trova stringhe letterali alcuni qualche tipo di
stringhe letterali che hai fisicamente
nel codice sorgente in cui sono inseriti
sono posti in modo condiviso
archivio al giorno d’oggi erano di solito
allegato come un pool costante di cosiddetti
pool costante agli oggetti di classe e
ora sono messi in questi condivisi
archivi insieme al precompilato
classi in modo da accelerare l’avvio
tempo hanno supportato solo per 46 bit
piattaforme che è probabilmente la norma
ok ora ci tuffiamo nel tutto
argomento diverso il modulo sistema il
grande funzionalità del sistema di moduli Java 9
consiste di un discreto numero di Java
proposte di estensione la prima cosa che
hanno fatto è quello che hanno modularizzato
jdk stesso quindi il jdk al giorno d’oggi no
vieni come RT dot jar un file jar più
ma arriva come un mucchio di moduli
è una cosa e poi hanno cercato di finirla
tempo cercano di rendere disponibile il
sistema di moduli per la comunità Java così
che tu e le tue applicazioni e
librerie che si genera anche possibile utilizzare
moduli per esprimere il tipo di import-export
relazioni tra questi logici
entità che sono chiamate moduli in modo che il
la prima cosa è la distribuzione è
diverso non vedrai RT Doge our
due strumenti jar vedrai una directory
chiamato mod credo e poi hai
un sacco di file modulo mod J sì e lo è
un’organizzazione completamente diversa, ok
significa anche che l’ idea sei tu e tutti
la libreria e i fornitori di strutture che
ci si basa su dovrebbe nel tempo
riorganizzare e riprogettare i loro
applicazioni e i loro strumenti al fine di
modernizzare se stessi e il loro
le loro applicazioni
e Java 9 è solo l’inizio di a
fase di transizione quindi idealmente dopo a
mentre non sappiamo per quanto tempo sarà così
prendere tutto dovrebbe essere espresso come
Moduli Java se questo accadrà noi
vedrà sì sarò probabilmente un molto
lunga fase di transizione quindi cos’è a
modulo un modulo è un’entità logica che
contiene classi proprietà del codice nativo
praticamente quello che abbiamo messo in un barattolo ora
al giorno d’oggi, ma un file jar al giorno d’oggi è solo
un contenitore non ne ha
semantica allegata e un modulo è
diverso con un modulo che puoi descrivere
di quale altro modulo modulo è necessario
questa è la cosiddetta leggibilità
proprietà che devi descrivere e
inoltre puoi descrivere quali pacchetti a
il modulo rende accessibile ad altri moduli
quindi hai una leggibilità e un
descrizione dell’accessibilità allegata a
file jar e un file jar modulare simile
quindi un modulo in termini di Java
sistema di piattaforma ok così l’idea del
il sistema di moduli quindi è una volta che li abbiamo
leggibilità e accessibilità
descrive il compilatore Java C
sistema di runtime e anche tutto
quello con la riflessione prova a
controllare se questa leggibilità e
le relazioni di accessibilità corrispondono così
tutto ciò che è necessario in termini di
leggibilità c’è qualche modulo che
ha bisogno di leggere un altro modulo tutto questo
i moduli fango devono essere disponibili in fase di esecuzione
al momento della compilazione per la riflessione è tutto
controllato ok quindi perché lo hanno fatto io
dirà molto ci sono dibattiti accesi
e ci sono voluti un paio di anni fino a quando
hanno inventato un sistema di moduli per
Java 9 uno dei problemi che cercano
risolvere è bene lo schema di protezione che
finora siamo stati insufficienti finora
potrebbe qualificare i tipi come pacchetto pubblico
privato protetto visibile quindi c’era a
schema di protezione ma c’è un problema
Voglio dire, puoi aggirare il problema
l’esempio è se pensi ai primi
i tempi in cui hanno costruito il JDK Sun è arrivato
con Sun dot qualcosa di pacchetti e
ogni classe e ogni tipo in questi Sun
i pacchetti dovevano essere privati in
la sensazione che sia disponibile solo per
altre utilità JDK o altre classi JDK
dovevano usare questi soli
classi specifiche ma non furono mai
destinato a essere disponibile per l’ uso pubblico per
tutti così sono in realtà un po ‘
pacchetti interni JDK privati ora il
il problema è cosa se vuoi costruire
qualche classe JDK che usa Sun Micheline
o qualcosa di una delle classi che è
molto usato molto è il sole che
Elena sensei
così molte delle classi JDK usano Sun
Varie non sicure cosa potresti fare
per proteggere la classe non sicura da
uso diffuso potresti renderlo pacchetto
visibile ma ciò richiede che ogni
altra classe JDK che ne ha bisogno
Varie non sicure devono risiedere nel
lo stesso pacchetto quindi in pratica finiresti
con un pacchetto enorme e che è
abbastanza ovviamente non è un pacchetto ragionevole
progettare in modo da suddividere il JDK in
vari pacchetti e per farlo funzionare
dovevano fare qualcosa di diverso
insicuro di una classe pubblica, poi sono venuti fuori
con altri schemi di protezione come
controlli di accessibilità e così via e così via
avanti per renderlo in qualche modo o
portalo via dall’uso pubblico ma puoi farlo
aggirare tutto questo così oggi alcuni
vario pericoloso come un prominente
esempio è usato in molti quadri in
molte librerie è fondamentalmente è
pubblico quindi non c’era un modo veramente sicuro
di proteggere gli interni dall’essere
pubblicamente disponibile e questo è uno dei
i problemi che cercano di risolvere con il
sistema di moduli e in realtà hanno fatto
risolverlo così qualcosa come alcuni
Varie non sicure ora risiede in a
pacchetto chiamato JDK interno ed è
interno ora non è un non prontamente
disponibile per chiunque più che
potrebbe creare problemi ovviamente perché
così tanti framework lo usano oggigiorno
va bene un altro problema che le persone hanno avuto
sperava che il sistema del modulo avrebbe risolto è un
forma di vaso
cosa succede se hai un grande
applicazione e un componente del tuo
l’applicazione utilizza una determinata libreria
dì la libreria guava per esempio in
versione 1 e hai un altro componente
che ha bisogno della stessa libreria in un’altra
versione versione 3 o qualsiasi altra cosa tu
finire con due versioni del guava
biblioteca sul tuo percorso di classe e tu sai
quando il caricamento di classe avviene, prende il
prima classe che trova sulla classe
percorso il secondo sarà ignorato
quindi qual è quello giusto che è a
dilemma che devi risolvere oggigiorno
tipicamente lo risolvi prendendo il
ultima versione e sperando che sia indietro
compatibile a volte funziona a volte
non è così questa è una forma di baratro inferno
la gente aveva sperato che sarebbe stato così
il sistema del modulo risolverebbe questo
problema ma non così hanno iniziato
fuori quando hanno sviluppato i moduli di
permettendo di specificare quel modulo
ha bisogno di un altro modulo nella versione
così e così, ma dopo un po ‘
scoperto che sì al fine di risolvere
tutte queste dipendenze di versione che hanno
per escogitare un qualche tipo di strategia
e ci sono diverse strategie per
risoluzione concepibile e già il
costruire strumenti hanno strategie e poi
Java avrebbe quando hanno diversi
strategie in realtà e Java avrebbe
venire con ancora un’altra strategia e
come fare come riconciliamo questo e poi
inoltre c’era anche un altro strumento
OSGi che supporta anche il controllo della versione
e caricamento e moduli di classi dinamiche
e avevano idee completamente diverse
e sono stati accesi dibattiti
non riuscivo nemmeno a capire che versione
in realtà significa ciò che dovrebbe andare in a
versione in modo che non potevano venire con
qualsiasi tipo di compromesso in modo che
alla fine le persone di Oracle hanno detto
okay i moduli non hanno una versione e noi
posso aggiungerlo più tardi ma per ora questo è
troppo complesso saltiamo il tutto
problema di risoluzione della versione in modo che i moduli in
il sistema modulare in Java 9 non ha
una versione e quindi anche se non puoi risolvere
questo tipo di problema di aiuto Jar in
un modo diverso da quello che hai fatto nel
passato quindi non c’è nulla di nuovo da ok
un’altra cosa con cui cercano di affrontare
il
il sistema del modulo è la dimensione della distribuzione
al giorno d’oggi se vuoi creare un sé
unità autonoma per il dispiegamento
includeresti l’intero JDK
anche se forse hai bisogno solo di un
frazione delle classi JDK e con a
sistema di moduli non è possibile
creare le cosiddette immagini runtime e a
l’immagine runtime conterrebbe solo tutti i file
Moduli JDK che sono effettivamente necessari così
tutto ciò che non ti serve sapere
non è incluso nell’immagine runtime
e quindi puoi ridurre il
dimensioni di implementazione di ciò che si consegna ok
quindi esaminiamo alcune delle funzionalità
Non voglio coprire tutto questo intendo la
il sistema del modulo Java riempie libri e
puoi fare dei workshop da uno a tre
giorni se vuoi solo il minimo indispensabile
la prima cosa che hanno fatto è loro
motorizzato il JDK quindi questo è il modulo
grafico di tutti i moduli JDK utilizzati
circa cinque anni per prendere il JDK come esso
doveva venire con questo tipo di modulo
grafico questo grafico deve essere un diretto
grafico senza cicli quindi se avete il
codice spaghetti classico che devi ottenere
liberarsi dei vostri cicli al fine di venire su
con un ragionevole modulo grafico che è
diretto e non ha ha alcun
cicli in modo che da sola ha preso cinque anni a questa parte
se immagini di voler modularizzare
la tua applicazione puoi capire come
lungo questo richiederà
okay, affrontiamo la migrazione
problema in sostanza cosa significa se tu
prendi le tue applicazioni e i tuoi quadri
e prova a migrare a Java online forse
lo vinci non si accorgerebbe nemmeno di quello
lo scenario migliore, si
spostarlo in Java 9 compilare ed eseguire
senza problemi non lo faresti nemmeno
notate che JDK arriva oggi
moduli invece di runtime dojo ok
questo è il caso migliore, forse devi
aggiusta il tuo programma e potrebbe esserci un
un paio di cose anche un paio di problemi
se non hai intenzione di modularizzare il tuo
l’applicazione stessa è ancora possibile eseguire
nei guai solo perché hai Java
9 sotto uno dei problemi potrebbe
si sta usando uno di questi figli
pacchetti interni
se lo fai, voglio dire che te l’hanno detto
non dovresti usarli se tu
ora sei nei guai che non sono
più a lungo disponibili ci sono soluzioni alternative
puoi renderli disponibili ma l’idea
è necessario sbarazzarsi di questi alcuni
roba interna sì un’altra cosa è se
ti sei affidato in qualche modo al
sulla struttura binaria del JDK come
stai leggendo dojo runtime sei
prova a leggere i file di classe da Artie
dojo e che ora è diverso dalla classe
erano di classe di punti stringa, per esempio è
non più nelle nostre classifiche di tè tour in a
Modulo base Java quindi qualcosa di importante
cambieranno anche loro hanno cambiato Java
stringa di versione quindi se hai passato
la stringa della versione mi piace capire
sì, la versione è un punto qualcosa
non è più un punto qualcosa è
versione 9 così passando il mio campo così questi
sono piccole cose che potrebbero creare
problemi e regolazioni fanno fare
adeguamento necessario se si passa a
Java 9 anche se si hanno pacchetti divisi
sei anche nei guai
problema del pacchetto diviso è prendiamo un
esempio ha la libreria e guava
classi interessanti ma molte di queste
le classi sono pacchettizzate e quindi
non sono disponibili per l’uso pubblico effettivo
ma voglio dire se la classe è interessante
e voglio derivare dalla classe e
aggiungi un po ‘di personalizzazione cosa devo fare
sì, costruisco una nuova sottoclasse di questo
particolare interessante una classe guava e
dal momento che questo è il pacchetto visibile o ha
un costruttore di pacchetto visibile che io
voglio chiamare cosa devo fare
Metto la mia lezione nel pacchetto guava
e questo è un pacchetto diviso
situazione e pacchetti divisi non lo sono
consentito sotto il sistema del modulo al più presto
come la libreria guava viene come guava
modulo le tue scommesse sono disattivate
Voglio dire che non si compilerebbe più
perché sei imbottito intendo il tuo
contributo a quel particolare guava
il pacchetto è ora in un modulo diverso e
un pacchetto può risiedere solo in un modulo
non puoi più dividere i pacchetti
sì sì, se avete qualche situazione
come questo si deve capire un
soluzione quindi diventa un po ‘complicato
ci sono modi intendo il dopo dopo
perché hanno ricevuto molte critiche e
feedback prima di rilasciarlo veramente
sono venuti con un sacco di bandiere
che puoi impostare per avviare jvm così
devi trovare soluzioni alternative per
queste cose e l’ idea è a lungo termine
dovresti avere qualcuno di questi problemi
più perché hai cambiato la tua fonte
codice okay cosa puoi fare per
preparatevi
hanno aggiunto già in Java otto
in realtà un nuovo strumento che si trova nel cestino
directory della distribuzione JDK del jar
che si chiama Jade EPS è il
analizzatore di dipendenza e può per
istanza capire le dipendenze
tra i tuoi pacchetti può anche generare
descrittori di moduli o suggerirne alcuni
forma iniziale del descrittore del modulo e
una cosa che si può fare è che può controllare
per l’uso di interni JDK tutti questi se
usi offensivi di Sun Micheline o
qualcosa e poi devi avviarlo
con una certa opzione per il controllo di jaidev
jdk internals c’è un’opzione per questo
e poi arriva con messaggi come
questo per esempio in questo caso c’è
uso della sicurezza del sole x.509 e un certo
classe su quel pacchetto e questo è no
più a lungo disponibili e anche loro ti danno
un suggerimento su cosa dovresti usare invece
quindi per alcune delle cose che vengono utilizzate
da alcune miscellanee o sole interne
i pacchetti ci sono già sostituzioni
e tu dovresti sbarazzartene
classe e usa quello nuovo in modo che tu possa
verificare e ottenere una sensazione per quanto
guai potresti imbatterti nel bene
la soluzione dal modo in cui intendo se tu
Ho bisogno di questa particolare classe ed è ora
nel modulo interno JDK e da
il valore predefinito non è disponibile ma è possibile
renderlo disponibile è possibile interrompere la
incapsulamento di moduli iniziando da
compilazione e avvio della JVM utilizzando
questi pesciolini – – direttiva sulle esportazioni di annunci
quindi questo è qualcosa che è possibile specificare per
compilazione e anche per runtime e
allora puoi dire ok e voglio farlo
disponibile questo pacchetto questo protetto
pacchetto strategico interno oh è dentro
Basato su Java Penso –
Io i miei pacchetti e da quando lo hai
modulizzato qualsiasi cosa tutti i tuoi pacchetti
risiedere in un modulo senza nome, quindi cosa sono
fondamentalmente dicendo è questa classe interna
Voglio renderlo disponibile al mio
roba senza nome sì e poi si può fare
quindi questa è una specie di soluzione se
roba per qualche transizione hanno bisogno di questi
protetto e cose interne JDK voi
può farlo, ma voglio dire che non c’è
garantire che questa classe sarà in giro
ancora in Java dieci o undici sì sì il
lavoro per voi è quello di capire il
interni per capire quali opzioni
devi impostare per il momento e
poi vai avanti e sbarazzati di tutto il
interni per la prossima versione e
prima che scompaiano e tu no
lavorare di più, okay, se vuoi
creare moduli cosa vuol dire
diciamo che vuoi davvero modularizzare
qualcosa o vuoi iniziare una nuova
progetto da zero dove realmente
ha senso usare solo il nuovo modulo
sistema ciò che significa è che tu hai un
diversa struttura del codice sorgente così per
se sei così lontano se hai una fonte
directory avresti una directory
per pacchetto finora e ora abbiamo un
livello di directory aggiuntivo , quindi lo faremo
avere una directory che rappresenta il
modulo e all’interno della directory di quel modulo
avresti tutto il pacchetto
directory quindi c’è un ulteriore
livello di directory che rappresenta il
modulo e un modulo contiene pacchetti
e il modulo oltre a tutto il
i pacchetti contengono un modulo informazioni dot Java
file e questo è il cosiddetto modulo a
Scritture che in realtà li hanno davvero
leggibilità e accessibilità
descrizioni e deve sedere bene sul
livello superiore sì, direttamente nel modulo
directory e la directory del modulo come
con le directory dei pacchetti deve corrispondere
il nome del modulo il nome del
il modulo apparirà anche nel modulo
descrittore e informazioni sul modulo dot java
file student.java it e dopo averlo
una classe di punti info del modulo che tu
pacchetto in un file jar insieme a tutti
le altre risorse e classi che
appartiene al modulo quindi è un
entità aggiuntiva che devi venire
ok questo è ciò che un modulo nel cibo o
Sembra che tu dici modulo tu stesso
specificare il nome del modulo e quindi
nel corpo dovresti specificare il
direttive di leggibilità e accessibilità
va bene
quindi puoi specificare cosa vuoi fare
disponibile in modo che un modulo specifichi quale
pacchetti esporta e come esportazione
direttiva lo sai così dice questo modulo
esporta il pacchetto 1 il mio pacchetto 1 tu
puoi anche avere esportazioni qualificate che puoi
dì ok, lo esporto ma solo per uno
particolare modulo sì così il primo
è un’esportazione non qualificata che lo rende
disponibile per tutti i moduli che potrebbero essere
interessato l’altro lo limita a
alcuni moduli ok quindi questo è il
specifica di accessibilità un modulo
rende potenzialmente disponibili i pacchetti
limitato ad alcuni altri moduli e
questo è il corrispondente del tipo di
dichiarazione di importazione dici che ne ho bisogno
modulo dice che ho bisogno di un altro modulo così
questo è un secondo modulo e il secondo
il modulo richiede il primo modulo
prima modalità che hai reso disponibile
pacchetti e il secondo è da dire
e ne ho bisogno quindi c’è un bilaterale
relazione tra questi due così
non compilerebbe se solo un modulo
dice ok e faccio questi pacchetti
accessibile e l’altro modulo no
dì che vuole leggerli in questo
caso non si compila e non lo fa
correre così ci deve essere davvero l’esportazione
dichiarazione in un modulo e le esigenze
in un altro modulo è un po ‘
confondere forse a prima vista perché
esportate i pacchetti ma richiedete un
intero modulo o più moduli
questa è la direttiva richiede ci sono
più direttive lo lascerò a questo
c’è anche apre e utenti e
prevede altri casi speciali ma
queste sono le esportazioni e richiede il
direttive di base per specificare
la leggibilità e l’ accessibilità è così
questa relazione bilaterale che deve essere
stabilito nelle varie informazioni del modulo
i file e quindi Java C ne verifica la presenza
controlli di runtime per la riflessione del core
controlli
proprio qui non puoi impadronirti di roba
che non hai richiesto e quello
non è stato reso disponibile nemmeno a
tempo di riflessione va bene allora c’è un
esportazione transitiva quindi se diciamo
il modulo Miller rende disponibili i suoi
pacchetti al modulo più alto e
usa tutti diciamo che usa un terzo
modulo e classi tipi alcuni elementi
dal terzo modulo compaiono nell’API
del modulo centrale in quel caso il
il modulo più in alto ha un indiretto
relazione e necessità indirette
relazione con il terzo modulo senza
anche conoscendolo e per farlo
più flessibile e più facile più facilmente
a sviluppare più tardi su quello che loro
inventato è un transitivo richiede così se
il modulo centrale dice ok ho bisogno del
terzo modulo in transito quindi
disponibile per i suoi moduli di utilizzo
tutto dal terzo modulo sì così
che il primo modulo più in alto non lo fa
deve specificare esplicitamente che
usa indirettamente il terzo in modo che sia giusto
ha una direttiva richiede al centro
uno di mezzo dice e richiede
il terzo e richiede transitivamente quello
fa la differenza okay, cosa fa?
significa quando sviluppo moduli che ci sono
vari nuovi strumenti e molte novità
opzioni se vuoi scrivere Java C o
la JVM stessa è una cosa che è veramente
diverso è oltre a un passaggio di classe
ora abbiamo un percorso del modulo e il modulo
percorso sul modulo pass devono
elenca tutti i file jar che contengono il tuo
moduli hmm è simile alla classe
percorso è solo un secondo percorso per modulare
file jar hai anche altre opzioni
come mostrare la risoluzione del modulo se si avvia
la tua JVM mostrerà più la tua risoluzione
è simile alla classe verbose semplicemente
ti dice che questo è il modulo radice
quello contiene la classe principale e poi quella
richiede questo inter center e lo farai
vedi il sottoinsieme transitivo di tutti
moduli richiesti e
dove vengono trovati riceviamo i nostri messaggi
se qualcosa non può essere trovato e così via
e così via ok per la diagnosi è
utile quindi un modulo alla fine è un così
chiamato Java modulare, si crea un Java
file e aggiungi le informazioni del modulo compilato
il descrittore del modulo in modo tale che tu voglia
a una relazione tra un modulare
File Java
e sì il modulo stesso va bene allora
ci sono ovviamente nuove opzioni necessarie
per lo strumento jar puoi specificare il
classe principale che puoi elencare puoi descrivere
il modulo che descrive i mezzi del modulo
ti dà il contenuto del modulo
descrizione quindi ci sono nuove opzioni per
già file Java modulari
immagine runtime menzionata c’è una nuova
strumento chiamato J link che crea a
immagine runtime modulare fondamentalmente ciò che
non è come collegare in una lingua
come C o C ++ in cui si collega davvero
tutto staticamente per crearne uno
file eseguibile che è quello che fa a
l’ immagine runtime è una specie di distribuzione
struttura che è simile al
struttura di implementazione del JDK in Java
9 e ciò che fa è include solo
quei moduli che sono effettivamente necessari
questo sta affrontando le dimensioni della distribuzione
problema che ho menzionato così se tu
creare un’immagine runtime a partire da
il tuo principale modulo radice principale lo farà ancora
includi solo quei moduli JDK che sono
effettivamente necessario e saranno tutti
impacchettato in una cosiddetta immagine runtime
che puoi consegnare e poi cosa
crea è una struttura di distribuzione che
ha un grande file di modulo e contiene
solo le cose necessarie così questo è
creato utilizzando il nuovo strumento di collegamento J ok ora
questo è più, ma continuiamo a farlo
quell’unico problema che avrai nel tempo
è che devi migrare probabilmente dentro
passi credo che ci vorranno molti
anni fino a quando l’intero mondo di Java è
modulare quindi quello che hai oggi è
probabilmente la tua applicazione non è modulare
librerie o framework di terze parti che
l’uso probabilmente non è più non ancora e
hai solo il JDK che è già
modulare quindi ok ora
dì che inizi a modularizzare la tua
applicazione in modo da fare un top-down
modularizzazione ma userete jaidev
scriverò la volontà capire cosa
un modulo ragionevole sarebbe che è
probabilmente si riferisce a ciò che hai come
Java è oggi il più naturale
cosa e poi scrivi le informazioni sul modulo
i file vanno bene, quindi diciamo
la tua applicazione è Modula dopo un po ‘
potresti ancora imbatterti nella situazione
altre cose che usi le librerie
quadri che non ti hanno preso
non hanno raggiunto eppure così si avrebbe
un mix di roba modulare e non modulare
elementi come funziona quello che puoi
fare è se diciamo il
la parte non modulare è di terze parti
libreria come la libreria guava per
istanza o qualcos’altro che puoi
do è questo livello di dati consegnare un file jar
un file jar non modulare come hanno fatto in
passato e puoi prendere quel file jar
e mettilo sul percorso della classe come te
fatto prima e tutto ciò che hai messo
sul percorso della classe non sul modulo
percorso ma sul percorso della classe come prima
finisce in un cosiddetto modulo senza nome così
tutto ciò che non è un modulo con nome è
fondamentalmente un modulo senza nome sulla classe
parte il percorso di classe è più simile a
modulo speciale esporta tutto tutto
questi pacchetti richiede tutto
l’unico problema è se hai un nome
moduli da cui non puoi richiedere nulla
il modulo senza nome quindi se hai bisogno di un
pacchetto dalla libreria guava che vorresti
devo dire che richiede un pacchetto guava
così e così, ma intendo che si tratta di un anonimo
modulo non puoi richiedere pacchetti tu
può richiedere solo moduli e se il
il modulo non ha un nome non c’è
modo per aver bisogno di sfortuna così in ordine
per risolvere quel problema hanno inventato
moduli automatici in modo da risolvere il
problema a cui i tuoi moduli non possono accedere
moduli senza nome prendi il barattolo per il
file jar guava e non metterlo sul
passaggio di classe, ma metterlo sul modulo
classe anche se non è modulare ancora così
puoi prendere un vaso normale non modulare
i file li mettono sul percorso del modulo in
in quale caso sono considerati essere
moduli automatici e un automatico
modulo è un nome
modulo con un nome derivato così da prendere
un’occhiata al nome del file Java e da
quel nome di file derivano un automatico
nome del modulo e da automatico
il nome del modulo ha un nome che ho derivato
nome sintetico ora puoi avere un
richiede una direttiva alla libreria guava
modulo va bene il problema è il nome che
che deriva dal nome del file Java
potrebbe essere diverso da ciò che il guava
biblioteca in futuro potrebbe
scegli come nome del modulo che poi
richiede che tu debba cambiare il tuo
richiede direttive, quindi questo è chiedere
per un guaio futuro va bene così sarebbe
sii la situazione quindi sì, così hai
la tua applicazione in moduli è JDK
e moduli prendi la libreria guava
metterlo sul percorso del modulo è quindi un
modulo automatico e moduli automatici
può usare moduli senza nome quindi se il guava
la biblioteca ha bisogno di qualcosa da un’altra
jar file sul percorso della classe che lo farebbe
funzionano così solo i moduli automatici
accedi ai moduli senza nome che vedi
abbastanza complesso se si dispone di un tipo misto
situazione per mettere tutti gli elementi sopra
il percorso del modulo di scrittura o il percorso della classe in
Per farlo funzionare, alla fine ok
c’è di più riguardo alla migrazione intendo
un problema sostanziale è se hai
quadri che accedono ai tuoi corsi
utilizzando la riflessione e in genere utilizzando
ciò che è oggi chiamato
profonda riflessione se hanno bisogno di accedere a
parti private delle tue classi
in genere utilizzare detto accessibile in ordine
per accedere alle parti private e
che ora è limitato, allora non ci sono
apre le direttive che puoi aprire
pacchetti per il reflectional illegale
eccesso illegale e c’è dell’altro
sì, quindi c’è più difficoltà a venire
il punto è per Java 9 questo illegale
eccesso di riflessione è permesso da
default ma il default cambierà con
le altre dieci così in Java
10 dovrai capire se
hai una nuova versione del framework
questo ha bisogno dell’accesso illegale
più o che si aggiunge tutto il
necessario apre la directory
così hanno reso facile passare a Java
9 ma non è la fine della storia alcuni
le cose cambieranno quando si passa a
Java 10 così si dovrebbe essere preparati che
c’è di più da venire più viaggiato ok ok
critica sì, è un po ‘di confusione ora
hai un pacchetto privato e così via e
così avanti, più hai il modulo
descrittori se una classe è pubblica
non significa che puoi accedervi di cui hai bisogno
richiedere il modulo e il modulo ha
rendere disponibile il rispettivo pacchetto
altrimenti una classe pubblica in pubblico così
è più complesso ci sono più posti
dove devi guardare per
capire se è possibile utilizzare qualcosa
ok quindi adattare il codice esistente a a
modulo di sistema modulare rendendolo realizzabile
essere un sacco di lavoro pensa ai cinque anni
ci sono voluti per più generalizzare il JDK è
potrebbe essere vicino a non essere fattibile se lo hai
un pacchetto diviso quindi penso che
la realizzazione è se hai un esistente
applicazione che dovresti probabilmente pensare
se vuoi veramente trasformare questo
nei moduli è molto lavoro se tu
vedere il valore di avere una migliore
l’incapsulamento va avanti e modernizza ma
Penso in pratica ai fornitori di librerie
e le strutture dovranno moralizzare
quella roba perché potrebbero aver usato
noi che iniziamo nuovi progetti da zero
e se tu se inizi da zero e
ha senso costruire la tua applicazione in
termini di moduli ma prendendo un esistente
applicazione app Lamay cambiandola in a
l’ applicazione modulare è probabilmente eccessiva
ma sta a te decidere se tu
vuole approfittare del
meccanismo di incapsulamento così tanto bene allora
non abbiamo le versioni del modulo così
non c’è soluzione per barare l’inferno che
è stato distribuito da molte persone ma
questo non è cambiato se lo si desidera
leggere qualcosa su di esso c’è un bianco
carta di Marc Reinhard che è il capo
architetto per la versione SE di Java
il riferimento allo strumento è interessante perché
ci sono molti nuovi strumenti e molti
nuove bandiere e hai davvero bisogno di imparare
su tutto questo se vuoi costruire
moduli che voglio ottenere anticiparlo
ci sono anche un paio di libri questo è
uno di loro ho guardato in questo
e uno è sulla strada verrà qualche volta
l’anno prossimo c’è il ragazzo Nicolai
Pollack ha molti blocchi così scrive
molto a riguardo ok ho ancora tempo
quattro minuti okay, posso darti un
un paio di idee su ciò che è disponibile in
termini di sostituzione di alcuni
miscellanea oh sì, per il resto
va in profondità nel roba fa nessuno
utilizzare alcune miscele non sicure ok allora
possiamo tranquillamente saltare solo pochissimi
la gente il problema sono le librerie che
stai usando in genere lo usano così
devono risolvere i problemi e
capire come sostituire tutti questi
cose da Sandwich di Elena non sono sicure e
questo va a fondo nelle maniglie var ha
qualcuno ha usato anche maniglie del metodo
sconosciuto sì quindi questo va in profondità nel
interiora di JDK quindi cerchiamo di dare questo uno
scopo che è ancora interessante è il
J shell abbiamo uno strumento shell in cui
puoi digitare il codice sorgente Java
frammenti e ti dà un immediato
valuta l’espressione in modo da avere
una sorta di lettura valuta il ciclo di scrittura si
quindi non devi scrivere un intero
programma se vuoi semplicemente provarne un po ‘
alcune piccole cose di codice Java e c’è
molte altre cose ti darò un
panoramica fammi vedere va bene c’è un nuovo
Client HTTP ma non ha raggiunto il
livello di qualità che avevano quello che avevano
inteso non è il cosiddetto incubatore
modalità in modo da poter provare e fornire
feedback a Oracle quindi non è davvero
utilizzabile quindi abbiamo un processo migliorato
API ottieni un controllo migliore per la gestione
Processi OS Se si, se si desidera
creare alcuni g1 è la spazzatura predefinita
collezionista che è importante per quelli
chi non ha specificato è alcuno specifico
netturbino finora ciò che anche
cambiato è hanno una registrazione JVM unificata
finora ogni componente della JVM
garbage collector il compilatore JIT e
altre parti hanno emesso
Informazioni di diagnostica su richiesta utilizzando
alcune bandiere come il dettaglio GC di stampa
o qualsiasi altra cosa e sembrava tutto diverso
e ora l’hanno unificato anche questo
cambiato le bandiere che usi
richiedendo informazioni diagnostiche così
c’è un’intera nuova bandiera chiamata X lock
due punti e quindi è possibile specificare i caratteri jolly
per la quantità di informazioni che tu
richiesta come diagnostica quindi l’output
sembra diverso dal modo in cui è controllato
è diverso e credo che molti strumenti che
ha analizzato le serrature JIT o le serrature GC
o qualcosa a cui ci vorrà del tempo
recuperare il ritardo con voi in formato al fine di
analizzarlo correttamente, quindi c’è un sacco di
cambiano ci sono molti interni sì
Javadoc è ora in formato html5 e ha a
casella di ricerca, intendo, non ne ho avuto bisogno
questo per decenni
quindi c’è molto di più di ciò che è
domande ok interne ne abbiamo alcune
domande nell’app non ci penso
può rispondere a tutti loro uno di loro è
piuttosto provocante vorrei chiederlo a
in questo modo qui è abbastanza sicuro
Ignorare il sistema modulare intendo il
la domanda era un po ‘diversa
ha detto che tipo di problemi quello che mi aspetto
se non modernizzo la mia applicazione
oggi se non ti ammodernano
potresti ancora incontrare dei problemi
perché la maggior parte delle applicazioni ne usa un terzo
roba di festa e la terza parte
le librerie di solito usano alcune miscellanee
non sicuri quindi non verranno compilati e
prima gioca subito così probabilmente
dovrebbe aspettare fino a quando tutto quello che
usi venire con qualche tipo di
soluzione per i loro problemi intendo te
potrebbe non avere necessariamente problemi
te stesso, ma potresti star usando
ibernare e farlo illegale
accesso e così via e così via così è
probabilmente difficile semplicemente ignorarlo
e anche se lo ignori, potrebbe esserci
problemi nascosti che verranno visualizzati in Java
10 quindi è probabilmente intenzione di spendere
un po ‘di tempo per la migrazione, penso
ok bene e poi c’erano abbastanza a
un sacco di domande su come funziona
si riferiscono a ciò che sappiamo di Gradle Maven
o forse anche OSGi e qual è la differenza
intorno a quello possiamo ottenere forse OSGi è
non c’è praticamente nessuna relazione loro
significa che c’era il dibattito e loro
non poteva riconciliare le loro diverse opinioni
l’idea è che l’ Austria faccia le sue cose quando
è molto più dinamico e flessibile a
runtime mentre il sistema dei moduli Java
è solo una descrizione di dipendenza statica
e quello che hanno fornito è se OSGi vuole
ricostruire la sua roba su Java
sistema di moduli quindi c’è un’API per
creazione di livelli di caricamento classi e
ricostruire OSGi in cima al modulo
sistema non so se intendono
per fare questo e terraferma e Gradle sì
devono anche aggiornare a Java 9 e
fornire supporto per la descrizione di tutti
queste dipendenze per descrivere I do I
metti questo come un modulo senza nome
automaticamente o qualcosa del genere e
per quanto ne so, non l’hanno fatto
raggiunto ancora così è il supporto degli strumenti
insufficiente in questo momento ho fatto un seminario
la settimana scorsa e stiamo effettivamente usando
console Windows e script UNIX in
Per ottenere delle cose intendo solo un ragazzo
ha detto che è interamente la vostra camera tasso è
questo è terribile quindi non c’è supporto IDE
fondamentalmente per casi semplici sì ma come
presto questo diventerà un po ‘ più complesso
e hai una situazione mista orb
di per sé , aspetta e basta
ultime parole interessanti
Aspetta, ma ok bene, continuiamo così
perché siamo leggermente nel tempo grazie
molto per te
tu
quindi benvenuto a questo discorso su Java 9 I
ho cercato di capire cosa sarebbe stato di più
interessante per la maggior parte dei programmatori Java
Java 9 come tale è stato rilasciato in
Settembre quindi è un paio di settimane fa
per così dire, non so quante persone
hanno già una seria intenzione di trasferirsi
su Java 9 è probabilmente interessante
per imparare un po ‘ sul modulo
sistema perché penso che sia così
la funzionalità di Java 9 che colpirà di più
persone quando provano a migrare a Java
9 ma non voglio parlare solo di
il sistema del modulo Java sì, c’è un
elenco degli argomenti che ho scelto ci sono
alcune ottimizzazioni riguardo l’uso di
stringhe ci sono un paio di cambiamenti
modifiche molto minori lo farò brevemente
dì loro che c’è qualcosa in merito
letterali di collezione che mostrerò
tu che potresti venire utile ma è un
caratteristica molto piccola perché questa è la
grande funzionalità di Java 9 e poi lo farò se
il tempo consente di scavare un po ‘ più a fondo
riguardo a cose che potresti non avere
state usando fino ad ora alcune applicazioni
quadri e librerie usano pacchetti
Pacchetti interni Java / JDK che ora
che il JDK è modulare è no
più disponibile e che probabilmente lo farà
creare qualche problema e ci sono Java
proposte di estensione e sforzi sul
modo per venire con sostituzioni per
questi pacchetti interni, ma questi sono
cose che sono state rese disponibili in
Java 9 in parte, ma la parte principale è
ancora in arrivo e arriverà in uno di
le versioni future di Java come Java
1011 forse 12 non sappiamo che ci sono
molte molte altre caratteristiche che non lo farò
menzione in realtà hanno troppe diapositive così
non essere deluso se saltero una coppia
di loro avrai il mazzo completo di
diapositive quando li scarichi ok
riguardo a me sto lavorando come ero abituato
lavoro come sviluppatore e in via di sviluppo
in C ++ e Java e poi ho iniziato a farlo
allenamento per vivere per quasi 20 anni
anni intanto e così ogni volta lì
è un nuovo
Versione di Java Dare un’occhiata a cosa
potrebbe essere interessante e quale conoscenza
deve essere distribuito per poter essere gestito
la nuova e la prossima versione così ho guardato
nei generici Java con Java 5 o
guardato in lambda e scorrere attraverso
Java 8 e in realtà ho esaminato Java 9
ok quindi iniziamo con la raccolta
alfabetizzazione qualcuno ricorda Java 7 è
per Java 7 Sun Microsystems in quel momento
ha chiesto alla comunità Java di osservare il mio
proposte linguistiche di caratteristiche o
convenienza che vorrebbero avere e
una delle proposte che è stata sollevata da
le comunità java volevano a
sintassi conveniente per la creazione di piccoli
collezioni immutabili e loro no
sono venuti a risolvere quel problema per Java 7
ora con una soluzione per Java 9
ciò che è stato discusso per Java 7 è il
sintassi che ho mostrato lì
la sintassi non esiste che non hanno risolto
il problema in Java 9 estendendo il
lingua e creando invece una nuova sintassi
ci hanno dato una soluzione basata sulla libreria così
quello che avremo è spento funzioni in
varie interfacce in java.util
pacchetto così oggigiorno con Java 9 è possibile
crea una lista e poi solo
enumerare la coppia di elementi che
si desidera visualizzare in tale elenco immutabili
di pochi elementi e questo è in linea
con altre 50 funzionalità che avevamo già
le collezioni si interfacciano già a
qualcosa come voglio creare un vuoto
lista Voglio creare un elenco di uno
elemento un elenco singleton e ora è possibile
di ‘una lista di qualcosa di qualcosa
e tutte queste collezioni sono immutabili
collezioni con il numero di elementi
che hai elencato in questa funzione di fabbrica
chiamato fuori ok allora ci sono un paio di
altre caratteristiche linguistiche minori dubito
che qualcuno di voi in realtà le mancava
uno di questi è che potresti ricordarlo
con i metodi di interfaccia Java 8 erano
ha inventato metodi così statici e predefiniti
nelle interfacce che hanno un
implementazione e dal momento che tutto in
un’interfaccia è pubblica e tutte queste impostazioni predefinite
e anche i metodi statici dovevano essere pubblici
e alcune persone esprimono il desiderio che
volevano avere privato
metodi a due facce come metodi di supporto
per questi metodi di interfaccia pubblica e
questo è permesso no in Java mangia
ramen non mi era permesso mangiare a Java allora
abbiamo un operatore di diamanti con
classi anonime l’operatore diamante
è stato aggiunto in con ricordi Java 7 penso
sei o sette l’ operatore diamante è
convenienza se si creano oggetti di a
tipo generico come un thread locale di lista
di una coppia di qualcosa allora hai un
nome del tipo molto lungo quando si crea un
variabile di questo tipo devi
specificare il nome del tipo molto lungo
digitando quindi hai un nome variabile e
quindi in genere si desidera inizializzarlo
creando un nuovo oggetto di quel tipo
e così quando dici nuovo oggetto si dispone
per ripetere l’intero nome del tipo e così via
hanno inventato un operatore di diamanti
sto dicendo okay
il compilatore può dare un’occhiata al
lato sinistro del mio incarico e
capire che tipo è effettivamente così
che non devo digitare tutto così
con Java 7 potresti già dire che voglio
avere un filo locale dell’angolo vuoto
parentesi e il compilatore potrebbe capire
fuori il resto del tipo e questo non era
disponibile per la creazione di classi anonime
e ora con Java 9 possiamo anche usare il
operatore di diamanti quando creiamo
sottoclassi di classe anonima di qualche tipo
di parametrizzare il tipo generico quindi loro
cambia le provate entrambe le risorse finora
con prova con risorse dovevi
crea la variabile e l’oggetto in
davanti al blocco try e al giorno d’oggi con
Java 9 puoi usare una variabile finale
invece in modo che tu possa creare un oggetto
che è già stato creato prima di te
inserire l’ ordine del blocco try che aveva o
che è stato passato a un a
funzione come argomento finale per il
la funzione e quindi si potrebbe usare che in
il blocco try che non era possibile
prima di Java notte nessuno ha usato il
sicuro Vioxx una notazione di sempre, oh, facciamolo
tienilo intendo che è un complicato
cosa per quanto riguarda la combinazione di
liste di argomenti variabili con parametro
sono i tipi e le parole sicure a che fare con
che ora è disponibile su privato
metodi di istanza a
e un’altra cosa la sottolineatura è ora
un identificatore illegale era legale
prima di Java 9 ora è illegale perché
vogliono usare in combinazione con
espressioni lambda in futuro
la versione di Java va bene questi sono gli unici
i cambi di lingua si vedono cose minori no
davvero eccitante cosa potrebbe essere di più
interessante è l’ottimizzazione per quanto riguarda
il consumo di memoria e il
esecuzione di archi una cosa loro
già aggiunto in Java 8, l’aggiornamento 20 è il
deduplicazione stringa che cosa hanno fatto è
cambiano o hanno costruito nel
prima la spazzatura
collezionista una caratteristica che la spazzatura
il primo collezionista sa come quando
vede le stringhe duplicate poi D
duplica le corde mette le corde
in un denaro e quindi in tal modo cerca di
ridurre il consumo di memoria delle stringhe
quindi l’osservazione era quella in un normale
Applicazione Java qualunque cosa possa essere
circa un quarto della memoria heap è
occupato da archi e l’idea siamo noi
voglio ridurre il consumo di memoria
per accelerare la spazzatura
collezione fondamentalmente per utilizzare lo spazio
più economicamente e uno sforzo è stato
cambiando la spazzatura prima spazzatura
collezionista ciò che effettivamente fa è
durante la sua fase di marketing quando lo fa
una raccolta dei rifiuti di cui ha bisogno
identificare tutti gli oggetti raggiungibili e
in tal modo segna e visita tutto il
oggetti raggiungibili e tra loro di
corso tutte le stringhe e ogni stringa ha
una serie allegata e poiché le bevande sono
oggetti immutabili l’array mai
cambia quindi il contenuto della stringa
non cambia mai e ne approfitta
questo fatto se trovano un array allegato
a una stringa ciò che la spazzatura prima a
Garbage Collector lo mette in un
cache e la prossima volta ne trova un altro
array cerca se ha già
la stessa matrice con lo stesso contenuto in
la cache e poi cambia la seconda
stringa oggetto per poter utilizzare lo stesso
array di cache così strettamente parlando è
non stringa la deduplicazione ma è
duplicazione di una razza collegata a
stringhe e questa è una caratteristica che tu
può accendere / spegnere, dice che c’è una JVM
opzione di avvio e se ne hai molte
duplicati potresti vedere qualche beneficio a
riduzione del consumo di memoria se di
Certo , non hai quasi nessuna corda
deduplica o duplica il
la deduplica ti costerà solo te
devi davvero se provi tu
Dare un’occhiata al consumo
altrimenti pagheresti solo per il
la cache e la cache cercano e
non farebbe nulla di buono quindi è un
opzione che puoi attivare se tu
usa il primo raccoglitore di spazzatura che di
il modo è il garbage collector predefinito
in Java 9 sì sì, se non si specifica
quale algoritmo di raccolta dei dati inutili
utilizzare quando si avvia la JVM
al giorno d’oggi in Java 9 hanno la spazzatura
primo raccoglitore come raccoglitore predefinito
ok allora la compattazione della stringa è qualcosa
che abbiamo davvero aggiunto in Java 9
l’osservazione è il 90% di tutte le stringhe
sono codificati o utilizzati e codifiche che possono
essere rappresentato da un solo byte e
c’è solo una piccola parte che davvero
ha moltiplicato le codifiche e ha davvero bisogno
un personaggio che in Java è 2 byte
tanto che la maggior parte delle volte la metà del
spazio che lo spazio heap è
occupato da archi va inutilizzato perché
non abbiamo bisogno di metà del personaggio e
quindi quello che fanno oggigiorno è che fanno a
compattazione della stringa nel cambiamento
ogni volta che crei una stringa , prendono un
guarda il contenuto della stringa e al giorno d’oggi
la stringa è rappresentata da un byte
array invece di un array di caratteri e a
la bandiera che dice è un byte
codifica o abbiamo davvero bisogno di caratteri
una codifica a 2 byte e così ogni volta che lo è
possibile e fattibile si limitano a ridurre
a un array di byte più un flag di codifica
e se la codifica dice ok, deve essere
in più parti ho davvero bisogno del personaggio
i due byte per carattere poi loro
interpreto anche l’array di byte due
byte alla volta interpretano questo come a
array di caratteri in modo da fare questo penso
è l’impostazione predefinita che non è necessario
accendilo ok
poi qualcosa che colpisce l’interno
gestione della concatenazione di stringhe finora
probabilmente conosci quella stringa
concatenazione usando la stringa più
l’operatore è una cosa abbastanza costosa
perché per ogni concatenazione Java ha
creare una nuova stringa perché il
gli oggetti a corda sono immutabili per te
creare se si fa una concatenazione di
stringhe
ciao più parola, più qualcos’altro che
creare un sacco di stringhe temporanee che a
molte copie vanno bene così loro
ottimizzare questo in Java cinque qualsiasi cosa e
il Java vede il compilatore statico di Java C
imparato a sostituire la concatenazione di stringhe
sequenze usando un generatore di stringhe e
append builder e una stringa di due stringhe
operazione alla fine quindi questo è uno
cosa non è ottimale in tutti i casi
perché inizia con un equo
breve stringa anche se sappiamo che il
la concatenazione di stringhe porterebbe a a
grande stringa non c’è ottimizzazione
come usare una capacità pre calcolata per
la stringa in modo che sviluppi la capacità
col passare del tempo che è inefficiente intendo noi
potrebbe fare di meglio e poi c’è un
seconda parte della costruzione che prende anche
cura di ottimizzare la concatenazione di stringhe
e questo è nel just-in-time
compilatore hotspot e hotspot di output
compilatore se si specifica questo
stringa ottimizzata Concord of team ization
cerca anche di fare aggressivo
ottimizzazioni mmm
aggressivo è già ti dice che è
una specie di fragile difficile ottimizzazione
e quindi hanno fondamentalmente due
siti di costruzione il compilatore java c
che cerca di ottimizzare la stringa
concatenazione e il compilatore hotspot
e cercano di semplificarlo e cosa
lo fanno oggigiorno in Java 9 quando è lì
è una sequenza di concatenazione di stringhe
il compilatore java c non ne fa nessuno
ottimizzazioni invece emette
un invoke codice byte dinamico
invokedynamic è uno dei codici byte
invokedynamic è disponibile da allora
Java 7 e inizialmente non è stato aggiunto
per l’utilizzo da parte di Java, ma era un codice byte
che era stato aggiunto
per supportare altre lingue che vengono eseguite
cima alla JVM e che ha avuto difficoltà
con invocare static invoke virtual e
invocare speciali i tre codici byte che
sono stati progettati per invocare metodi Java
perché le altre lingue hanno differenti
idee su come cercare metodi e come
invocarli per la chiamata
sequenze e quindi avevano bisogno di qualcosa
questo è più flessibile e poi loro
aggiunto invocare dinamico e il punto chiave
di invocare la dinamica è chiunque emetta questo
bytecode deve anche fornire ciò che è
chiamato una meta fabbrica che è fondamentalmente
una descrizione di ciò che è invocato dinamico
dovrebbe fare in fase di esecuzione e questo è
molto flessibile e lo usano qui dentro
per aggiungere una questione di fabbrica
dice ok, dobbiamo fare una stringa
concatenazione in questo posto e poi
internamente alla JVM quando viene eseguita
runtime può capire cosa fare basandosi
sulla meta Factory e può applicare qualsiasi
tipo di ottimizzazione con cui oggigiorno
questa riorganizzazione della stringa
concatenazione hanno un posto dove
possono fare tutte le ottimizzazioni che è
fatto in fase di esecuzione ed è interamente
interno in modo da non notarne nessuno
questo è solo un cambiamento che lo rende
più facile mantenere ed evolvere la JVM
un’altra cosa relativa alle stringhe è buona
abbiamo questa funzione di condivisione dei dati di classe
per un po ‘di tempo non ricordo per quanto tempo
ma hanno cercato di ridurre l’avvio
tempo e impronta di JVM molto tempo fa
creando i cosiddetti archivi condivisi
quando distribuiscono il JDK, creano un
archivi condivisi e questi condivisi
gli archivi in genere contengono classi di classi
file fondamentalmente già preparati caricati
classi che all’avvio della JVM sono
semplicemente mappato nella memoria e l’idea
è stato risparmiato il tempo per la lezione vera e propria
caricamento se prepariamo cose come oggetto
e buttabile tutte le cose che ogni
l’applicazione ha già bisogno e questi
archivi di dati condivisi sono stati in giro
per un bel po ‘e loro sono un
sforzo per accelerare l’ avvio e ora
usano anche questi archivi di dati condivisi
per inserire tutte le stringhe interne in
la stessa condivisione che archivia in modo che loro
bisogno
non è necessario creare in fase di runtime all’indirizzo
tempo di avvio sono le stringhe interne
quelle stringhe quando il compilatore C Java
compila il tuo codice sorgente per a
classe e all’interno del codice sorgente
trova stringhe letterali alcuni qualche tipo di
stringhe letterali che hai fisicamente
nel codice sorgente in cui sono inseriti
sono posti in modo condiviso
archivio al giorno d’oggi erano di solito
allegato come un pool costante di cosiddetti
pool costante agli oggetti di classe e
ora sono messi in questi condivisi
archivi insieme al precompilato
classi in modo da accelerare l’avvio
tempo hanno supportato solo per 46 bit
piattaforme che è probabilmente la norma
ok ora ci tuffiamo nel tutto
argomento diverso il modulo sistema il
grande funzionalità del sistema di moduli Java 9
consiste di un discreto numero di Java
proposte di estensione la prima cosa che
hanno fatto è quello che hanno modularizzato
jdk stesso quindi il jdk al giorno d’oggi no
vieni come RT dot jar un file jar più
ma arriva come un mucchio di moduli
è una cosa e poi hanno cercato di finirla
tempo cercano di rendere disponibile il
sistema di moduli per la comunità Java così
che tu e le tue applicazioni e
librerie che si genera anche possibile utilizzare
moduli per esprimere il tipo di import-export
relazioni tra questi logici
entità che sono chiamate moduli in modo che il
la prima cosa è la distribuzione è
diverso non vedrai RT Doge our
due strumenti jar vedrai una directory
chiamato mod credo e poi hai
un sacco di file modulo mod J sì e lo è
un’organizzazione completamente diversa, ok
significa anche che l’ idea sei tu e tutti
la libreria e i fornitori di strutture che
ci si basa su dovrebbe nel tempo
riorganizzare e riprogettare i loro
applicazioni e i loro strumenti al fine di
modernizzare se stessi e il loro
le loro applicazioni
e Java 9 è solo l’inizio di a
fase di transizione quindi idealmente dopo a
mentre non sappiamo per quanto tempo sarà così
prendere tutto dovrebbe essere espresso come
Moduli Java se questo accadrà noi
vedrà sì sarò probabilmente un molto
lunga fase di transizione quindi cos’è a
modulo un modulo è un’entità logica che
contiene classi proprietà del codice nativo
praticamente quello che abbiamo messo in un barattolo ora
al giorno d’oggi, ma un file jar al giorno d’oggi è solo
un contenitore non ne ha
semantica allegata e un modulo è
diverso con un modulo che puoi descrivere
di quale altro modulo modulo è necessario
questa è la cosiddetta leggibilità
proprietà che devi descrivere e
inoltre puoi descrivere quali pacchetti a
il modulo rende accessibile ad altri moduli
quindi hai una leggibilità e un
descrizione dell’accessibilità allegata a
file jar e un file jar modulare simile
quindi un modulo in termini di Java
sistema di piattaforma ok così l’idea del
il sistema di moduli quindi è una volta che li abbiamo
leggibilità e accessibilità
descrive il compilatore Java C
sistema di runtime e anche tutto
quello con la riflessione prova a
controllare se questa leggibilità e
le relazioni di accessibilità corrispondono così
tutto ciò che è necessario in termini di
leggibilità c’è qualche modulo che
ha bisogno di leggere un altro modulo tutto questo
i moduli fango devono essere disponibili in fase di esecuzione
al momento della compilazione per la riflessione è tutto
controllato ok quindi perché lo hanno fatto io
dirà molto ci sono dibattiti accesi
e ci sono voluti un paio di anni fino a quando
hanno inventato un sistema di moduli per
Java 9 uno dei problemi che cercano
risolvere è bene lo schema di protezione che
finora siamo stati insufficienti finora
potrebbe qualificare i tipi come pacchetto pubblico
privato protetto visibile quindi c’era a
schema di protezione ma c’è un problema
Voglio dire, puoi aggirare il problema
l’esempio è se pensi ai primi
i tempi in cui hanno costruito il JDK Sun è arrivato
con Sun dot qualcosa di pacchetti e
ogni classe e ogni tipo in questi Sun
i pacchetti dovevano essere privati in
la sensazione che sia disponibile solo per
altre utilità JDK o altre classi JDK
dovevano usare questi soli
classi specifiche ma non furono mai
destinato a essere disponibile per l’ uso pubblico per
tutti così sono in realtà un po ‘
pacchetti interni JDK privati ora il
il problema è cosa se vuoi costruire
qualche classe JDK che usa Sun Micheline
o qualcosa di una delle classi che è
molto usato molto è il sole che
Elena sensei
così molte delle classi JDK usano Sun
Varie non sicure cosa potresti fare
per proteggere la classe non sicura da
uso diffuso potresti renderlo pacchetto
visibile ma ciò richiede che ogni
altra classe JDK che ne ha bisogno
Varie non sicure devono risiedere nel
lo stesso pacchetto quindi in pratica finiresti
con un pacchetto enorme e che è
abbastanza ovviamente non è un pacchetto ragionevole
progettare in modo da suddividere il JDK in
vari pacchetti e per farlo funzionare
dovevano fare qualcosa di diverso
insicuro di una classe pubblica, poi sono venuti fuori
con altri schemi di protezione come
controlli di accessibilità e così via e così via
avanti per renderlo in qualche modo o
portalo via dall’uso pubblico ma puoi farlo
aggirare tutto questo così oggi alcuni
vario pericoloso come un prominente
esempio è usato in molti quadri in
molte librerie è fondamentalmente è
pubblico quindi non c’era un modo veramente sicuro
di proteggere gli interni dall’essere
pubblicamente disponibile e questo è uno dei
i problemi che cercano di risolvere con il
sistema di moduli e in realtà hanno fatto
risolverlo così qualcosa come alcuni
Varie non sicure ora risiede in a
pacchetto chiamato JDK interno ed è
interno ora non è un non prontamente
disponibile per chiunque più che
potrebbe creare problemi ovviamente perché
così tanti framework lo usano oggigiorno
va bene un altro problema che le persone hanno avuto
sperava che il sistema del modulo avrebbe risolto è un
forma di vaso
cosa succede se hai un grande
applicazione e un componente del tuo
l’applicazione utilizza una determinata libreria
dì la libreria guava per esempio in
versione 1 e hai un altro componente
che ha bisogno della stessa libreria in un’altra
versione versione 3 o qualsiasi altra cosa tu
finire con due versioni del guava
biblioteca sul tuo percorso di classe e tu sai
quando il caricamento di classe avviene, prende il
prima classe che trova sulla classe
percorso il secondo sarà ignorato
quindi qual è quello giusto che è a
dilemma che devi risolvere oggigiorno
tipicamente lo risolvi prendendo il
ultima versione e sperando che sia indietro
compatibile a volte funziona a volte
non è così questa è una forma di baratro inferno
la gente aveva sperato che sarebbe stato così
il sistema del modulo risolverebbe questo
problema ma non così hanno iniziato
fuori quando hanno sviluppato i moduli di
permettendo di specificare quel modulo
ha bisogno di un altro modulo nella versione
così e così, ma dopo un po ‘
scoperto che sì al fine di risolvere
tutte queste dipendenze di versione che hanno
per escogitare un qualche tipo di strategia
e ci sono diverse strategie per
risoluzione concepibile e già il
costruire strumenti hanno strategie e poi
Java avrebbe quando hanno diversi
strategie in realtà e Java avrebbe
venire con ancora un’altra strategia e
come fare come riconciliamo questo e poi
inoltre c’era anche un altro strumento
OSGi che supporta anche il controllo della versione
e caricamento e moduli di classi dinamiche
e avevano idee completamente diverse
e sono stati accesi dibattiti
non riuscivo nemmeno a capire che versione
in realtà significa ciò che dovrebbe andare in a
versione in modo che non potevano venire con
qualsiasi tipo di compromesso in modo che
alla fine le persone di Oracle hanno detto
okay i moduli non hanno una versione e noi
posso aggiungerlo più tardi ma per ora questo è
troppo complesso saltiamo il tutto
problema di risoluzione della versione in modo che i moduli in
il sistema modulare in Java 9 non ha
una versione e quindi anche se non puoi risolvere
questo tipo di problema di aiuto Jar in
un modo diverso da quello che hai fatto nel
passato quindi non c’è nulla di nuovo da ok
un’altra cosa con cui cercano di affrontare
il
il sistema del modulo è la dimensione della distribuzione
al giorno d’oggi se vuoi creare un sé
unità autonoma per il dispiegamento
includeresti l’intero JDK
anche se forse hai bisogno solo di un
frazione delle classi JDK e con a
sistema di moduli non è possibile
creare le cosiddette immagini runtime e a
l’immagine runtime conterrebbe solo tutti i file
Moduli JDK che sono effettivamente necessari così
tutto ciò che non ti serve sapere
non è incluso nell’immagine runtime
e quindi puoi ridurre il
dimensioni di implementazione di ciò che si consegna ok
quindi esaminiamo alcune delle funzionalità
Non voglio coprire tutto questo intendo la
il sistema del modulo Java riempie libri e
puoi fare dei workshop da uno a tre
giorni se vuoi solo il minimo indispensabile
la prima cosa che hanno fatto è loro
motorizzato il JDK quindi questo è il modulo
grafico di tutti i moduli JDK utilizzati
circa cinque anni per prendere il JDK come esso
doveva venire con questo tipo di modulo
grafico questo grafico deve essere un diretto
grafico senza cicli quindi se avete il
codice spaghetti classico che devi ottenere
liberarsi dei vostri cicli al fine di venire su
con un ragionevole modulo grafico che è
diretto e non ha ha alcun
cicli in modo che da sola ha preso cinque anni a questa parte
se immagini di voler modularizzare
la tua applicazione puoi capire come
lungo questo richiederà
okay, affrontiamo la migrazione
problema in sostanza cosa significa se tu
prendi le tue applicazioni e i tuoi quadri
e prova a migrare a Java online forse
lo vinci non si accorgerebbe nemmeno di quello
lo scenario migliore, si
spostarlo in Java 9 compilare ed eseguire
senza problemi non lo faresti nemmeno
notate che JDK arriva oggi
moduli invece di runtime dojo ok
questo è il caso migliore, forse devi
aggiusta il tuo programma e potrebbe esserci un
un paio di cose anche un paio di problemi
se non hai intenzione di modularizzare il tuo
l’applicazione stessa è ancora possibile eseguire
nei guai solo perché hai Java
9 sotto uno dei problemi potrebbe
si sta usando uno di questi figli
pacchetti interni
se lo fai, voglio dire che te l’hanno detto
non dovresti usarli se tu
ora sei nei guai che non sono
più a lungo disponibili ci sono soluzioni alternative
puoi renderli disponibili ma l’idea
è necessario sbarazzarsi di questi alcuni
roba interna sì un’altra cosa è se
ti sei affidato in qualche modo al
sulla struttura binaria del JDK come
stai leggendo dojo runtime sei
prova a leggere i file di classe da Artie
dojo e che ora è diverso dalla classe
erano di classe di punti stringa, per esempio è
non più nelle nostre classifiche di tè tour in a
Modulo base Java quindi qualcosa di importante
cambieranno anche loro hanno cambiato Java
stringa di versione quindi se hai passato
la stringa della versione mi piace capire
sì, la versione è un punto qualcosa
non è più un punto qualcosa è
versione 9 così passando il mio campo così questi
sono piccole cose che potrebbero creare
problemi e regolazioni fanno fare
adeguamento necessario se si passa a
Java 9 anche se si hanno pacchetti divisi
sei anche nei guai
problema del pacchetto diviso è prendiamo un
esempio ha la libreria e guava
classi interessanti ma molte di queste
le classi sono pacchettizzate e quindi
non sono disponibili per l’uso pubblico effettivo
ma voglio dire se la classe è interessante
e voglio derivare dalla classe e
aggiungi un po ‘di personalizzazione cosa devo fare
sì, costruisco una nuova sottoclasse di questo
particolare interessante una classe guava e
dal momento che questo è il pacchetto visibile o ha
un costruttore di pacchetto visibile che io
voglio chiamare cosa devo fare
Metto la mia lezione nel pacchetto guava
e questo è un pacchetto diviso
situazione e pacchetti divisi non lo sono
consentito sotto il sistema del modulo al più presto
come la libreria guava viene come guava
modulo le tue scommesse sono disattivate
Voglio dire che non si compilerebbe più
perché sei imbottito intendo il tuo
contributo a quel particolare guava
il pacchetto è ora in un modulo diverso e
un pacchetto può risiedere solo in un modulo
non puoi più dividere i pacchetti
sì sì, se avete qualche situazione
come questo si deve capire un
soluzione quindi diventa un po ‘complicato
ci sono modi intendo il dopo dopo
perché hanno ricevuto molte critiche e
feedback prima di rilasciarlo veramente
sono venuti con un sacco di bandiere
che puoi impostare per avviare jvm così
devi trovare soluzioni alternative per
queste cose e l’ idea è a lungo termine
dovresti avere qualcuno di questi problemi
più perché hai cambiato la tua fonte
codice okay cosa puoi fare per
preparatevi
hanno aggiunto già in Java otto
in realtà un nuovo strumento che si trova nel cestino
directory della distribuzione JDK del jar
che si chiama Jade EPS è il
analizzatore di dipendenza e può per
istanza capire le dipendenze
tra i tuoi pacchetti può anche generare
descrittori di moduli o suggerirne alcuni
forma iniziale del descrittore del modulo e
una cosa che si può fare è che può controllare
per l’uso di interni JDK tutti questi se
usi offensivi di Sun Micheline o
qualcosa e poi devi avviarlo
con una certa opzione per il controllo di jaidev
jdk internals c’è un’opzione per questo
e poi arriva con messaggi come
questo per esempio in questo caso c’è
uso della sicurezza del sole x.509 e un certo
classe su quel pacchetto e questo è no
più a lungo disponibili e anche loro ti danno
un suggerimento su cosa dovresti usare invece
quindi per alcune delle cose che vengono utilizzate
da alcune miscellanee o sole interne
i pacchetti ci sono già sostituzioni
e tu dovresti sbarazzartene
classe e usa quello nuovo in modo che tu possa
verificare e ottenere una sensazione per quanto
guai potresti imbatterti nel bene
la soluzione dal modo in cui intendo se tu
Ho bisogno di questa particolare classe ed è ora
nel modulo interno JDK e da
il valore predefinito non è disponibile ma è possibile
renderlo disponibile è possibile interrompere la
incapsulamento di moduli iniziando da
compilazione e avvio della JVM utilizzando
questi pesciolini – – direttiva sulle esportazioni di annunci
quindi questo è qualcosa che è possibile specificare per
compilazione e anche per runtime e
allora puoi dire ok e voglio farlo
disponibile questo pacchetto questo protetto
pacchetto strategico interno oh è dentro
Basato su Java Penso –
Io i miei pacchetti e da quando lo hai
modulizzato qualsiasi cosa tutti i tuoi pacchetti
risiedere in un modulo senza nome, quindi cosa sono
fondamentalmente dicendo è questa classe interna
Voglio renderlo disponibile al mio
roba senza nome sì e poi si può fare
quindi questa è una specie di soluzione se
roba per qualche transizione hanno bisogno di questi
protetto e cose interne JDK voi
può farlo, ma voglio dire che non c’è
garantire che questa classe sarà in giro
ancora in Java dieci o undici sì sì il
lavoro per voi è quello di capire il
interni per capire quali opzioni
devi impostare per il momento e
poi vai avanti e sbarazzati di tutto il
interni per la prossima versione e
prima che scompaiano e tu no
lavorare di più, okay, se vuoi
creare moduli cosa vuol dire
diciamo che vuoi davvero modularizzare
qualcosa o vuoi iniziare una nuova
progetto da zero dove realmente
ha senso usare solo il nuovo modulo
sistema ciò che significa è che tu hai un
diversa struttura del codice sorgente così per
se sei così lontano se hai una fonte
directory avresti una directory
per pacchetto finora e ora abbiamo un
livello di directory aggiuntivo , quindi lo faremo
avere una directory che rappresenta il
modulo e all’interno della directory di quel modulo
avresti tutto il pacchetto
directory quindi c’è un ulteriore
livello di directory che rappresenta il
modulo e un modulo contiene pacchetti
e il modulo oltre a tutto il
i pacchetti contengono un modulo informazioni dot Java
file e questo è il cosiddetto modulo a
Scritture che in realtà li hanno davvero
leggibilità e accessibilità
descrizioni e deve sedere bene sul
livello superiore sì, direttamente nel modulo
directory e la directory del modulo come
con le directory dei pacchetti deve corrispondere
il nome del modulo il nome del
il modulo apparirà anche nel modulo
descrittore e informazioni sul modulo dot java
file student.java it e dopo averlo
una classe di punti info del modulo che tu
pacchetto in un file jar insieme a tutti
le altre risorse e classi che
appartiene al modulo quindi è un
entità aggiuntiva che devi venire
ok questo è ciò che un modulo nel cibo o
Sembra che tu dici modulo tu stesso
specificare il nome del modulo e quindi
nel corpo dovresti specificare il
direttive di leggibilità e accessibilità
va bene
quindi puoi specificare cosa vuoi fare
disponibile in modo che un modulo specifichi quale
pacchetti esporta e come esportazione
direttiva lo sai così dice questo modulo
esporta il pacchetto 1 il mio pacchetto 1 tu
puoi anche avere esportazioni qualificate che puoi
dì ok, lo esporto ma solo per uno
particolare modulo sì così il primo
è un’esportazione non qualificata che lo rende
disponibile per tutti i moduli che potrebbero essere
interessato l’altro lo limita a
alcuni moduli ok quindi questo è il
specifica di accessibilità un modulo
rende potenzialmente disponibili i pacchetti
limitato ad alcuni altri moduli e
questo è il corrispondente del tipo di
dichiarazione di importazione dici che ne ho bisogno
modulo dice che ho bisogno di un altro modulo così
questo è un secondo modulo e il secondo
il modulo richiede il primo modulo
prima modalità che hai reso disponibile
pacchetti e il secondo è da dire
e ne ho bisogno quindi c’è un bilaterale
relazione tra questi due così
non compilerebbe se solo un modulo
dice ok e faccio questi pacchetti
accessibile e l’altro modulo no
dì che vuole leggerli in questo
caso non si compila e non lo fa
correre così ci deve essere davvero l’esportazione
dichiarazione in un modulo e le esigenze
in un altro modulo è un po ‘
confondere forse a prima vista perché
esportate i pacchetti ma richiedete un
intero modulo o più moduli
questa è la direttiva richiede ci sono
più direttive lo lascerò a questo
c’è anche apre e utenti e
prevede altri casi speciali ma
queste sono le esportazioni e richiede il
direttive di base per specificare
la leggibilità e l’ accessibilità è così
questa relazione bilaterale che deve essere
stabilito nelle varie informazioni del modulo
i file e quindi Java C ne verifica la presenza
controlli di runtime per la riflessione del core
controlli
proprio qui non puoi impadronirti di roba
che non hai richiesto e quello
non è stato reso disponibile nemmeno a
tempo di riflessione va bene allora c’è un
esportazione transitiva quindi se diciamo
il modulo Miller rende disponibili i suoi
pacchetti al modulo più alto e
usa tutti diciamo che usa un terzo
modulo e classi tipi alcuni elementi
dal terzo modulo compaiono nell’API
del modulo centrale in quel caso il
il modulo più in alto ha un indiretto
relazione e necessità indirette
relazione con il terzo modulo senza
anche conoscendolo e per farlo
più flessibile e più facile più facilmente
a sviluppare più tardi su quello che loro
inventato è un transitivo richiede così se
il modulo centrale dice ok ho bisogno del
terzo modulo in transito quindi
disponibile per i suoi moduli di utilizzo
tutto dal terzo modulo sì così
che il primo modulo più in alto non lo fa
deve specificare esplicitamente che
usa indirettamente il terzo in modo che sia giusto
ha una direttiva richiede al centro
uno di mezzo dice e richiede
il terzo e richiede transitivamente quello
fa la differenza okay, cosa fa?
significa quando sviluppo moduli che ci sono
vari nuovi strumenti e molte novità
opzioni se vuoi scrivere Java C o
la JVM stessa è una cosa che è veramente
diverso è oltre a un passaggio di classe
ora abbiamo un percorso del modulo e il modulo
percorso sul modulo pass devono
elenca tutti i file jar che contengono il tuo
moduli hmm è simile alla classe
percorso è solo un secondo percorso per modulare
file jar hai anche altre opzioni
come mostrare la risoluzione del modulo se si avvia
la tua JVM mostrerà più la tua risoluzione
è simile alla classe verbose semplicemente
ti dice che questo è il modulo radice
quello contiene la classe principale e poi quella
richiede questo inter center e lo farai
vedi il sottoinsieme transitivo di tutti
moduli richiesti e
dove vengono trovati riceviamo i nostri messaggi
se qualcosa non può essere trovato e così via
e così via ok per la diagnosi è
utile quindi un modulo alla fine è un così
chiamato Java modulare, si crea un Java
file e aggiungi le informazioni del modulo compilato
il descrittore del modulo in modo tale che tu voglia
a una relazione tra un modulare
File Java
e sì il modulo stesso va bene allora
ci sono ovviamente nuove opzioni necessarie
per lo strumento jar puoi specificare il
classe principale che puoi elencare puoi descrivere
il modulo che descrive i mezzi del modulo
ti dà il contenuto del modulo
descrizione quindi ci sono nuove opzioni per
già file Java modulari
immagine runtime menzionata c’è una nuova
strumento chiamato J link che crea a
immagine runtime modulare fondamentalmente ciò che
non è come collegare in una lingua
come C o C ++ in cui si collega davvero
tutto staticamente per crearne uno
file eseguibile che è quello che fa a
l’ immagine runtime è una specie di distribuzione
struttura che è simile al
struttura di implementazione del JDK in Java
9 e ciò che fa è include solo
quei moduli che sono effettivamente necessari
questo sta affrontando le dimensioni della distribuzione
problema che ho menzionato così se tu
creare un’immagine runtime a partire da
il tuo principale modulo radice principale lo farà ancora
includi solo quei moduli JDK che sono
effettivamente necessario e saranno tutti
impacchettato in una cosiddetta immagine runtime
che puoi consegnare e poi cosa
crea è una struttura di distribuzione che
ha un grande file di modulo e contiene
solo le cose necessarie così questo è
creato utilizzando il nuovo strumento di collegamento J ok ora
questo è più, ma continuiamo a farlo
quell’unico problema che avrai nel tempo
è che devi migrare probabilmente dentro
passi credo che ci vorranno molti
anni fino a quando l’intero mondo di Java è
modulare quindi quello che hai oggi è
probabilmente la tua applicazione non è modulare
librerie o framework di terze parti che
l’uso probabilmente non è più non ancora e
hai solo il JDK che è già
modulare quindi ok ora
dì che inizi a modularizzare la tua
applicazione in modo da fare un top-down
modularizzazione ma userete jaidev
scriverò la volontà capire cosa
un modulo ragionevole sarebbe che è
probabilmente si riferisce a ciò che hai come
Java è oggi il più naturale
cosa e poi scrivi le informazioni sul modulo
i file vanno bene, quindi diciamo
la tua applicazione è Modula dopo un po ‘
potresti ancora imbatterti nella situazione
altre cose che usi le librerie
quadri che non ti hanno preso
non hanno raggiunto eppure così si avrebbe
un mix di roba modulare e non modulare
elementi come funziona quello che puoi
fare è se diciamo il
la parte non modulare è di terze parti
libreria come la libreria guava per
istanza o qualcos’altro che puoi
do è questo livello di dati consegnare un file jar
un file jar non modulare come hanno fatto in
passato e puoi prendere quel file jar
e mettilo sul percorso della classe come te
fatto prima e tutto ciò che hai messo
sul percorso della classe non sul modulo
percorso ma sul percorso della classe come prima
finisce in un cosiddetto modulo senza nome così
tutto ciò che non è un modulo con nome è
fondamentalmente un modulo senza nome sulla classe
parte il percorso di classe è più simile a
modulo speciale esporta tutto tutto
questi pacchetti richiede tutto
l’unico problema è se hai un nome
moduli da cui non puoi richiedere nulla
il modulo senza nome quindi se hai bisogno di un
pacchetto dalla libreria guava che vorresti
devo dire che richiede un pacchetto guava
così e così, ma intendo che si tratta di un anonimo
modulo non puoi richiedere pacchetti tu
può richiedere solo moduli e se il
il modulo non ha un nome non c’è
modo per aver bisogno di sfortuna così in ordine
per risolvere quel problema hanno inventato
moduli automatici in modo da risolvere il
problema a cui i tuoi moduli non possono accedere
moduli senza nome prendi il barattolo per il
file jar guava e non metterlo sul
passaggio di classe, ma metterlo sul modulo
classe anche se non è modulare ancora così
puoi prendere un vaso normale non modulare
i file li mettono sul percorso del modulo in
in quale caso sono considerati essere
moduli automatici e un automatico
modulo è un nome
modulo con un nome derivato così da prendere
un’occhiata al nome del file Java e da
quel nome di file derivano un automatico
nome del modulo e da automatico
il nome del modulo ha un nome che ho derivato
nome sintetico ora puoi avere un
richiede una direttiva alla libreria guava
modulo va bene il problema è il nome che
che deriva dal nome del file Java
potrebbe essere diverso da ciò che il guava
biblioteca in futuro potrebbe
scegli come nome del modulo che poi
richiede che tu debba cambiare il tuo
richiede direttive, quindi questo è chiedere
per un guaio futuro va bene così sarebbe
sii la situazione quindi sì, così hai
la tua applicazione in moduli è JDK
e moduli prendi la libreria guava
metterlo sul percorso del modulo è quindi un
modulo automatico e moduli automatici
può usare moduli senza nome quindi se il guava
la biblioteca ha bisogno di qualcosa da un’altra
jar file sul percorso della classe che lo farebbe
funzionano così solo i moduli automatici
accedi ai moduli senza nome che vedi
abbastanza complesso se si dispone di un tipo misto
situazione per mettere tutti gli elementi sopra
il percorso del modulo di scrittura o il percorso della classe in
Per farlo funzionare, alla fine ok
c’è di più riguardo alla migrazione intendo
un problema sostanziale è se hai
quadri che accedono ai tuoi corsi
utilizzando la riflessione e in genere utilizzando
ciò che è oggi chiamato
profonda riflessione se hanno bisogno di accedere a
parti private delle tue classi
in genere utilizzare detto accessibile in ordine
per accedere alle parti private e
che ora è limitato, allora non ci sono
apre le direttive che puoi aprire
pacchetti per il reflectional illegale
eccesso illegale e c’è dell’altro
sì, quindi c’è più difficoltà a venire
il punto è per Java 9 questo illegale
eccesso di riflessione è permesso da
default ma il default cambierà con
le altre dieci così in Java
10 dovrai capire se
hai una nuova versione del framework
questo ha bisogno dell’accesso illegale
più o che si aggiunge tutto il
necessario apre la directory
così hanno reso facile passare a Java
9 ma non è la fine della storia alcuni
le cose cambieranno quando si passa a
Java 10 così si dovrebbe essere preparati che
c’è di più da venire più viaggiato ok ok
critica sì, è un po ‘di confusione ora
hai un pacchetto privato e così via e
così avanti, più hai il modulo
descrittori se una classe è pubblica
non significa che puoi accedervi di cui hai bisogno
richiedere il modulo e il modulo ha
rendere disponibile il rispettivo pacchetto
altrimenti una classe pubblica in pubblico così
è più complesso ci sono più posti
dove devi guardare per
capire se è possibile utilizzare qualcosa
ok quindi adattare il codice esistente a a
modulo di sistema modulare rendendolo realizzabile
essere un sacco di lavoro pensa ai cinque anni
ci sono voluti per più generalizzare il JDK è
potrebbe essere vicino a non essere fattibile se lo hai
un pacchetto diviso quindi penso che
la realizzazione è se hai un esistente
applicazione che dovresti probabilmente pensare
se vuoi veramente trasformare questo
nei moduli è molto lavoro se tu
vedere il valore di avere una migliore
l’incapsulamento va avanti e modernizza ma
Penso in pratica ai fornitori di librerie
e le strutture dovranno moralizzare
quella roba perché potrebbero aver usato
noi che iniziamo nuovi progetti da zero
e se tu se inizi da zero e
ha senso costruire la tua applicazione in
termini di moduli ma prendendo un esistente
applicazione app Lamay cambiandola in a
l’ applicazione modulare è probabilmente eccessiva
ma sta a te decidere se tu
vuole approfittare del
meccanismo di incapsulamento così tanto bene allora
non abbiamo le versioni del modulo così
non c’è soluzione per barare l’inferno che
è stato distribuito da molte persone ma
questo non è cambiato se lo si desidera
leggere qualcosa su di esso c’è un bianco
carta di Marc Reinhard che è il capo
architetto per la versione SE di Java
il riferimento allo strumento è interessante perché
ci sono molti nuovi strumenti e molti
nuove bandiere e hai davvero bisogno di imparare
su tutto questo se vuoi costruire
moduli che voglio ottenere anticiparlo
ci sono anche un paio di libri questo è
uno di loro ho guardato in questo
e uno è sulla strada verrà qualche volta
l’anno prossimo c’è il ragazzo Nicolai
Pollack ha molti blocchi così scrive
molto a riguardo ok ho ancora tempo
quattro minuti okay, posso darti un
un paio di idee su ciò che è disponibile in
termini di sostituzione di alcuni
miscellanea oh sì, per il resto
va in profondità nel roba fa nessuno
utilizzare alcune miscele non sicure ok allora
possiamo tranquillamente saltare solo pochissimi
la gente il problema sono le librerie che
stai usando in genere lo usano così
devono risolvere i problemi e
capire come sostituire tutti questi
cose da Sandwich di Elena non sono sicure e
questo va a fondo nelle maniglie var ha
qualcuno ha usato anche maniglie del metodo
sconosciuto sì quindi questo va in profondità nel
interiora di JDK quindi cerchiamo di dare questo uno
scopo che è ancora interessante è il
J shell abbiamo uno strumento shell in cui
puoi digitare il codice sorgente Java
frammenti e ti dà un immediato
valuta l’espressione in modo da avere
una sorta di lettura valuta il ciclo di scrittura si
quindi non devi scrivere un intero
programma se vuoi semplicemente provarne un po ‘
alcune piccole cose di codice Java e c’è
molte altre cose ti darò un
panoramica fammi vedere va bene c’è un nuovo
Client HTTP ma non ha raggiunto il
livello di qualità che avevano quello che avevano
inteso non è il cosiddetto incubatore
modalità in modo da poter provare e fornire
feedback a Oracle quindi non è davvero
utilizzabile quindi abbiamo un processo migliorato
API ottieni un controllo migliore per la gestione
Processi OS Se si, se si desidera
creare alcuni g1 è la spazzatura predefinita
collezionista che è importante per quelli
chi non ha specificato è alcuno specifico
netturbino finora ciò che anche
cambiato è hanno una registrazione JVM unificata
finora ogni componente della JVM
garbage collector il compilatore JIT e
altre parti hanno emesso
Informazioni di diagnostica su richiesta utilizzando
alcune bandiere come il dettaglio GC di stampa
o qualsiasi altra cosa e sembrava tutto diverso
e ora l’hanno unificato anche questo
cambiato le bandiere che usi
richiedendo informazioni diagnostiche così
c’è un’intera nuova bandiera chiamata X lock
due punti e quindi è possibile specificare i caratteri jolly
per la quantità di informazioni che tu
richiesta come diagnostica quindi l’output
sembra diverso dal modo in cui è controllato
è diverso e credo che molti strumenti che
ha analizzato le serrature JIT o le serrature GC
o qualcosa a cui ci vorrà del tempo
recuperare il ritardo con voi in formato al fine di
analizzarlo correttamente, quindi c’è un sacco di
cambiano ci sono molti interni sì
Javadoc è ora in formato html5 e ha a
casella di ricerca, intendo, non ne ho avuto bisogno
questo per decenni
quindi c’è molto di più di ciò che è
domande ok interne ne abbiamo alcune
domande nell’app non ci penso
può rispondere a tutti loro uno di loro è
piuttosto provocante vorrei chiederlo a
in questo modo qui è abbastanza sicuro
Ignorare il sistema modulare intendo il
la domanda era un po ‘diversa
ha detto che tipo di problemi quello che mi aspetto
se non modernizzo la mia applicazione
oggi se non ti ammodernano
potresti ancora incontrare dei problemi
perché la maggior parte delle applicazioni ne usa un terzo
roba di festa e la terza parte
le librerie di solito usano alcune miscellanee
non sicuri quindi non verranno compilati e
prima gioca subito così probabilmente
dovrebbe aspettare fino a quando tutto quello che
usi venire con qualche tipo di
soluzione per i loro problemi intendo te
potrebbe non avere necessariamente problemi
te stesso, ma potresti star usando
ibernare e farlo illegale
accesso e così via e così via così è
probabilmente difficile semplicemente ignorarlo
e anche se lo ignori, potrebbe esserci
problemi nascosti che verranno visualizzati in Java
10 quindi è probabilmente intenzione di spendere
un po ‘di tempo per la migrazione, penso
ok bene e poi c’erano abbastanza a
un sacco di domande su come funziona
si riferiscono a ciò che sappiamo di Gradle Maven
o forse anche OSGi e qual è la differenza
intorno a quello possiamo ottenere forse OSGi è
non c’è praticamente nessuna relazione loro
significa che c’era il dibattito e loro
non poteva riconciliare le loro diverse opinioni
l’idea è che l’ Austria faccia le sue cose quando
è molto più dinamico e flessibile a
runtime mentre il sistema dei moduli Java
è solo una descrizione di dipendenza statica
e quello che hanno fornito è se OSGi vuole
ricostruire la sua roba su Java
sistema di moduli quindi c’è un’API per
creazione di livelli di caricamento classi e
ricostruire OSGi in cima al modulo
sistema non so se intendono
per fare questo e terraferma e Gradle sì
devono anche aggiornare a Java 9 e
fornire supporto per la descrizione di tutti
queste dipendenze per descrivere I do I
metti questo come un modulo senza nome
automaticamente o qualcosa del genere e
per quanto ne so, non l’hanno fatto
raggiunto ancora così è il supporto degli strumenti
insufficiente in questo momento ho fatto un seminario
la settimana scorsa e stiamo effettivamente usando
console Windows e script UNIX in
Per ottenere delle cose intendo solo un ragazzo
ha detto che è interamente la vostra camera tasso è
questo è terribile quindi non c’è supporto IDE
fondamentalmente per casi semplici sì ma come
presto questo diventerà un po ‘ più complesso
e hai una situazione mista orb
di per sé , aspetta e basta
ultime parole interessanti
Aspetta, ma ok bene, continuiamo così
perché siamo leggermente nel tempo grazie
molto per te
tu
Please follow and like us: