1. Analyse et aperçu des concepts pertinents du modèle de mémoire.Trois concepts en programmation simultanée.Analyse approfondie du mot-clé volatile.Scénarios d'utilisation du mot-clé volatile.2.Concepts associés au modèle de mémoire. problème. Les variables auxquelles plusieurs threads accèdent sont généralement appelées variables partagées. En d’autres termes, si une variable est mise en cache dans plusieurs processeurs (ce qui se produit généralement dans la programmation multithread), il peut alors y avoir un problème d’incohérence du cache. Afin de résoudre le problème d'incohérence du cache, il existe généralement deux solutions : ajouter LOCK# au bus et utiliser le protocole de cohérence du cache. Ces deux méthodes sont toutes deux fournies au niveau matériel. Il y a un problème avec la méthode 1 ci-dessus. Pendant la période de verrouillage du bus, les autres processeurs ne peuvent pas accéder à la mémoire, ce qui entraîne une faible efficacité. Protocole de cohérence du cache. Le plus connu est le protocole MESI d'Intel, qui garantit la cohérence de la copie des variables partagées utilisées dans chaque cache. Son idée principale est la suivante : lorsque le processeur écrit des données, s'il constate que la variable utilisée est une variable partagée, c'est-à-dire qu'une copie de la variable existe également dans d'autres processeurs, un signal sera envoyé pour informer les autres processeurs de définir le ligne de cache de la variable sur Aucun
1 Analyse de l'exemple de code d'implémentation du mot clé volatile Java à partir de la racine (image)
Introduction : 1. Présentation de l'analyse Concepts associés au modèle de mémoire Trois concepts de programmation simultanée Modèle de mémoire Java Analyse approfondie des scénarios de mots-clés volatiles utilisant le mot-clé volatile 2. Concepts associés DeMemory modelProblème de cohérence du cache. Les variables auxquelles plusieurs threads accèdent sont généralement appelées variables partagées. En d’autres termes, si une variable est mise en cache dans plusieurs processeurs (ce qui se produit généralement dans la programmation multithread), il peut alors y avoir un problème d’incohérence du cache. Afin de résoudre le problème d'incohérence du cache, il existe généralement deux solutions : En ajoutant LOCK# au bus..
2 Graphique et texte du modèle de mémoire Java JMM détaillés. explication
Introduction : JMM est inévitable pour un programmeur qui souhaite comprendre Java en profondeur. Tout d'abord, cet article est plus théorique et j'essaie de le rendre aussi simple à comprendre que possible. S'il y a des erreurs, j'espère que vous pourrez me corriger.
3. Présentation des chaînes Java (Partie 2)
Introduction : La classe String en Java est la classe la plus fréquemment utilisée dans notre développement quotidien, mais il n'est pas facile de véritablement maîtriser cette classe. Afin de restaurer l'image réelle et complète de la classe String, l'auteur la divise d'abord en deux articles de blog pour passer en revue la classe String. L'auteur part du modèle de mémoire Java, combiné avec le code source de la classe String dans le JDK, notamment le pool constant, l'immuabilité, la méthode de création d'objets de la classe String, la relation entre la classe String et le mode flyweight, les expressions régulières, le clonage et les trois chaînes principales. Une explication complète et précise de plusieurs aspects tels que les catégories.
4. Présentation des chaînes Java (Partie 1)
Introduction : La classe String en Java est la classe la plus fréquemment utilisée dans notre développement quotidien, mais il n'est pas facile de véritablement maîtriser cette classe. Afin de restaurer l'image réelle et complète de la classe String, l'auteur la divise d'abord en deux articles de blog pour passer en revue la classe String. L'auteur part du modèle de mémoire Java, combiné avec le code source de la classe String dans le JDK, notamment le pool constant, l'immuabilité, la méthode de création d'objets de la classe String, la relation entre la classe String et le mode flyweight, les expressions régulières, le clonage et les trois chaînes principales. Une explication complète et précise de plusieurs aspects tels que les catégories.
5. Introduction détaillée au modèle de mémoire Java
Introduction : Ce modèle de mémoire Java spécifie comment la machine virtuelle Java fonctionne avec la mémoire de l'ordinateur (RAM). Cette machine virtuelle Java est un modèle de l'ordinateur entier, de sorte que ce modèle inclut naturellement un modèle de mémoire - également appelé modèle de mémoire Java. Comprendre le modèle de mémoire Java est important si vous souhaitez concevoir correctement des programmes concurrents. Ce modèle de mémoire Java fait référence à comment et quand différents threads peuvent voir les valeurs des variables partagées écrites par d'autres threads et à la manière d'accéder aux variables partagées de manière synchrone. Le modèle de mémoire Java initial est insuffisant
6 【Concurrence Java morte】-----Analyse du modèle de mémoire Java volatile
Introduction : Le blog précédent [Deadly Java Concurrency] - Une analyse approfondie du principe d'implémentation de volatile a déjà expliqué les caractéristiques de volatile : volatile Visibilité ; pour une lecture volatile, vous pouvez toujours voir l'écriture finale dans cette variable ; volatile est atomique pour une seule lecture/écriture (32 bits Long, Double), mais à l'exception des opérations composées, telles que JVM ; La couche inférieure utilise une « barrière de mémoire » pour implémenter la sémantique volatile. Ci-dessous, LZ utilise ce qui se passe
7 【Concurrence Java mortelle】-----Réorganisation du modèle de mémoire Java.
Introduction : Lors de l'exécution d'un programme, afin d'offrir des performances, les processeurs et les compilateurs modifient souvent les instructions. Réorganisation, mais vous ne pouvez pas réorganiser à volonté. Vous ne pouvez pas le trier comme vous le souhaitez. Il doit remplir les deux conditions suivantes : 1. Le résultat de l'exécution du programme ne peut pas être modifié dans un environnement monothread ; autorisé s'il y a des dépendances de données. Tri Si vous avez lu le blog précédent de LZ, vous saurez que ces deux points peuvent être attribués à une chose : JMM permet un tri arbitraire qui ne peut être déduit par le principe du « arrive-avant ». sémantique comme si-série comme si-se
8. 【Concurrence Java】-----Le modèle de mémoire Java se produit avant
Introduction : Dans le dernier blog ([Deadly Java Concurrency] - Analyse approfondie du principe d'implémentation de volatile) LZ l'a mentionné Il a été constaté qu'en raison de l'existence de la mémoire locale des threads et de la mémoire principale, associée à la réorganisation, il y aurait des problèmes de visibilité dans les environnements multithreads. Donc, si nous utilisons correctement la synchronisation et le verrouillage, quand le thread A modifie-t-il la variable a visible pour le thread B ? Nous ne pouvons pas stipuler dans tous les scénarios quand les variables modifiées par un thread sont visibles par les autres threads, mais nous pouvons spécifier certaines règles. À partir du JDK 5, JMM utilise ha
<.>9. Une brève analyse du modèle de mémoire Java et du garbage collection
Introduction : Le L'éditeur ci-dessous vous apportera une brève analyse du modèle de mémoire Java et du garbage collection. L'éditeur le trouve plutôt bien, j'aimerais donc le partager avec vous maintenant et le donner comme référence. Venez jeter un oeil avec l'éditeur, je vous souhaite à tous un bon jeu
10 Analyse approfondie du modèle de mémoire Java : partie de base.
Introduction : En programmation simultanée, nous devons traiter deux problèmes clés : comment communiquer entre les threads et comment se synchroniser entre les threads (les threads ici font référence à l'exécution simultanée d'entités actives). La communication fait référence au mécanisme par lequel les threads échangent des informations. En programmation impérative, il existe deux mécanismes de communication entre les threads : la mémoire partagée et la transmission de messages.
[Recommandation de questions et réponses connexes] :
un problème d'ordre sémantique se produit avant le modèle de mémoire Java
Multi-threading - Questions sur la visibilité de la mémoire Java
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!