JAVA 虚拟机 运行时区域和内存模型
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JAVA 虚拟机 运行时区域和内存模型,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1878字,纯文字阅读大概需要3分钟。
内容图文
![JAVA 虚拟机 运行时区域和内存模型](/upload/InfoBanner/zyjiaocheng/978/90c7e5955edf471eae9940b41d81b3b1.jpg)
本章文章目录
- 什么是运行时区域
- 什么是内存模型
什么是运行时区域
java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域
线程私有:指依赖用户线程的启动和结束而建立和销毁(线程拥有自己的内存)
线程共享:指随着虚拟机进程的启动而存在
如图所示:
程序计数器(线程私有)
当前线程所执行的字节码的行号指示器
存在的原因:是由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定时刻,一个处理器(单核)都只会执行一条线程中的指令,因此,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程之间的计数器互不影响,独立存储
说明:如果正在执行的是底层方法,这个计数器值则为空
虚拟机栈(线程私有)
每个方法在执行的同时都会创建一个栈帧
栈帧:存储局部变量表,操作数栈,动态链接,方法出口等信息
局部变量表:存放了编译期可知的各种基本数据类型,对象引用和returnAddress类型(指向了一条字节码指令的地址)
64bit long和double 类型的数据占用2个局部变量空间(slot),其余数据类型只占用一个
异常定义
1 如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常
2 如果虚拟机栈可以动态扩展,如果扩展时无法申请到足够的内存,就会抛出OutOfMemoryError异常
堆(线程共享)
目的:存放对象实例,几乎所有的对象实例都在这里分配内存
异常定义
1 如果在堆中没有内存完成实例分配,并且堆也无法再扩展时,将会抛出OutOfMemoryError异常
方法区(线程共享)
目的:存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据
什么是内存模型
主要目标:定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节
注意:此处的变量 包括:实例字段,静态字段和构成数组对象的元素,不包括局部变量与方法参数
内存模型内容
规定了所有的变量都存储在主内存中,每条线程还有自己的工作内存,线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作(读取,赋值等)都必须在工作内存中进行,而不能直接读写主内存中的变量,不同的线程之间也无法直接访问对象工作内存中的变量,线程间变量值的传递均需要通过主内存来完成
线程,主内存,工作内存的关系图
内容总结
以上是互联网集市为您收集整理的JAVA 虚拟机 运行时区域和内存模型全部内容,希望文章能够帮你解决JAVA 虚拟机 运行时区域和内存模型所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。