Java内存结构模型总结

最近感冒了,脑袋很疼。昨天很早就睡了。

由于个人编程经验少,今天想学习Java内存模型,但是看了好几篇文章,讲的都很深入。都是对着书本讲的,我目前只是想学习Java内存中的结构。所以不是非常深入的文章。
很多大牛在文章中都推荐阅读 java并发编程 和 深入java虚拟机等,这些书会看,但目前阶段水平不到,看不懂。
好了,开撸——

java执行过程

Java源代码文件会被java编译器编译为字节码文件(.class),然后JVM中类加载器将所有类的字节码文件都加载到虚拟机中,之后,JVM执行引擎执行。
JVM使用一段空间存储程序执行期用到的数据和相关信息,
运行时数据区(Runtime Date Area),JVM内存
Java内存实际并不存在,Java虚拟机实际上是一段程序,通过调用系统底层硬件实现功能。

java的内存管理实际管理的是这段空间(分配和回收空间内存)

运行时数据区

包括以下部分:
程序计数器 Program Counter Register
java栈 VM Stack
本地方法栈 Native Method Stack
方法区 Method Area
堆 Heap

这里写图片描述

好像java有好几个版本,openjdk,Oracle jdk。。。。。
hotsopt虚拟机

程序计数器

Program Counter Register,pc寄存器。
用来指示java执行那条语句

JVM虚拟机中,多线程是通过线程轮流切换来获取cpu执行时间,某一具体时刻,一个cpu的内核只会执行一条线程中的一条指令。为了使每个前程在线程切换后能够恢复切换之前的程序执行位置,每一个县城都有独立的程序计数器,切不相互干扰。

Java规定:线程执行的是非native方法,则程序计数器中保存当前需要执行的指令地址;
若是native方法,程序技术其中的值是undefined

程序执行器中存储数据的占用空间不会随程序执行发生变化,程序计数器不会发生内存溢出现象

Java栈

也叫虚拟机栈 java vitual machine stack. 栈

java栈是java方法执行的内存模型

java栈存放的是栈帧s(很多栈帧),每一个栈帧对应一个被调用的方法。
栈帧包括局部变量表(local variables)、操作数栈(operand stack)、指向当前方法所属的类的运行时常量池的引用(reference to runtime constant pool)、方法返回地址(Return Adree)和附加信息。
1执行一个方法时候,同时创建一个对应的栈帧,并建立栈帧压栈。
2当方法执行完毕后,便会将栈帧出栈。
线程当前执行的方法所对应的栈帧必定位于java顶部。

所以使用递归方法的时候容易导致栈内存溢出,程序员不用管理栈区的空间,由系统自动完成实施的,

java栈模型:这里写图片描述

局部变量

用来存储方法中的局部变量
基本数据类型的变量:直接存储值;对于引用类型变量,指向对象的引用。
局部变量表大小在编译器就可以确定大小了,程序执行期间局部变量表的大小不会改变

操作数栈

所有程序中的计算过程都是借助操作数栈来完成的。

指向常量池的引用

方法执行过程中有可能用到类中的常量,所以,必须要有一个执行运行时产量

方法返回地址

一个方法执行完毕,需要返回之前调用他的地方,因此必须在堆栈中保存一个方法返回地址,void方法应该也有吧?

每一个线程都有一个自己的java栈,互不影响

本地方法栈native method

本地方法是未执行本地方法服务的
很多版本中本地方法栈和java栈设计成一种

用来存储对象本身以及数组,数组引用在java栈中
在java中程序员基本不需要关心空间释放,java垃圾回收机制会处理,这一处也是java垃圾手机器管理的主要区域。
堆,被所有线程共享,JVM中只有一个堆。

方法区

存储了每个类的信息(包括名称,方法信息,字段信息),静态变量,产量,编译器编译后的代码等

常量池:用来存储便宜期间生成的字面量和符号引用。

运行时常量池:他是每一个类或接口的常量池运行时表示形式
在类、接口被加载到jvm中,对应的运行时常量池就被创建出来了。
运行期也可以将新的常量放入运行时产量池,如,String的intern()

这里写图片描述

动态链接???

这里写图片描述

学习自:
(1)https://www.cnblogs.com/dolphin0520/p/3613043.html

(2)http://www.jikexueyuan.com/zhiye/wechatapp

有些很早都知道,但是都不具体,今天做一次总结,方便以后查看修改。

感冒了,吃了药后好困啊,先睡了,还说今天将昨天的任务补完,哎,每天加油!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值