美文网首页
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