java虚拟机自动内存管理机制

java虚拟机的运行是内存区域

    java虚拟机在运行时会将它管理的内存区域分成不同职能的内存区域,各区域各司其职。类比中国的皇朝制度,三省六部,来管理整个国家。那来看一下虚拟机的职责。

    虚拟机的主要任务是用来运行java程序,即字节码文件,字节码文件有命令坐标(行号),类的信息。而类主要由属性和方法构成。

    虚拟机的内存区域就是这些人施展才华的天地,来看看虚拟机怎么人尽其才。

1.虚拟机的内存区域图和字节码文件的对应关系

白嫖使我快乐

 看看对应的关系以及职能

oop对应表 虚拟机中的内存区域 理解 职能
程序计数器 即下一步需要做什么 行号指示器,字节码解释器通过改变这块内存的值来确定要执行的字节码命令。分支,循环跳转,异常处理和线程恢复需要依靠它。native值是undefined且不会发生内存溢出错误。(线程私有)
计算机的系统函数(一种) 本地方法栈 和线栈类似,调用的不是java方法 可以调用其他语言的方法以及java的native方法
类中的方法 线栈 方法的链式调用,栈帧的入栈出栈顺序  生命周期和线程相同。
类的信息 方法区 巧妇的米,载舟的水 用于存储被虚拟机加载的类信息、常量、静态变量、即时编译后的代码等数据。会有内存泄露等问题,
对象 类的代言人聚集地 存放类的实例以及数组,虚拟机里最大的内存区域,垃圾处理器的主阵地。几乎所有对象都在这分配内存。实例对象=对象头+属性
各种字面常量和符号引用 常量池 于取于放 用于存储各种字面常量,String.intern()方法,也可以存储对象的直接引用
场地 直接内存 堆外内存 有一些机制会需要堆外内存,例如nio会建立通道和缓冲区,利用堆外内存可以显著提高效率

方法和线栈的对应关系

oop对应表 线栈 理解 职能
方法 栈帧 一帧一方法 方法的实体,方法运行时的基本数据结构
返回值 方法出口    
方法内加减 操作数栈    
方法内局部变量 局部变量表   存了各时期的基本数据类型(8个),对象引用reference和returnAdress
  动态链接    
       

2.java虚拟机对象的创建过程

 

 

3.OutOfMemoryError错误

 

posted @ 2021-02-18 22:54  西岚之水  阅读(66)  评论(0编辑  收藏  举报