1
00:00:03,010 --> 00:00:05,230
Ciao, questo è che non vogliono fare.

2
00:00:05,550 --> 00:00:09,190
Non comprendiamo il vantaggio della raccolta dei rifiuti.

3
00:00:09,190 --> 00:00:12,810
Non passiamo un po 'di tempo a capire gli algoritmi di Geesey.

4
00:00:14,570 --> 00:00:17,100
Ci sono due sfide principali che devono essere affrontate.

5
00:00:18,210 --> 00:00:22,510
Il primo è come il garbage collector identifica gli oggetti morti.

6
00:00:23,320 --> 00:00:25,570
Butterine si sta facendo questa identificazione.

7
00:00:25,840 --> 00:00:32,380
Ci sono buone probabilità che alcuni nuovi oggetti vengano creati mentre alcuni vecchi oggetti vengono abbandonati in uno

8
00:00:32,380 --> 00:00:38,230
scenario del genere, quindi gli oggetti appena abbandonati dovrebbero essere recuperati e il condotto sarebbe molto

9
00:00:38,230 --> 00:00:41,260
difficile da fare per evitare questa complessità.

10
00:00:41,260 --> 00:00:46,760
Una cosa da fare sarebbe quella di pubblicare l'applicazione per un po 'di tempo prima che DC venga eseguita.

11
00:00:47,290 --> 00:00:51,640
Ma se ci fermiamo troppo a lungo, questo potrebbe influenzare l'esperienza dell'utente.

12
00:00:51,640 --> 00:00:58,120
Immagino che sia un'applicazione web, quindi il sito Web potrebbe non essere reattivo e questo significa che potremmo

13
00:00:59,640 --> 00:01:04,740
perdere clienti, quindi una seconda sfida è garantire che il passatempo dell'applicazione sia minimo.

14
00:01:05,230 --> 00:01:06,950
Quindi queste sono le due sfide.

15
00:01:07,000 --> 00:01:09,490
Vediamo come i designer Djala si rivolgono a loro.

16
00:01:11,130 --> 00:01:15,050
Diamo un'occhiata alla prima sfida che riguarda l'identificazione degli oggetti morti.

17
00:01:15,180 --> 00:01:22,200
E naturalmente reclamare il loro spazio a quando vado da loro per fare ciò è chiamato noi segno e sweep

18
00:01:22,740 --> 00:01:25,720
che ha due facce che segnano e spazzano.

19
00:01:26,480 --> 00:01:34,090
Seguendo il nome si può presumere che Mark per anni implicherebbe l'identificazione di oggetti morti ma in realtà fa l'opposto che è quello

20
00:01:34,090 --> 00:01:40,930
di identificare tutti gli oggetti dal vivo e il modo in cui fa questo tiene traccia di alcuni oggetti specifici

21
00:01:40,930 --> 00:01:47,740
chiamati root della raccolta di rifiuti sotto la radice della raccolta di dati inutili potrebbe essere qualcosa di simile

22
00:01:47,740 --> 00:01:51,340
a una variabile locale in uno dei metodi astutamente eseguibili.

23
00:01:51,580 --> 00:01:58,580
Oppure potrebbe essere un campo statico in una classe che è stata ordinata su questo sarebbe un oggetto di amici e

24
00:01:58,660 --> 00:02:01,760
non un modello che sto facendo segnare per questo.

25
00:02:01,820 --> 00:02:08,540
DC eliminerebbe il grafico degli oggetti da ciascuna rotta del GC per identificare tutti gli oggetti dal vivo.

26
00:02:09,900 --> 00:02:13,140
Quale esempio consideriamo questa illustrazione qui.

27
00:02:13,200 --> 00:02:13,800
Eccolo.

28
00:02:13,800 --> 00:02:19,920
Percorso GC che sta inferendo un oggetto e quell'oggetto fa riferimento a due ulteriori oggetti e tali oggetti

29
00:02:19,920 --> 00:02:23,410
fanno riferimento ad altri oggetti formando quindi un grafico oggetto.

30
00:02:23,790 --> 00:02:29,030
Le enfatizzate una volta in blu sono raggiungibili quelle in GRY non più raggiungibili.

31
00:02:29,130 --> 00:02:30,800
Cioè erano raggiungibili ad un certo punto.

32
00:02:31,020 --> 00:02:34,370
Ma a questo punto del tempo sono fuori portata.

33
00:02:34,500 --> 00:02:37,440
Quindi quelli che sono oggetti irraggiungibili sono oggetti morti.

34
00:02:37,560 --> 00:02:43,080
Cioè non fanno come qualsiasi attività di Francis So nella fase finta GC proverà

35
00:02:43,080 --> 00:02:48,930
a cazzuole questo oggetto grafico su deriderà tutti gli oggetti raggiungibili come luce successiva nella sweep.

36
00:02:48,950 --> 00:02:56,660
Questo è ciò che viene eseguito l'intero heap per tenere traccia delle aree di heap che non sono la mia luce migliore.

37
00:02:57,090 --> 00:03:03,810
Quindi quelle sarebbero aree libere e irraggiungibili dal mio ufficio e quindi possono essere ricollocate.

38
00:03:04,680 --> 00:03:11,460
Ora prima hai detto che quando GC sta svolgendo il suo lavoro dobbiamo mettere in pausa l'applicazione qui,

39
00:03:11,460 --> 00:03:13,600
possiamo vedere perché è necessario.

40
00:03:13,650 --> 00:03:20,470
Ad esempio, se non mettiamo in pausa l'applicazione, dopo che il marcatore è lì forse alcuni nuovi

41
00:03:20,490 --> 00:03:28,850
oggetti che vengono creati su questi nuovi oggetti ovviamente non saranno taggati come in questo modo in faccia si potrebbe pensare

42
00:03:28,850 --> 00:03:34,480
erroneamente che siano anche irraggiungibili e si limitino a reclamare spazio occupato da loro.

43
00:03:34,790 --> 00:03:37,410
Così come gli oggetti vengono recuperati qui.

44
00:03:37,820 --> 00:03:43,700
Quindi il modo più semplice per risolvere questo problema è analizzare l'applicazione.

45
00:03:43,700 --> 00:03:50,060
Vediamo anche un'altra semplice illustrazione consideriamo quest'area in cui il blocco mostrato in blu è considerato

46
00:03:50,180 --> 00:03:56,110
localizzato mentre l'area grigia è considerata per la notte dopo l'esecuzione di GC.

47
00:03:56,340 --> 00:03:58,200
Potremmo avere qualcosa di simile.

48
00:03:58,320 --> 00:04:04,100
Ora le aree blu indicano oggetti vivi che sono la luce di Marble dalle beffe.

49
00:04:04,090 --> 00:04:07,400
E piuttosto ciò che rimane sarebbe considerato come spazzatura.

50
00:04:07,530 --> 00:04:11,130
Questo è libero di essere assegnato a nuovi oggetti.

51
00:04:11,130 --> 00:04:17,280
Quindi nella dolce faccia tutte le aree grigie verrebbero registrate in alcune molto serie.

52
00:04:17,330 --> 00:04:21,020
Il problema con questo algoritmo è che la memoria è frammentata.

53
00:04:21,440 --> 00:04:24,540
Quella è l'area è divisa attraverso l'heap.

54
00:04:25,040 --> 00:04:31,190
Quindi, se un nuovo oggetto deve essere visto, la sua base su nessuno degli airiest liberi è abbastanza grande da

55
00:04:31,190 --> 00:04:31,910
poterlo contenere.

56
00:04:31,910 --> 00:04:33,810
Quindi JVM semplicemente non può.

57
00:04:33,810 --> 00:04:40,340
E guarda è basato sul fatto che siamo Jenrette e senza memoria o chi lo fa.

58
00:04:40,390 --> 00:04:49,170
C'è un altro algoritmo chiamato Mark sweep compact qui i primi due passaggi sono identici a Montgomery.

59
00:04:50,290 --> 00:04:57,660
Ma c'è un ulteriore passo compatto che quasi tutti vivono gli oggetti all'inizio della regione di memoria.

60
00:04:57,670 --> 00:05:04,090
Quindi con questo non c'è alcun problema di frammentazione e c'è una maggiore possibilità di localizzare con successo oggetti

61
00:05:04,090 --> 00:05:05,460
di grandi dimensioni.

62
00:05:05,510 --> 00:05:12,310
Tuttavia il lato negativo di questo è che ci sarebbe un aumento del tempo di processo per lo spostamento degli oggetti

63
00:05:12,670 --> 00:05:19,090
Dalila e anche l'aggiornamento di tutti i riferimenti agli oggetti corrispondenti che fanno riferimento a tali oggetti dal vivo poiché

64
00:05:19,090 --> 00:05:23,630
i loro indirizzi di memoria non vengono aggiornati a causa di questo spostamento.

65
00:05:23,650 --> 00:05:24,890
Quindi questo è il segno.

66
00:05:24,940 --> 00:05:28,350
Quindi li compattiamo con algoritmo.

67
00:05:28,370 --> 00:05:35,590
C'è anche una terza volta che Calmady può copiare, il che è molto simile all'approccio compatto di Mark sweep

68
00:05:35,590 --> 00:05:38,410
in quanto si spostano anche come oggetti.

69
00:05:38,510 --> 00:05:39,980
Ed ecco come funziona

70
00:05:41,080 --> 00:05:48,870
Questo andrò da loro e in questo caso sto mantenendo due regioni di memoria aeb ha un po 'di memoria di

71
00:05:49,000 --> 00:05:56,000
uso e anche un po' di memoria libera è completamente gratis ora dopo che DC è sbagliato.

72
00:05:56,000 --> 00:05:58,070
Questo è come sarebbe.

73
00:05:58,120 --> 00:06:00,600
Fondamentalmente ci sono due cose che accadono qui.

74
00:06:00,670 --> 00:06:05,250
Per prima cosa dopo il finto congelamento tutti i miei oggetti sono segnati come prima.

75
00:06:05,410 --> 00:06:10,770
Quindi impari come è solo la frammentazione che non è mostrata qui a causa di vincoli di spazio.

76
00:06:11,260 --> 00:06:19,340
Ora, durante il congelamento della copia, gli oggetti vengono trasferiti nella regione, una cosa bella è che tutti li guardano in modo

77
00:06:19,420 --> 00:06:21,280
contiguo nella regione B.

78
00:06:21,470 --> 00:06:28,770
Quindi nessuna frammentazione come nel caso del secondo algoritmo, ma ho annuito in una pagina delle copie di Marchman

79
00:06:28,780 --> 00:06:32,000
che copiavano che Frias può accadere simultaneamente.

80
00:06:32,020 --> 00:06:36,260
Ma i Makris che sono come oggetti viventi vengono derisi.

81
00:06:36,290 --> 00:06:39,610
Questo può anche essere spostato nella seconda regione.

82
00:06:39,610 --> 00:06:42,890
Quindi a causa di questo l'applicazione post-time è scioccante.

83
00:06:43,230 --> 00:06:50,370
E nella prossima lezione vedremo un esempio molto bello di copia di Marcom che coinvolge molte più cifre.

84
00:06:50,560 --> 00:06:56,670
Quindi questi sono i tre algoritmi su o solo la seconda sfida perché sono solo un passatempo.

85
00:06:56,830 --> 00:07:02,420
Ce n'è un altro che andrò da loro chiamato la raccolta generazionale che in realtà è stata impiegata

86
00:07:02,440 --> 00:07:03,770
per citare gli atomi.

87
00:07:03,790 --> 00:07:09,050
Quindi è un'altra tecnica, ma potrebbe utilizzare uno o più di questi algoritmi.

88
00:07:09,080 --> 00:07:12,330
Ora vedremo come la generazione non raccoglie libri.

89
00:07:12,550 --> 00:07:13,030
Grazie.
