JavaRush /Blog Java /Random-FR /Pause café #60. Comment fonctionne le garbage collection ...

Pause café #60. Comment fonctionne le garbage collection en Java (JVM). 15 questions importantes sur Spring lors d'un entretien technique

Publié dans le groupe Random-FR

Comment fonctionne le garbage collection en Java (JVM)

Source : DZone

Processus de collecte des déchets en Java

Le garbage collection Java alloue et libère automatiquement de la mémoire, de sorte que les développeurs n'ont pas besoin d'écrire un programme distinct pour gérer la mémoire, ce qui constitue l'un des principaux avantages de la programmation en Java. Chaque fois qu'un programme Java s'exécute sur la JVM, des objets sont créés sur le tas et représentent une partie de la mémoire allouée au programme. Au fil du temps, certains éléments ne seront plus nécessaires. Le garbage collector trouve ces objets inutilisés et les supprime pour libérer de la mémoire. Pause café #61.  Comment fonctionne le garbage collection en Java (JVM).  15 questions importantes sur Spring lors d'un entretien technique - 1Le garbage collector, après avoir évalué le tas de mémoire, déterminera quels objets sont utilisés et lesquels ne le sont pas, et supprimera les objets inutilisés. Un objet utilisé ou référencé signifie qu'une partie de votre programme conserve toujours un pointeur vers cet objet. Si un objet n'est plus utilisé ou n'est plus référencé, il ne sera plus référencé par aucune partie du programme. Ainsi, la mémoire utilisée par un objet non référencé peut être libérée en effectuant un garbage collection. Pause café #61.  Comment fonctionne le garbage collection en Java (JVM).  15 questions importantes sur Spring lors d'un entretien technique - 2La libération de mémoire peut être décrite par trois processus principaux :
  1. Marquage.
  2. Retrait normal.
  3. Enlèvement avec compactage.
Le marquage est le processus d'identification des parties de la mémoire qui sont et ne sont pas utilisées par le garbage collector. L'étiquetage est généralement la première étape. La suppression normale est le processus de suppression d'objets qui ne sont pas référencés, laissant les objets référencés et les pointeurs dans l'espace libre. Suppression de compactage - En plus de supprimer les objets non référencés, il compacte les objets référencés restants, en déplaçant les objets ensemble pour rendre une nouvelle allocation de mémoire beaucoup plus facile et plus rapide.

Mémoire de tas JVM

Pause café #61.  Comment fonctionne le garbage collection en Java (JVM).  15 questions importantes sur Spring lors d'un entretien technique - 3

Jeune génération

Les objets nouvellement créés commencent dans Young Generation. On l'appelle aussi pépinière car de nouveaux objets commencent à vivre ici. La jeune génération est divisée en Eden Space, où commencent tous les nouveaux objets, et en deux Survivor Spaces, où les objets sont déplacés hors d'Eden après avoir survécu dans un seul cycle de collecte des ordures. Ils provoquent une nouvelle collecte des déchets lorsque les objets sont collectés par le garbage collector de la Jeune Génération. Eden Space Tous les nouveaux objets sont d'abord créés dans Eden Space. Le garbage collection mineur se déclenchera lorsqu'il atteindra un seuil déterminé par la JVM. Les objets mentionnés sont déplacés de l'Eden Space vers le premier espace de sauvegarde (« Eden » et « from » -> « to »). Les objets non référencés sont supprimés lorsque Eden Space est effacé. Survivant 0 (S0) et Survivant 1 (S1) Les deux champs Survivant (De et vers) commencent vides. Lorsque le garbage collection se produit à nouveau, tous les objets référencés sont déplacés vers l'espace restant. Une fois le garbage collection terminé, les lieux (noms) du survivant « de » et « vers » sont échangés. Si lors du garbage collection précédent, S1 était dans le rôle « vers », maintenant S1 est plein et devient « de ». En conséquence, si S0 est vide, alors il deviendra « to ».

Ancienne génération

Après un garbage collection mineur, lorsque les objets obsolètes atteignent un certain seuil d'âge (le seuil par défaut des JVM modernes est fixé à 15 cycles de garbage collection), ils, ainsi que les objets à longue durée de vie, passent de la jeune génération à l'ancienne. À mesure que des éboueurs mineurs continuent de surgir, les objets continuent de se déplacer dans l'espace de l'ancienne génération, celui-ci commencera à se remplir et un ramassage des ordures majeur aura lieu. Le garbage collection de base se produit lorsque les objets sont collectés par le garbage collector d'ancienne génération. Pause café #61.  Comment fonctionne le garbage collection en Java (JVM).  15 questions importantes sur Spring lors d'un entretien technique - 4

Génération permanente

Les métadonnées telles que les classes et les méthodes sont stockées dans la génération permanente. Les classes qui ne sont plus utilisées peuvent en être supprimées par le garbage collector. Lors d'un garbage collection complet, les objets inutilisés de toutes les générations sont collectés.Pause café #61.  Comment fonctionne le garbage collection en Java (JVM).  15 questions importantes sur Spring lors d'un entretien technique - 5

Types de collecte des déchets

Les garbage collection qui nettoient diverses parties du tas sont souvent appelées garbage collection mineures, majeures et complètes. Mais comme les termes Mineur, Majeur et Complet sont largement utilisés sans définition appropriée, nous examinerons l'explication de tous ces types de garbage collection.

Collecte des déchets mineurs

La collecte des déchets de l’espace Jeune Génération est appelée Minor Garbage Collection. Ce type de build est toujours déclenché lorsque la JVM ne peut pas allouer d'espace pour un nouvel objet, c'est-à-dire lorsque Eden Space est plein. Ainsi, plus le taux de sélection est élevé, plus le ramassage des déchets mineurs est fréquent.

Grande collecte des déchets

Le grand ramassage des déchets nettoie les locaux occupés (anciens espaces). Parce que la vieille génération est plus nombreuse, les rassemblements se produisent moins fréquemment que la jeune génération. Lorsque des objets disparaissent de l’ancienne génération, on dit qu’un « garbage collection majeur » a eu lieu. Le collectionneur de la Vieille Génération tentera de prédire quand il devra commencer à collectionner pour éviter les échecs de promotion de la Jeune Génération. Les collecteurs surveillent le seuil de remplissage de l'ancienne génération et commencent à collecter lorsque ce seuil est dépassé. Si ce seuil n'est pas suffisant pour répondre aux exigences de promotion, le « Full Garbage Collection » est lancé.

Collecte complète des déchets

Full Garbage Collection nettoie tout le groupe, les espaces jeunes et vieux. Beaucoup de gens sont confus entre Major (ANCIENNE génération uniquement) et Full GC (Young + OLD (Heap)). La collecte complète des déchets comprend la promotion de tous les objets vivants de la jeune à la vieille génération après assemblage et compactage de l'ancienne génération. Une collecte complète des déchets sera un arrêt pour Stop-the-World. Cela garantit que de nouveaux objets ne sont pas alloués et que les objets ne deviennent pas indisponibles pendant l'exécution du collecteur.

15 questions importantes sur Spring lors d'un entretien technique

Source : Dev.to Spring Framework est un framework universel pour la plateforme Java. Ses fonctionnalités de base peuvent être utilisées par n'importe quelle application Java, et il existe des extensions pour créer des applications Web basées sur Java EE. Voici une liste de questions et réponses d'entretien liées au codage Spring. Nous espérons qu’ils vous aideront à préparer votre entretien technique en 2021.Pause café #61.  Comment fonctionne le garbage collection en Java (JVM).  15 questions importantes sur Spring lors d'un entretien technique - 6

1. Qu'est-ce que le printemps ?

Réponse : Spring est un framework open source pour développer des applications Java. Les fonctionnalités de base de Spring Framework peuvent être utilisées pour développer n'importe quelle application Java, et des extensions sont également disponibles pour créer des applications Web basées sur la plate-forme Java EE. Le framework Spring vise à rendre J2EE plus facile à utiliser dans le développement et à améliorer les pratiques de programmation en incorporant un modèle basé sur POJO (Plain Old Java Object).

2. Quelle est la portée par défaut d'un bean dans le framework Spring ?

Réponse : La portée par défaut d'un bean est Singleton (modèle de conception).

3. Qu'est-ce que le câblage Bean ?

Réponse :  Le câblage d'un bean consiste à créer des associations entre des composants d'application (beans) dans un conteneur Spring.

4. Qu'est-ce que la sécurité Spring ?

Réponse : Spring Security est un module distinct du framework Spring qui se concentre sur la fourniture de méthodes d'authentification et d'autorisation aux applications Java. Il corrige également les vulnérabilités de sécurité les plus courantes telles que les attaques CSRF. Pour utiliser Spring Security dans les applications Web, vous pouvez commencer par une simple annotation : @EnableWebSecurity.

5. Que contient la définition d'un bean ?

Réponse : Une définition de bean contient des informations appelées métadonnées de configuration dont le conteneur a besoin pour connaître les éléments suivants :
  • Comment créer un bean ;
  • Détails du cycle de vie du bean ;
  • dépendances de haricots.

6. Qu'est-ce que Spring Boot ?

Réponse : Spring Boot est un projet qui fournit un ensemble de frameworks préconfigurés pour réduire la configuration passe-partout afin que vous puissiez faire fonctionner une application Spring avec un minimum de code.

7. Qu'est-ce que DispatcherServlet et à quoi sert-il ?

Réponse : DispatcherServlet est une implémentation du modèle de conception Front Controller qui gère toutes les requêtes Web entrantes vers une application Spring MVC. Le modèle Front Controller (Enterprise Application Design Pattern) est un modèle courant dans les applications Web dont le travail consiste à prendre l'intégralité de la requête et à l'acheminer vers divers composants de l'application pour un traitement réel. Au printemps, MVC DispatcherServlet est utilisé pour trouver le bon contrôleur pour gérer la requête. Cela se fait à l'aide de mappages de gestionnaires : par exemple, l'annotation @RequestMapping.

8. Spring-mvc.jar est-il nécessaire sur le chemin de classe ou fait-il partie de spring-core ?

Réponse : Spring-mvc.jar fait partie de spring-core, ce qui signifie que si vous souhaitez utiliser le framework Spring MVC dans votre projet Java, vous devez inclure spring-mvc.jar dans le chemin de classe de votre application. Dans une application Web Java, spring-mvc.jar est généralement placé dans le dossier /WEB-INF/lib.

9. Quels sont les avantages de l’utilisation de Spring ?

Réponse : Vous trouverez ci-dessous une liste de quelques avantages liés à l'utilisation de Spring Framework :
  • Léger – Spring est relativement léger en termes de taille et de transparence. La version de base de Spring Framework fait environ 2 Mo.
  • Inversion de contrôle (IOC) - Un couplage lâche est obtenu au printemps en utilisant la technique d'inversion de contrôle. Les objets fournissent leurs dépendances au lieu de créer ou de rechercher des objets dépendants.
  • Orienté aspect : Spring prend en charge la programmation orientée aspect et garantit un développement cohérent en dissociant la logique métier des applications des services système.
  • Conteneurs - Spring Container crée des objets, les lie ensemble, les configure et les gère de la création à la suppression.
  • Framework MVC - Le framework Web Spring est un framework Web MVC bien conçu qui offre une alternative aux frameworks Web comme Struts ou d'autres frameworks Web trop conçus ou moins populaires.
  • Gestion des transactions - Spring dispose d'une interface de gestion des transactions cohérente qui peut s'adapter aux transactions locales (par exemple en utilisant une seule base de données) ou aux transactions globales (par exemple en utilisant JTA).
  • Gestion des exceptions - Spring fournit une API pratique pour convertir les exceptions spécifiques à la technologie (telles que celles lancées par JDBC, Hibernate ou JDO) en exceptions cohérentes et non contrôlées.

10. Que sont les haricots de printemps ?

Réponse : Les beans Spring sont des instances d'objets gérés par Spring Container. Ils sont créés et connectés par le framework et placés dans un « sac d'objets » (conteneur) d'où vous pourrez ensuite les récupérer. Le câblage est ce qui constitue l’injection de dépendances. Cela signifie que vous pouvez simplement dire : « J'ai besoin de cette chose » et le framework suivra certaines règles pour obtenir cet objet.

11. Quel est l'objectif du module Core Container ?

Réponse : Le conteneur du noyau fournit les fonctionnalités de base du framework Spring. Le composant principal du conteneur principal est BeanFactory, une implémentation du modèle Factory. BeanFactory utilise le contrôle d'inversion pour séparer les dépendances de configuration et de spécification d'application du code d'application réel.

12. Qu'est-ce qu'un contexte d'application ?

Réponse : À première vue, le contexte de l’application est le même que celui de la bean factory. Les deux chargent les définitions de beans, regroupent les beans et les distribuent sur demande. Mais il propose également :
  • Un outil de résolution de messages texte, incluant la prise en charge de l'internationalisation.
  • Un moyen courant de télécharger des ressources de fichiers.
  • Événements pour les beans enregistrés en tant qu'écouteurs.

13. Comment intégrer Java Server Faces (JSF) à Spring ?

Réponse : JSF et Spring partagent certaines des mêmes fonctionnalités, notamment dans le domaine des services d'inversion de contrôle. En déclarant les beans gérés JSF dans le fichier de configuration faces-config.xml, vous autorisez FacesServlet à instancier ce bean au démarrage. Vos pages JSF ont accès à ces beans et à toutes leurs propriétés. JSF et Spring peuvent être intégrés de deux manières : DelegatingVariableResolver : Spring est livré avec un résolveur de variables JSF qui vous permet d'utiliser JSF et Spring ensemble. DelegatingVariableResolver délègue d'abord la recherche de valeurs à l'interpréteur par défaut de l'implémentation JSF sous-jacente, puis au "contexte métier" de Spring WebApplicationContext. Cela facilite l'injection de dépendances dans les beans gérés par JSF. FacesContextUtils : Un VariableResolver personnalisé fonctionne bien lors du mappage de ses propriétés aux beans dans faces-config.xml. Mais si vous avez besoin de capturer un bean, la classe FacesContextUtils vous facilite la tâche. Il est similaire à WebApplicationContextUtils sauf qu'il accepte un paramètre FacesContext plutôt qu'un paramètre ServletContext.
ApplicationContext ctx = FacesContextUtils.getWebApplicationContext (FacesContext.getCurrentInstance ());

14. Qu'est-ce que le framework Spring MVC ?

Réponse : Le framework Spring Web MVC fournit une architecture modèle-vue-contrôleur et des composants prédéfinis qui peuvent être utilisés pour développer des applications Web flexibles et faiblement couplées. Le modèle MVC entraîne la séparation des différents aspects d'une application (logique d'entrée, logique métier et logique d'interface utilisateur) tout en permettant un couplage lâche entre ces éléments.

15. Comment fonctionne la gestion des événements au printemps ?

Réponse : Le traitement dans ApplicationContext est fourni via la classe ApplicationEvent et l'interface ApplicationListener . Autrement dit, si un bean implémente ApplicationListener , chaque fois qu'un ApplicationEvent est publié dans ApplicationContext , ce bean est enregistré. Merci d'avoir lu et bonne chance pour votre entretien technique !
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION