自动内存管理机制

本文是阅读深入理解java虚拟机做的记录

Java 内存区域与内存溢出异常

1.java虽然不用进行new 出对象后的delete/free的操作了,但是有些部分还是需要进行手动操作的, 如文件的close,连接的close等。

   基于jvm的内存回收虽然已经做了大部分工作,但是出现了内存泄露问题,也是比较难以定位的。

2.运行时区域分为:1)方法区 2)堆 3)虚拟机栈 4)本地方法栈 5)程序计数器

  方法区和堆是所有的线程共享的数据区域。

虚拟机栈、本地方法栈和程序计数器属于线程隔离区域自动内存管理机制_第1张图片

程序计数器:

较小的内存空间,可看做当前线程的执行的字节码的行号指示器。每条线程都需要一个独立的程序计数器,各个线程的计数器是不会相互影响的。

java 虚拟机栈:

             java虚拟机栈也是线程私有的,生命周期也是和线程的生命周期相同。每个方法被执行的时候都会同事创建一个栈帧去存储 局部变量、操作栈、动态链接、方法出口等信息。每一个方法的调用到完成--》对应 栈帧在虚拟机栈的 从入到出的过程。


本地方法栈:和虚拟机栈相似,但是主要执行Native方法的。

java堆:线程共享,唯一目的---》存放对象实例 + 数组。GC的主要作用区域。

方法区:线程共享,类信息、常量、静态变量

运行时常量池:方法区的一部分。(待补充)

OOM:除了程序计数器,其他的运行时区域都会有可能发生这个异常。

java堆溢出:

-Xms 堆的最小值   -Xmx最大值 如果两个值相等,则会限制住对内存的自动扩展。








你可能感兴趣的:(jvm)