美文网首页
java内存结构学习笔记

java内存结构学习笔记

作者: 十年_e456 | 来源:发表于2019-09-28 20:06 被阅读0次

    java虚拟机在运行java时会管理着一块内存区域:运行时数据区

    在运行时数据区里根据用途进行划分:

    1.java虚拟机栈(栈区)

    2.本地方法区

    3.java堆(堆区)

    4.方法区

    5.程序计数器

    内存模型分区:

    一、java堆(堆区)

    定义:即堆内存(heap);是垃圾收集管理器的主要区域,因此也叫:GC堆

    作用:存放java对象实例

    特点:java内存中最大;线程共享

    抛出的异常:oom,即堆中没有足够的内存完成对象实例的分配&堆无法再扩展

    备注:a.从内存回收的角度 分为:新生代&老年代

               b.从内存分配角度:相当于多个线程私有的分配缓冲区

    二、java虚拟机

    定义:即栈内存(stack);是stack、java方法执行的内存模型

    作用:储存java方法执行时的局部变量;

    :1.以帧栈的形式;

            2.含数据类型、对象的引用

            3.方法执行结束后则释放

    特点:线程私有;声明周期与线程相同

    抛出的异常:oom 虚拟机栈扩展时无法申请到内存空间;StackOverflowError  线程请求深度》虚拟机所允许深度

    :1.每个java方法执行时都会创建一个栈帧;

            2.一个java方法从被调用到执行完成=一个栈帧在虚拟机栈中的入栈到出栈

            3.局部变量表所需内存空间在方法编译时就完成分配,在方法运行时不会改变大小

    三、本地方法栈

    简介:十分类似java虚拟机栈,与java虚拟机栈区别在于:服务对象,即java虚拟机栈为执行java方法服务;本地方法栈为执行Native方法服务

    四、方法区

    定义:堆的一个逻辑部分;为了与java堆分区,又称“非堆”区域(Non-Heap)

    作用:储存已被虚拟机加载的类信息、常量、静态变量等数据

    特点:线程共享

    抛出的异常:oom 当方法区无法满足内存分配需求

    :该区域的内存回收主要是针对运行时常量池和对类的卸载,又称永久代:回收条件苛刻,很少出现垃圾收集

    其内部包含一个运行时常量池,具体介绍如下:

    定义:方法区的一部分

    作用:存放类文件在编译时生成的各种字面量&符号引用

    特点:动态性;即 运行时也可添加新的常量,如:String类的intern()

    抛出的异常:oom,即当常量池无法申请到内存时

    五、程序计数器

    定义:当前线程所执行的字节码的行号指示器

    作用:实现异常处理、线程恢复等基础功能

    原理:通过改变计数器的值来选取下一条执行的字节码指令

    特点:线程私有;内存空间小

    抛出的异常:唯一一个在jvm中无任何oom的内存区域

    :私有线程的内存区域:为了使得线程切换后恢复到正确的执行位置,每条线程都配有一个独立的程序计数器,各线程互不影响,独立储存的内存区域

    相关文章

      网友评论

          本文标题:java内存结构学习笔记

          本文链接:https://www.haomeiwen.com/subject/grctpctx.html