JavaRush /Java Blog /Random-IT /Pausa caffè #60. Come funziona la raccolta dei rifiuti in...

Pausa caffè #60. Come funziona la raccolta dei rifiuti in Java (JVM). 15 domande importanti sulla Primavera in un colloquio tecnico

Pubblicato nel gruppo Random-IT

Come funziona la raccolta dei rifiuti in Java (JVM)

Fonte: DZone

Processo di raccolta dei rifiuti in Java

La garbage collection Java alloca e libera automaticamente la memoria, quindi gli sviluppatori non devono scrivere un programma separato per gestire la memoria, che è uno dei principali vantaggi della programmazione in Java. Ogni volta che un programma Java viene eseguito sulla JVM, gli oggetti vengono creati nell'heap e rappresentano una porzione di memoria allocata al programma. Con il passare del tempo alcuni articoli non saranno più necessari. Il Garbage Collector trova questi oggetti inutilizzati e li rimuove per liberare memoria. Pausa caffè #61.  Come funziona la raccolta dei rifiuti in Java (JVM).  15 domande importanti sulla Primavera in un colloquio tecnico - 1Il garbage collector, dopo aver valutato l'heap di memoria, determinerà quali oggetti sono in uso e quali no e rimuoverà gli oggetti inutilizzati. Un oggetto utilizzato o referenziato significa che qualche parte del tuo programma mantiene ancora un puntatore a quell'oggetto. Se un oggetto non è più in uso o non viene più referenziato, nessuna parte del programma vi farà più riferimento. Pertanto, la memoria utilizzata da un oggetto senza riferimenti può essere liberata eseguendo la Garbage Collection. Pausa caffè #61.  Come funziona la raccolta dei rifiuti in Java (JVM).  15 domande importanti sulla Primavera in un colloquio tecnico - 2La liberazione della memoria può essere descritta da tre processi principali:
  1. Marcatura.
  2. Rimozione normale.
  3. Rimozione con compattazione.
La marcatura è il processo di identificazione delle parti di memoria che sono e non sono utilizzate dal Garbage Collector. L’etichettatura è solitamente il primo passo. L'eliminazione normale è il processo di eliminazione degli oggetti a cui non viene fatto riferimento, lasciando gli oggetti e i puntatori a cui si fa riferimento nello spazio libero. Eliminazione compattazione : oltre a eliminare gli oggetti senza riferimenti, compatta gli oggetti di riferimento rimanenti, spostando gli oggetti insieme per rendere la nuova allocazione di memoria molto più semplice e veloce.

Memoria heap JVM

Pausa caffè #61.  Come funziona la raccolta dei rifiuti in Java (JVM).  15 domande importanti sulla Primavera in un colloquio tecnico - 3

Generazione giovane

Gli oggetti appena creati iniziano in Young Generation. Viene chiamato anche asilo nido perché qui cominciano a vivere nuovi oggetti. Young Generation è diviso in Eden Space, dove iniziano tutti i nuovi oggetti, e due Survivor Spaces, dove gli oggetti vengono spostati fuori dall'Eden dopo essere sopravvissuti in un unico ciclo di raccolta dei rifiuti. Provocano la raccolta dei rifiuti quando gli oggetti vengono raccolti dal garbage collector di Young Generation. Eden Space Tutti i nuovi oggetti vengono prima creati in Eden Space. La garbage collection minore verrà attivata quando raggiunge una soglia determinata dalla JVM. Gli oggetti menzionati vengono spostati dall'Eden Space al primo spazio di salvataggio ("Eden" e "da" -> "a"). Gli oggetti senza riferimento vengono rimossi quando Eden Space viene cancellato. Sopravvissuto 0 (S0) e Sopravvissuto 1 (S1) Entrambi i campi sopravvissuto (Da e a) iniziano vuoti. Quando si verifica nuovamente la raccolta dei rifiuti, tutti gli oggetti a cui si fa riferimento vengono spostati nello spazio rimanente. Al termine della raccolta dei rifiuti, i luoghi (nomi) del sopravvissuto "da" e "a" vengono scambiati. Se durante la precedente garbage collection S1 era nel ruolo “a”, ora S1 è pieno e diventa “da”. Di conseguenza, se S0 è vuoto, diventerà “a”.

Vecchia generazione

Dopo la raccolta dei rifiuti minori, quando gli oggetti obsoleti raggiungono una certa soglia di età (la soglia predefinita per le JVM moderne è impostata su 15 cicli di raccolta dei rifiuti), insieme agli oggetti di lunga durata passano dalla generazione giovane a quella vecchia. Man mano che continuano a sorgere raccoglitori di rifiuti minori, gli oggetti continuano a spostarsi nello spazio di vecchia generazione, inizierà a riempirsi e si verificherà una raccolta di rifiuti maggiore. La Garbage Collection di base avviene quando gli oggetti vengono raccolti dal Garbage Collector di vecchia generazione. Pausa caffè #61.  Come funziona la raccolta dei rifiuti in Java (JVM).  15 domande importanti sulla Primavera in un colloquio tecnico - 4

Generazione permanente

I metadati come classi e metodi vengono archiviati in Permanent Generation. Le classi che non vengono più utilizzate possono essere rimosse dal Garbage Collector. Durante una garbage collection completa, vengono raccolti gli oggetti inutilizzati di tutte le generazioni.Pausa caffè #61.  Come funziona la raccolta dei rifiuti in Java (JVM).  15 domande importanti sulla Primavera in un colloquio tecnico - 5

Tipi di raccolta dei rifiuti

Le raccolte di rifiuti che puliscono varie parti all'interno dell'heap sono spesso chiamate raccolte di rifiuti minori, principali e complete. Ma poiché i termini Minor, Major e Full sono ampiamente utilizzati senza una definizione adeguata, esamineremo la spiegazione di tutti questi tipi di garbage collection.

Raccolta dei rifiuti minori

La raccolta dei rifiuti provenienti dallo spazio Young Generation si chiama Minor Garbage Collection. Questo tipo di build viene sempre attivato quando la JVM non può allocare spazio per un nuovo oggetto, ovvero quando Eden Space è pieno. Pertanto, quanto più alto è il tasso di selezione, tanto più spesso si verifica la Minor Garbage Collection.

La grande raccolta dei rifiuti

La Major Garbage Collection ripulisce Tenered (vecchio spazio). Poiché la vecchia generazione è più grande, l’assemblaggio avviene meno frequentemente rispetto alla giovane generazione. Quando gli oggetti scompaiono dalla vecchia generazione, diciamo che si è verificata una "grande raccolta di rifiuti". Il collezionista della Vecchia Generazione cercherà di prevedere quando dovrà iniziare a collezionare per evitare fallimenti di promozione da parte della Giovane Generazione. I raccoglitori monitorano la soglia di riempimento della vecchia generazione e iniziano a raccogliere quando tale soglia viene superata. Se questa soglia non è sufficiente a soddisfare i requisiti della promozione, viene avviata la "Full Garbage Collection".

Raccolta completa dei rifiuti

La Full Garbage Collection ripulisce l'intero gruppo, sia gli spazi giovani che quelli vecchi. Molte persone sono confuse tra Major (solo VECCHIA generazione) e Full GC (Young + OLD (Heap)). La Full Garbage Collection comprende la promozione di tutti gli oggetti viventi dalla giovane alla vecchia generazione dopo aver assemblato e compattato la vecchia generazione. La raccolta completa dei rifiuti sarà una tappa per Stop-the-World. Garantisce che nuovi oggetti non vengano allocati e che gli oggetti non diventino inaccessibili mentre il raccoglitore è in esecuzione.

15 domande importanti sulla Primavera in un colloquio tecnico

Fonte: Dev.to Spring Framework è un framework universale per la piattaforma Java. Le sue funzionalità principali possono essere utilizzate da qualsiasi applicazione Java e sono disponibili estensioni per la creazione di applicazioni Web basate su Java EE. Ecco un elenco di domande e risposte dell'intervista relative alla codifica Spring. Ci auguriamo che ti aiutino a prepararti per il colloquio tecnico nel 2021.Pausa caffè #61.  Come funziona la raccolta dei rifiuti in Java (JVM).  15 domande importanti sulla Primavera in un colloquio tecnico - 6

1. Cos'è la primavera?

Risposta: Spring è un framework open source per lo sviluppo di applicazioni Java. Le funzionalità principali di Spring Framework possono essere utilizzate per sviluppare qualsiasi applicazione Java e sono disponibili anche estensioni per creare applicazioni Web basate sulla piattaforma Java EE. Il framework Spring mira a rendere J2EE più facile da usare nello sviluppo e a migliorare le pratiche di programmazione incorporando un modello basato su POJO (Plain Old Java Object).

2. Qual è lo scope predefinito di un bean nel framework Spring?

Risposta: L'ambito predefinito di un bean è Singleton (modello di progettazione).

3. Cos'è il cablaggio Bean?

Risposta: Il cablaggio dei bean è l'atto di creare associazioni tra i componenti dell'applicazione (bean) in un contenitore Spring.

4. Cos'è Spring Security?

Risposta: Spring Security è un modulo separato del framework Spring che si concentra sulla fornitura di metodi di autenticazione e autorizzazione alle applicazioni Java. Risolve inoltre le vulnerabilità di sicurezza più comuni come gli attacchi CSRF. Per utilizzare Spring Security nelle applicazioni web, puoi iniziare con una semplice annotazione: @EnableWebSecurity.

5. Cosa è contenuto nella definizione di bean?

Risposta: Una definizione di bean contiene informazioni chiamate metadati di configurazione che il contenitore deve conoscere quanto segue:
  • Come creare un fagiolo;
  • Dettagli del ciclo di vita del bean;
  • dipendenze dei bean.

6. Cos'è Spring Boot?

Risposta: Spring Boot è un progetto che fornisce un set preconfigurato di framework per ridurre la configurazione standard in modo da poter rendere operativa un'applicazione Spring con un codice minimo.

7. Cos'è DispatcherServlet e a cosa serve?

Risposta: DispatcherServlet è un'implementazione del modello di progettazione Front Controller che gestisce tutte le richieste Web in entrata a un'applicazione Spring MVC. Il pattern Front Controller (Enterprise Application Design Pattern) è un pattern comune nelle applicazioni web il cui compito è prendere l'intera richiesta e instradarla ai vari componenti dell'applicazione per l'effettiva elaborazione. In Spring MVC DispatcherServlet viene utilizzato per trovare il controller corretto per gestire la richiesta. Questo viene fatto utilizzando le mappature dei gestori: ad esempio, l'annotazione @RequestMapping.

8. Spring-mvc.jar è necessario nel classpath o fa parte di spring-core?

Risposta: Spring-mvc.jar fa parte di spring-core, il che significa che se desideri utilizzare il framework Spring MVC nel tuo progetto Java, devi includere spring-mvc.jar nel classpath della tua applicazione. In un'applicazione Web Java, spring-mvc.jar viene solitamente inserito nella cartella /WEB-INF/lib.

9. Quali sono i vantaggi dell'utilizzo di Spring?

Risposta: di seguito è riportato un elenco di alcuni vantaggi derivanti dall'utilizzo di Spring Framework:
  • Leggero – La primavera è relativamente leggera in termini di dimensioni e trasparenza. La versione base di Spring Framework è di circa 2 MB.
  • Inversione di controllo (IOC) - L'accoppiamento lento si ottiene in primavera utilizzando la tecnica di inversione di controllo. Gli oggetti forniscono le proprie dipendenze invece di creare o cercare oggetti dipendenti.
  • Orientato agli aspetti : Spring supporta la programmazione orientata agli aspetti e garantisce uno sviluppo coerente disaccoppiando la logica aziendale dell'applicazione dai servizi di sistema.
  • Contenitori : Spring Container crea oggetti, li lega insieme, li configura e li gestisce dalla creazione allo smaltimento.
  • MVC Framework - Spring web framework è un framework web MVC ben progettato che fornisce un'alternativa ai framework web come Struts o altri framework web eccessivamente progettati o meno popolari.
  • Gestione delle transazioni - Spring dispone di un'interfaccia di gestione delle transazioni coerente che può adattarsi a transazioni locali (ad esempio utilizzando un singolo database) o transazioni globali (ad esempio utilizzando JTA).
  • Gestione delle eccezioni : Spring fornisce una comoda API per convertire eccezioni specifiche della tecnologia (come quelle lanciate da JDBC, Hibernate o JDO) in eccezioni coerenti e non controllate.

10. Cosa sono i fagiolini primaverili?

Risposta: I bean Spring sono istanze di oggetti gestiti da Spring Container. Vengono creati e collegati dal framework e inseriti in una “borsa oggetti” (contenitore) da dove è possibile successivamente recuperarli. Il cablaggio è ciò che costituisce l'iniezione di dipendenza. Ciò significa che puoi semplicemente dire "Ho bisogno di questa cosa" e il framework seguirà determinate regole per ottenere quell'oggetto.

11. Qual è lo scopo del modulo Core Container?

Risposta: Il contenitore del kernel fornisce le funzionalità principali del framework Spring. Il componente principale del contenitore principale è BeanFactory, un'implementazione del pattern Factory. BeanFactory utilizza il controllo di inversione per separare le dipendenze della configurazione e delle specifiche dell'applicazione dal codice dell'applicazione effettiva.

12. Cos'è un contesto applicativo?

Risposta: A prima vista, il contesto applicativo è lo stesso della fabbrica di fagioli. Entrambi caricano le definizioni dei bean, raggruppano insieme i bean e li distribuiscono su richiesta. Ma prevede anche:
  • Uno strumento per la risoluzione dei messaggi di testo, incluso il supporto per l'internazionalizzazione.
  • Un modo comune per caricare le risorse dei file.
  • Eventi per bean registrati come ascoltatori.

13. Come integrare Java Server Faces (JSF) con Spring?

Risposta: JSF e Spring condividono alcune delle stesse funzionalità, soprattutto nell'area dei servizi di inversione del controllo. Dichiarando i bean gestiti JSF nel file di configurazione faces-config.xml, consenti a FacesServlet di istanziare quel bean all'avvio. Le tue pagine JSF hanno accesso a questi bean e a tutte le loro proprietà. JSF e Spring possono essere integrati in due modi: DelegatingVariableResolver : Spring viene fornito con un risolutore di variabili JSF che consente di utilizzare JSF e Spring insieme. DelegatingVariableResolver delega innanzitutto la ricerca dei valori all'interprete predefinito dell'implementazione JSF sottostante e quindi al "contesto aziendale" di Spring WebApplicationContext. Ciò semplifica l'inserimento delle dipendenze nei bean gestiti da JSF. FacesContextUtils : un VariableResolver personalizzato funziona bene quando si mappano le sue proprietà sui bean in faces-config.xml. Ma se hai bisogno di catturare un bean, la classe FacesContextUtils lo rende semplice. È simile a WebApplicationContextUtils tranne per il fatto che accetta un parametro FacesContext anziché un parametro ServletContext.
ApplicationContext ctx = FacesContextUtils.getWebApplicationContext (FacesContext.getCurrentInstance ());

14. Cos'è il framework Spring MVC?

Risposta: Il framework Spring Web MVC fornisce un'architettura model-view-controller e componenti predefiniti che possono essere utilizzati per sviluppare applicazioni web flessibili e liberamente accoppiate. Il modello MVC determina la separazione di diversi aspetti di un'applicazione (logica di input, logica di business e logica dell'interfaccia utente) consentendo al tempo stesso un accoppiamento libero tra questi elementi.

15. Come funziona la gestione degli eventi in primavera?

Risposta: l'elaborazione in ApplicationContext viene fornita tramite la classe ApplicationEvent e l' interfaccia ApplicationListener. Cioè, se un bean implementa ApplicationListener , ogni volta che un ApplicationEvent viene pubblicato in ApplicationContext , quel bean viene registrato. Grazie per aver letto e buona fortuna con il tuo colloquio tecnico!
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION