1
00:00:02,200 --> 00:00:04,570
Ciao, questo è quello da fare.

2
00:00:04,960 --> 00:00:12,700
Abbiamo appreso che l'interpretazione bytecode Java di GBM aiuta a cogliere la pronuncia della famiglia che

3
00:00:12,710 --> 00:00:19,280
non compromette la velocità DVM è una piattaforma incredibilmente ben collaudata e ottimizzata.

4
00:00:19,450 --> 00:00:26,200
È così bello che anche i programmi scritti in altri linguaggi popolari come Scallan Ruby possono essere compilati in

5
00:00:26,200 --> 00:00:29,650
un bytecode Java che può essere fatto su JVM.

6
00:00:29,650 --> 00:00:35,380
In questo modo ottengono anche il beneficio dell'indipendenza dalla piattaforma oltre ad altri vantaggi come

7
00:00:35,380 --> 00:00:38,530
la velocità e la sicurezza offerti da JVM.

8
00:00:38,550 --> 00:00:46,110
Abbiamo un capitolo a parte dedicato a JVM solo noi idee elevate sul funzionamento interno di JVM, ma per

9
00:00:46,110 --> 00:00:50,640
ora otteniamo una buona comprensione di alto livello di JVM.

10
00:00:50,670 --> 00:00:57,150
È una lezione un po 'lunga, ma dovrebbe sicuramente aiutarti a capire quanto sia potente e sofisticata

11
00:00:57,150 --> 00:00:58,110
la JVM.

12
00:01:00,080 --> 00:01:08,030
GBM è la pietra angolare della nostra piattaforma e aiuta Jawa ad alcuni dei suoi obiettivi come la sicurezza

13
00:01:08,120 --> 00:01:11,120
dell'indipendenza della piattaforma e l'esecuzione molto veloce.

14
00:01:12,660 --> 00:01:19,440
La piccola macchina Java è chiamata ciò che si vuole perché è una macchina di calcolo astratta che è come una

15
00:01:19,440 --> 00:01:21,010
vera macchina di calcolo.

16
00:01:21,030 --> 00:01:27,790
Ha un set di istruzioni che esegue le istruzioni di Arnis che è il bytecode di Adela.

17
00:01:27,800 --> 00:01:33,280
Quindi voglio vedere il tuo codice macchina in modo che le istruzioni impostino uno per un byte Java JVM.

18
00:01:33,330 --> 00:01:41,310
Quindi, se l'istruzione è impostata come una vera macchina informatica, JVM manipola la memoria in fase di runtime.

19
00:01:41,310 --> 00:01:43,650
Cioè utilizza la memoria per eseguire i suoi programmi.

20
00:01:43,830 --> 00:01:46,360
Sottoponga i loro dati.

21
00:01:46,480 --> 00:01:52,390
Non che il termine runtime qui si riferisca al momento in cui il programma viene effettivamente eseguito.

22
00:01:54,260 --> 00:02:01,940
Nessun GBM ha poche possibilità di coro e include l'apprendimento e l'interpretazione della sicurezza bytecode Java e della

23
00:02:02,000 --> 00:02:03,940
gestione automatica della memoria.

24
00:02:04,430 --> 00:02:09,180
Sappiamo già che interpretare il bytecode Java aiuta l'indipendenza dalla piattaforma.

25
00:02:09,230 --> 00:02:15,140
La sicurezza è fondamentale poiché Job è stato sviluppato per un ambiente di rete

26
00:02:15,200 --> 00:02:20,660
che i programmi vengono scaricati da tutta la rete e non si vuole

27
00:02:20,660 --> 00:02:28,970
che quei programmi eseguano attività dannose sulla macchina dell'utente a meno che non si sia in grado di programmare direttamente

28
00:02:29,090 --> 00:02:32,530
la memoria processo automatico di gestione della memoria.

29
00:02:32,540 --> 00:02:37,840
Ciò semplifica la programmazione in Java e inoltre rende i programmi Java molto più sicuri.

30
00:02:37,890 --> 00:02:43,650
In questo modo si ridurranno notevolmente alcuni errori di memoria veramente brutti che si possono fare.

31
00:02:44,420 --> 00:02:51,130
Come vedremo in GBM ha componenti separati per gestire queste responsabilità.

32
00:02:51,220 --> 00:02:58,340
Quando discutiamo di GBM ci sono tre cose che riguardano per prima cosa la specifica GBM.

33
00:02:58,370 --> 00:03:04,190
È semplicemente un documento che descrive le funzionalità di GBM su come dovrebbe funzionare.

34
00:03:04,190 --> 00:03:07,480
Specifica anche il set di istruzioni bytecode.

35
00:03:07,660 --> 00:03:13,580
Vedremo alcune delle istruzioni bytecode nella JVM e le ciambelle Shapter chiunque può utilizzare le

36
00:03:13,730 --> 00:03:18,520
specifiche per implementare il proprio GBM. No, proprio come le specifiche Gibeon.

37
00:03:18,520 --> 00:03:24,210
C'è anche la disfigurazione della lingua Java che è gelosa di sicuro.

38
00:03:24,250 --> 00:03:30,730
Questo è un altro documento che fornisce una descrizione dettagliata della sintassi e della semantica del linguaggio

39
00:03:31,390 --> 00:03:37,150
Java e può essere considerato probabilmente la risorsa più completa per il linguaggio Java.

40
00:03:37,150 --> 00:03:43,300
Solo l'azione specifica di google per Java sul primo collegamento conterrà collegamenti sia con

41
00:03:43,300 --> 00:03:52,020
i giornalisti sia con il GBM specifico di GBM relativo a Gibeah è un'implementazione concreta delle specifiche GBM e delle

42
00:03:53,300 --> 00:03:58,750
implementazioni GBM più diffuse nei buoni articoli hotspot su IBM Debian.

43
00:03:58,900 --> 00:04:03,880
Ancora una volta, non tutte le implementazioni di GBM dovrebbero seguire le specifiche JVM.

44
00:04:04,180 --> 00:04:07,420
Quindi le specifiche di Gibeon sono come un progetto per una casa.

45
00:04:07,600 --> 00:04:10,670
Quale implementazione JVM è la casa vera e propria.

46
00:04:12,530 --> 00:04:19,220
Infine, la terza nozione relativa a JVM è un'istanza di runtime che è semplicemente un'istanza di

47
00:04:19,310 --> 00:04:20,910
un'implementazione GBM concreta.

48
00:04:21,290 --> 00:04:23,890
Diamo un'occhiata a un esempio.

49
00:04:23,980 --> 00:04:31,060
Diciamo che abbiamo un programma chiamato Hello November, ottieni questo programma usando lo spazio combinato di Jervoise.

50
00:04:31,110 --> 00:04:36,090
Ciao e istanza di Gibeah maltrattata e caricata in memoria.

51
00:04:36,090 --> 00:04:41,230
Quindi questa è l'istanza di runtime JVM.

52
00:04:41,260 --> 00:04:49,460
Poi fatto carica il programma ciao in memoria e poi lo esegue come puoi vedere Il programma non confermato GBM è ora

53
00:04:49,520 --> 00:04:50,550
in memoria.

54
00:04:51,390 --> 00:04:58,960
Quindi ogni obbligo Jahl viene eseguito all'interno dell'istanza di runtime di alcune implementazioni concrete di GBM.

55
00:04:58,970 --> 00:05:06,050
Si noti inoltre che un'istanza di runtime esegue solo un'azione Jalopnik per quanto riguarda le prestazioni.

56
00:05:06,080 --> 00:05:13,730
GBM svolge un ruolo fondamentale nel garantire che Joe funzioni molto velocemente e siamo pronti a discuterne.

57
00:05:13,820 --> 00:05:18,030
Interpretare il bytecode Java è molto più rapido dell'interpretazione del codice sorgente.

58
00:05:18,410 --> 00:05:26,970
E questo perché il tribunale ha un formato compatto ed è già compilato, inoltre sono ottimizzati e, inoltre, per accelerare

59
00:05:27,030 --> 00:05:33,590
ulteriormente l'esecuzione, la maggior parte delle implementazioni GBM eseguono anche qualcosa chiamato just in time.

60
00:05:33,610 --> 00:05:35,320
Completamento Art Jackky.

61
00:05:35,750 --> 00:05:37,280
E così funziona.

62
00:05:38,090 --> 00:05:45,960
Poiché il bytecode viene interpretato, GBM monitora la frequenza in cui ogni pezzo di codice eseguito su

63
00:05:45,960 --> 00:05:52,070
alcuni dei codici viene eseguito più frequentemente di altri e il record frequentemente

64
00:05:52,070 --> 00:06:01,200
uscito viene definito come hotchpotch su hotchpotch assegnato a un sottocomponente di JVM attuale compilatore Jayati compilatore Geddie quindi convertire

65
00:06:01,300 --> 00:06:04,170
questi hotspot in codice macchina.

66
00:06:05,390 --> 00:06:07,910
Su questo codice macchina viene quindi memorizzato nella cache.

67
00:06:07,910 --> 00:06:16,520
Questa è la memoria di Sybrand e in futuro il codice della macchina da scrivere viene eseguito direttamente, con prestazioni molto

68
00:06:16,520 --> 00:06:22,800
più veloci a meno che il codice non sia ancora interpretato dall'interprete di luglio.

69
00:06:22,930 --> 00:06:29,560
Quindi il codice spesso segreto non viene interpretato ogni volta che il codice corrispondente

70
00:06:29,650 --> 00:06:38,450
della cassa è ciò che viene eseguito questa compilazione JRD viene anche definita come completamento dinamico come una compilazione o

71
00:06:38,460 --> 00:06:47,160
il codice macchina viene eseguito dinamicamente in fase di esecuzione, non un completamento dinamico non è definito e Gibeon specifica.

72
00:06:47,190 --> 00:06:53,760
È un dettaglio di implementazione che è una particolare implementazione JVM potrebbe scegliere di non

73
00:06:53,880 --> 00:06:55,680
implementare la compilazione dinamica.

74
00:06:55,830 --> 00:07:04,820
Tuttavia, la maggior parte delle implementazioni di GBM incluso l'hotspot di Oracle e IBM Studium utilizzano il completamento dinamico.

75
00:07:04,840 --> 00:07:09,450
Iniziamo con un semplice esempio per avere un'idea migliore della concorrenza.

76
00:07:09,460 --> 00:07:13,750
Consideriamo che abbiamo questi due metodi, chiamati unbar non alimentari.

77
00:07:13,830 --> 00:07:17,650
Potresti sapere quali sono i metodi se non sai cosa sono.

78
00:07:17,780 --> 00:07:24,590
Sono semplicemente blocchi di codice che possono essere eseguiti qualsiasi numero di volte e in genere rappresentano la logica

79
00:07:24,680 --> 00:07:26,520
di business del software.

80
00:07:27,050 --> 00:07:29,500
E discuteremo i metodi in dettaglio e il prossimo capitolo.

81
00:07:30,500 --> 00:07:39,510
Ora qui consideriamo che la barra del metodo ha cinquanta righe di codice non runtime che il codice corrispondente a queste

82
00:07:39,630 --> 00:07:45,000
50 righe di codice viene interpretato dall'interprete Jola sul corrispondente codice macchina

83
00:07:45,000 --> 00:07:46,560
che viene eseguito.

84
00:07:46,570 --> 00:07:52,080
Ora succede sempre e succede anche la seconda volta e così via e non vedo la pausa in tempo.

85
00:07:52,940 --> 00:07:59,390
Quindi ogni volta che viene interpretato il bytecode corrispondente a ogni riga di codice e viene generato

86
00:07:59,390 --> 00:08:01,400
un codice di spawning machine.

87
00:08:02,440 --> 00:08:09,290
Ora che ha funzionato 4000 volte, il metodo cattivo discord può essere considerato come eseguito frequentemente.

88
00:08:09,580 --> 00:08:17,170
Questo sarebbe stato designato come hotspot e il compilatore GRB avrebbe poi eseguito il kick-in e avrebbe

89
00:08:17,320 --> 00:08:25,330
generato la propria versione di codice macchina di questo metodo e questo movimento è probabilmente una versione ottimizzata del

90
00:08:25,330 --> 00:08:28,680
codice macchina che è stato eseguito finora.

91
00:08:28,960 --> 00:08:36,640
Quindi, come un normale compilatore, il compilatore G-Ride può anche eseguire l'ottimizzazione su questo codice macchina generato

92
00:08:36,640 --> 00:08:45,830
GRB, viene memorizzato nella cache e deve essere eseguito per il tempo impeccabile e senza fronzoli che il codice macchina

93
00:08:45,830 --> 00:08:47,850
cast verrà eseguito direttamente.

94
00:08:47,930 --> 00:08:53,900
Quindi non c'è più un'interpretazione del bytecode corrispondente alle 50 linee di codice in questo metodo,

95
00:08:53,950 --> 00:09:00,770
ma poiché il codice macchina viene eseguito direttamente, verrebbe eseguito molto velocemente proprio come il codice scritto in

96
00:09:00,770 --> 00:09:02,380
C o C ++.

97
00:09:02,390 --> 00:09:09,900
È per questo motivo che Julys considerava quasi come le lingue come il precipizio del CRC.

98
00:09:09,900 --> 00:09:15,990
Ora, se la parola Barmouth è esecutore per dire due dozzine di volte, allora potrebbe innescare

99
00:09:15,990 --> 00:09:21,630
un altro round di ottimizzazione da parte del conduttore Jackky che accelera l'esecuzione.

100
00:09:21,640 --> 00:09:22,740
Non che io sia pazzo.

101
00:09:22,780 --> 00:09:28,390
Potrebbe non essere quello eseguito frequentemente sulle mani potrebbe essere interpretato ogni volta.

102
00:09:28,590 --> 00:09:34,420
Quindi questo è il modo concettualmente in cui il compilatore di agenti funzionerebbe esattamente nel modo in cui è implementato.

103
00:09:34,560 --> 00:09:38,000
Potrebbe variare da un'implementazione JVM a un'altra.

104
00:09:40,000 --> 00:09:46,320
Finalmente ecco un'architettura tipica di un'implementazione JVM che ha diversi componenti.

105
00:09:46,350 --> 00:09:52,430
Qui abbiamo un programma Java chiamato halloed o Java che è compilato in ciao buio e l'esecuzione.

106
00:09:52,450 --> 00:09:54,330
Ciao Doc Plus usando il comando.

107
00:09:54,370 --> 00:09:55,020
John waspish.

108
00:09:55,030 --> 00:09:55,770
Ciao.

109
00:09:56,110 --> 00:10:00,940
Come sappiamo, l'istanza GBM verrà lanciata per la prima volta Gibeah.

110
00:10:00,940 --> 00:10:08,370
Poi in walk sottocomponente chiamato classloader che come dice il nome indica che la classe Hello Doc rispetta il

111
00:10:08,820 --> 00:10:15,540
corso di byte corrispondente e fa Malmedy i codici di byte sono quindi verificati da un

112
00:10:15,540 --> 00:10:23,690
componente chiamato verificatore bytecode per assicurare che il file di classe caricato abbia una struttura interna adeguata e conforme a

113
00:10:23,700 --> 00:10:26,280
le regole del linguaggio del lavoro.

114
00:10:26,610 --> 00:10:33,690
E questo è fondamentale per garantire l'integrità di JVM in quanto i classificatori possono essere scaricati da tutta la

115
00:10:33,690 --> 00:10:34,380
rete.

116
00:10:34,650 --> 00:10:41,450
Come nel caso delle applet, devono essere compresi solo da compilatori cattivi o dannosi.

117
00:10:41,540 --> 00:10:47,840
Una volta che il campo è stato pronto, può essere eseguito in sicurezza dal motore di esecuzione

118
00:10:47,840 --> 00:10:50,080
che in questo caso include decompilatore.

119
00:10:50,150 --> 00:10:56,660
Oltre all'interprete, la spazzatura può apparire come un componente responsabile della gestione automatica della

120
00:10:56,660 --> 00:10:57,650
memoria.

121
00:10:57,920 --> 00:11:04,950
E sappiamo che la gestione automatica della memoria è una delle principali responsabilità di JVM. Il

122
00:11:04,950 --> 00:11:12,690
successivo gestore della sicurezza può essere utilizzato per consentire agli utenti di eseguire un bytecode non affidabile purché il

123
00:11:12,690 --> 00:11:15,090
bytecode non compia operazioni pericolose.

124
00:11:15,090 --> 00:11:21,930
Ad esempio, si potrebbe voler limitare qualsiasi codice byte scaricato dall'accesso al proprio file system su

125
00:11:21,930 --> 00:11:29,380
security manager, in quanto è possibile eseguire il byte court in un ambiente più ristretto chiamato ambiente sandbox.

126
00:11:29,540 --> 00:11:37,150
E infine in cima abbiamo le diverse idee sui dati di runtime che fanno parte della memoria che Gibeah fa confusione.

127
00:11:37,150 --> 00:11:38,200
Lo guardo.

128
00:11:38,700 --> 00:11:45,150
Quindi, all'avvio di JVM, viene ottenuto un blocco di memoria dal sistema operativo sottostante per eseguire i suoi programmi

129
00:11:45,990 --> 00:11:51,620
e le diverse parti di un programma verranno archiviate in queste diverse aree di memoria.

130
00:11:51,770 --> 00:11:56,850
Non parleranno ora di queste aree, ma nella JVM e in questo capitolo Bebel ha

131
00:11:56,850 --> 00:11:58,660
discusso molte di queste aree.

132
00:11:59,010 --> 00:12:04,620
Allo stesso modo discuteremo anche altri componenti come il verificatore bytecode del programma di caricamento e il garbage collector.

133
00:12:04,620 --> 00:12:11,660
Effettivamente e mi piacerebbe davvero usare i programmi demo per ottenere una solida comprensione di questi diversi componenti.

134
00:12:11,820 --> 00:12:12,890
Quindi questo è tutto.

135
00:12:12,890 --> 00:12:19,500
E questa è una panoramica di alto livello di JVM e si può vedere che si tratta di

136
00:12:20,070 --> 00:12:27,190
un software altamente sofisticato che rende i programmi Java eseguiti molto velocemente e in sicurezza e anche in una piattaforma indipendente.

137
00:12:27,600 --> 00:12:27,990
Grazie.
