自动内存管理机制

本文是阅读深入理解java虚拟机做的记录
Java 内存区域与内存溢出异常
1.java虽然不用进行new 出对象后的delete/free的操作了,但是有些部分还是需要进行手动操作的, 如文件的close,连接的close等。
基于jvm的内存回收虽然已经做了大部分工作,但是出现了内存泄露问题,也是比较难以定位的。
2.运行时区域分为:1)方法区 2)堆 3)虚拟机栈 4)本地方法栈 5)程序计数器
方法区和堆是所有的线程共享的数据区域。
虚拟机栈、本地方法栈和程序计数器属于线程隔离区域自动内存管理机制
文章图片

程序计数器:
较小的内存空间,可看做当前线程的执行的字节码的行号指示器。每条线程都需要一个独立的程序计数器,各个线程的计数器是不会相互影响的。
java 虚拟机栈:
java虚拟机栈也是线程私有的,生命周期也是和线程的生命周期相同。每个方法被执行的时候都会同事创建一个栈帧去存储 局部变量、操作栈、动态链接、方法出口等信息。每一个方法的调用到完成--》对应 栈帧在虚拟机栈的 从入到出的过程。


本地方法栈:和虚拟机栈相似,但是主要执行Native方法的。
【自动内存管理机制】java堆:线程共享,唯一目的---》存放对象实例 + 数组。GC的主要作用区域。
方法区:线程共享,类信息、常量、静态变量
运行时常量池:方法区的一部分。(待补充)
OOM:除了程序计数器,其他的运行时区域都会有可能发生这个异常。
java堆溢出:
-Xms 堆的最小值-Xmx最大值 如果两个值相等,则会限制住对内存的自动扩展。














    推荐阅读