Java Memory Model (JMM) and virtual machine (JVM) memory, GC

java memory model jmm virtual

During the interview , About Java Memory model ( Focus on :Java The concurrency principle of ) and JVM The memory model of is not the same problem , So I summarize the relevant knowledge points after querying the data , If there's something wrong , Welcome to point out , We can also discuss .

Computer based memory design structure ,CPU In the process of development , Running faster and faster , The reading and writing speed of memory can't keep up with CPU Running speed of , Therefore, it is proposed that “ cache ” The concept of .CPU In the process of reading and writing , You can write data to the cache first , The cache then flushes the data into main memory . therefore , In the case of multithreading “ Cache inconsistency ”, That is, multiple threads may not cache the same data consistently .

Data based security , Need to satisfy atomicity 、 visibility 、 Orderliness

More specifically about CPU And memory between the love and hate entanglement, at present I am not in-depth , Interested students can learn about it by themselves

Java Memory model (JMM)

·· Java Memory model is a kind of memory model specification , Shielding the access differences of various hardware and operating systems , To ensure the Java It is a mechanism and specification that program can access memory in various platforms to ensure the consistent effect

First of all, three concepts , Basically, the memory model is designed to solve these three problems

Atomicity : In one operation CPU It can't be suspended 、 interrupt , Or the execution is complete , Or not

visibility : When multiple threads access the same variable , After a thread modifies a variable , Other threads can see the modified value immediately

Orderliness : The program executes the code in order

summary :JMM It's a norm , There is a problem of inconsistency between memory and cache data when it is used to deal with multithreaded shared memory

Java How to implement the memory model

Java Provides a series of concurrency related keywords , such as :volatile、synchronized、final、concurren

In fact, these are Java The memory model is encapsulated in the bottom layer and provided to the programmer to use keywords after implementation

The focus of this article is to understand JMM, So I won't introduce the related keywords in detail !!!!

synchronized Used to guarantee Atomicity

volatile For visibility

volatile and synchronized Can achieve visibility

JVM Memory model

Java Virtual machines divide managed memory into five areas :  Insert picture description here

1. Program counter

Concept : Program counter is a very small memory space , It's thread private , It can be regarded as the line number indicator of the current thread .

Purpose :CPU When performing multithreaded tasks , In order to ensure that the thread can switch to the correct execution position , Each thread has a separate program counter , Program counters between different threads do not affect each other , Independent storage .

Be careful : If the thread is executing a java Method , So the counter records the address of the virtual machine bytecode instruction . If native【 Bottom method 】, Then the counter is empty . This memory area is the only one not included in the virtual machine specification OutOfMemoryError Region

2.Java Stack ( Virtual machine stack )

Concept : The stack describes Java Memory model for method execution , Each method creates its own memory stack to store local variables and other related information when it is executed , The way to store them is to store them one by one , So here's a stack in and out process .

When the method execution is complete , The memory stack is destroyed , So the variables defined in the method are placed in the memory stack .

3. Pile up

Concept : The pile is Java The largest block memory area in the virtual machine , Because the objects stored in the heap are shared by threads , So multithreading also requires synchronization . Most of the object instances and arrays allocate memory on the heap , It's not always like this , The reason lies in JIT The maturity of compiler technology , This statement is not so absolute .

Be careful : Why there are stacks and heaps :

When a method executes , Each method establishes its own memory stack to store the variables defined in the method , Destroy at the end of the method , But when you create an object in a program , This object will be saved in the heap ( It can also be called : Run time data area , The heap is part of it ), It is convenient and can be used repeatedly , This is because the cost of creating objects is usually quite high . Let's make it this way , Then objects in heap memory will not be destroyed with the end of the method , When this object is referenced by a method, it may also be used by other reference variables , The object will not be destroyed . Only when an object does not have any reference variables to refer to it , The garbage collection mechanism of the system will recycle it at the right time ( Does it sound familiar , Special like GC)

4. Method area

Concept : The concepts of method area and heap are similar , Is the memory shared by all threads , To distinguish it from the heap , Also known as “ Non heap ”

Purpose : Used to store class information loaded by virtual machine 、 Constant 、 Static variables

5. Native Method Stack

Concept : The native method stack is very similar to the virtual machine stack , The difference is that the virtual machine stack performs Java Method ( That's bytecode ) service , The local method stack is used by the virtual machine native Method service , Maybe it's called at the bottom c perhaps c++, We turn on jdk The installation directory can be seen and has many uses c Documents prepared , It could be native Method c Code .

GC:java GC Generally speaking java Garbage collection mechanism , The mechanism is java And C/C++ One of the main differences

Purpose : In order to solve the problem of memory leak ( Try to solve , After all, what should be leaked will be leaked ) image newest 2020 Organize and collect some high frequency interview questions ( It's all documented ), There are a lot of dry goods , contain mysql,netty,spring, Threads ,spring cloud、jvm、 Source code 、 The algorithm is explained in detail , There's also a detailed learning plan , Interview questions, etc , If you need to get this content, please add Q Your appearance :909038429 /./* Welcome to join java communication Q Your appearance :909038429 Blow water and chat together

本文为[osc_ forty-eight million eight hundred and thirteen thousand fo]所创,转载请带上原文链接,感谢

  1. 【计算机网络 12(1),尚学堂马士兵Java视频教程
  2. 【程序猿历程,史上最全的Java面试题集锦在这里
  3. 【程序猿历程(1),Javaweb视频教程百度云
  4. Notes on MySQL 45 lectures (1-7)
  5. [computer network 12 (1), Shang Xuetang Ma soldier java video tutorial
  6. The most complete collection of Java interview questions in history is here
  7. [process of program ape (1), JavaWeb video tutorial, baidu cloud
  8. Notes on MySQL 45 lectures (1-7)
  9. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  10. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  11. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  12. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  13. 【递归,Java传智播客笔记
  14. [recursion, Java intelligence podcast notes
  15. [adhere to painting for 386 days] the beginning of spring of 24 solar terms
  16. K8S系列第八篇(Service、EndPoints以及高可用kubeadm部署)
  17. K8s Series Part 8 (service, endpoints and high availability kubeadm deployment)
  18. 【重识 HTML (3),350道Java面试真题分享
  19. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  20. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  21. [re recognize HTML (3) and share 350 real Java interview questions
  22. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  23. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  24. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  25. RPC 1: how to develop RPC framework from scratch
  26. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  27. RPC 1: how to develop RPC framework from scratch
  28. 一次性捋清楚吧,对乱糟糟的,Spring事务扩展机制
  29. 一文彻底弄懂如何选择抽象类还是接口,连续四年百度Java岗必问面试题
  30. Redis常用命令
  31. 一双拖鞋引发的血案,狂神说Java系列笔记
  32. 一、mysql基础安装
  33. 一位程序员的独白:尽管我一生坎坷,Java框架面试基础
  34. Clear it all at once. For the messy, spring transaction extension mechanism
  35. A thorough understanding of how to choose abstract classes or interfaces, baidu Java post must ask interview questions for four consecutive years
  36. Redis common commands
  37. A pair of slippers triggered the murder, crazy God said java series notes
  38. 1、 MySQL basic installation
  39. Monologue of a programmer: despite my ups and downs in my life, Java framework is the foundation of interview
  40. 【大厂面试】三面三问Spring循环依赖,请一定要把这篇看完(建议收藏)
  41. 一线互联网企业中,springboot入门项目
  42. 一篇文带你入门SSM框架Spring开发,帮你快速拿Offer
  43. 【面试资料】Java全集、微服务、大数据、数据结构与算法、机器学习知识最全总结,283页pdf
  44. 【leetcode刷题】24.数组中重复的数字——Java版
  45. 【leetcode刷题】23.对称二叉树——Java版
  46. 【leetcode刷题】22.二叉树的中序遍历——Java版
  47. 【leetcode刷题】21.三数之和——Java版
  48. 【leetcode刷题】20.最长回文子串——Java版
  49. 【leetcode刷题】19.回文链表——Java版
  50. 【leetcode刷题】18.反转链表——Java版
  51. 【leetcode刷题】17.相交链表——Java&python版
  52. 【leetcode刷题】16.环形链表——Java版
  53. 【leetcode刷题】15.汉明距离——Java版
  54. 【leetcode刷题】14.找到所有数组中消失的数字——Java版
  55. 【leetcode刷题】13.比特位计数——Java版
  56. oracle控制用户权限命令
  57. 三年Java开发,继阿里,鲁班二期Java架构师
  58. Oracle必须要启动的服务
  59. 万字长文!深入剖析HashMap,Java基础笔试题大全带答案
  60. 一问Kafka就心慌?我却凭着这份,图灵学院vip课程百度云