Java storage mechanism (detailed explanation of stack, heap and method area)

Li Jinfu 2020-11-09 11:30:18
java storage mechanism detailed explanation

One 、JAVA Six storage addresses for

  1. register register
    Inside the processor , It's the fastest memory , But the number is extremely limited . The compiler allocates according to the requirements , It can't be controlled by code , For developers, it's No sense Of .
  2. Stack stack
    be located RAM in , The stack pointer moves down to allocate new memory , Move up to free memory . When you create a program , The compiler must know the exact size and lifetime of all the data stored in the stack . some JAVA The data is stored in the stack —— Especially object references , however JAVA Object does not store in it .
  3. Pile up heap
    be located RAM in , The advantage over the stack is that you don't need to know how much storage space is allocated from the heap and how long to live .JAVA Objects are stored here .
  4. Static storage static
    there “ static state ” Refer to “ In a fixed position ”. Static storage is the storage of data that is always present while the program is running . You can use keywords static To identify that a particular element of an object is static
  5. Constant storage constant
    Constant values are usually stored directly within the program code , It's safe to do this , Because they will never be changed . Sometimes , In embedded systems , The constant itself will be separated from the rest , So in this case , You can choose to put it in ROM in .
  6. Not RAM Storage
    If the data exists completely outside the program , So it can't be controlled by any program , It can exist when the program is not running .

Two 、 Stack 、 Pile up 、 The contents stored in the method area

  • Heap area :

    1. All that's stored is objects , Each object contains a corresponding class Information about .(class The purpose is to get operational instructions )
    2. jvm There's only one heap area (heap) Shared by all threads , Basic types and object references are not stored in the heap , Just store the object itself .
  • The stack area :

    1. Each thread contains a stack area , Only values and objects of the underlying data type and references to the underlying data are stored in the stack
    2. The data in each stack ( Underlying data types and object references ) It's all private , Other stacks cannot be accessed .
    3. The stack is divided into 3 Parts of : Basic type variable area 、 Execution context 、 Operation instruction area ( Store operation instructions ).
  • Method area :

    1. It's also called static area , It's like a pile , Shared by all threads . The method area contains all the class and static Variable .
    2. The method area contains elements that are always unique throughout the program , Such as class,static Variable .


3、 ... and 、JAVA Storage of basic data types

There are basic types in common 8 Kind of , namely int, short, long, byte, float, double, boolean, char. This type is defined by int a = 3 To define in the form of , be called Automatic variable . It is worth noting that Automatic variables store literal values , Not an instance of a class .

for example int a = 3, there a It's a point int Type references , Point to 3 This is the literal value , There is no class in the whole process . The data size of the literal value is known , The survival time is known ( Defined in a block , After the block exits , The field value disappears ), In stack .

Stack has a very important particularity , Data stored in the stack can be shared
Suppose we define it at the same time int a = 3; int b = 3;
The compiler processes int a = 3; First, it creates a variable in the stack as a References to , Then find out if there is a literal value of 3 The address of , Did not find , Just open up a store 3 The address of this face value , And then a Point to 3 The address of . And then deal with int b = 3; After creating b After referencing variables for , Because there are already 3 This is the literal value , It will be b Direct to 3 The address of . such , And that's what happened a And b At the same time, they all point to 3 The situation of .
Special note , The reference to this literal is different from the reference to a class object . Suppose two class object references point to one object at the same time , If an object reference variable modifies the internal state of the object , Then another object reference variable immediately reflects the change . contrary , Modify the value of a literal by reference to it , Does not cause the value of another reference to this literal to change .
As in the above example , We're done defining a And b After the value of , Re order a=4; that ,b It's not equal to 4, Or is it equal to 3. Inside the compiler , encounter a=4; when , It will re search the stack for 4 The face value of , without , Reopen address storage 4 Value ; If there are already , Will directly a Point to this address . therefore a Changes in values do not affect b Value .

本文为[Li Jinfu]所创,转载请带上原文链接,感谢

  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课程百度云