JAVA虚拟机内存模型
一、对于Java程序员来说,在虚拟机的自动内存管理机制下,我们不需要为每一个new操作去写匹配的delete/free操作
但是当我们对于内存的管理了解有能够帮助我们理解Java虚拟机的垃圾回收机制、多线程操作、以及内存操作。
二、Java虚拟机在执行java程序的过程中 ,会把他管理的内存划分为若干数据区,从创建和销毁时间来看可以划分为两大类
1、随Java虚拟机的启动而存在
2、依赖用户线程的启动和结束而建立和创建
三、具体内存模型
四、内存模块具体讲解
(一)、程序计数器(线程私有)
1、程序计数器:是一块比较小的内存空间,可以看作是当前线程所执行字节码的行号指示器
字节码解释器在工作是,通过改变程序技术器的值来选择下一条需要执行的字节码指令:分支、循环、跳转、异常处理、线程恢复等工作都需要该字节码解释器
2、Java虚拟机的多线程执行是通过线程轮流切换,分配处理器执行时间的方式实现的,每个线程都需要独立的程序计数器,因此各个线程之间程序计数器互不影响
3、如果线程执行的是一个java方法,这个计数器记录正在执行的虚拟机字节码指令地址,如果是Native方法,计数器的值为空
(二)、Java虚拟机栈:(线程私有)
1、虚拟机栈:描述了java方法在运行的内存模型:每个方法在执行时就会创建栈帧(一种数据结构),用于方法的局部变量表,操作数栈、动态链接、
方法出口等信息,每个方法执行从执行到结束的过程对应着栈帧在虚拟机栈中入栈和出栈的过程。
2、人们经常说的堆栈,其中栈就是指虚拟机栈
3、局部变量表存放了编译器所知道的各种基本数据类型(int、long、double...)对象引用和returnAddress类型(指向一条字节码指令的地址)
4、局部变量表需要的内存在编译时期分配
(三)、本地方法栈:(由虚拟机调用)
1、本地方法栈:与虚拟机栈的作用相似,Native方法运行的内存模型.
2、本地方法栈中方法使用的语言和数据结构都没有强制规定。
(四)、方法区(线程共享)
1、方法区:各个线程共享的内存区域,用于保存已被Java虚拟机加载的类信息、常理、静态常量、即时编译后的代码
2、方法去的别名非堆(Non-Heap)
3、运行常理池是方法区的一部分
(五)堆(线程共享)
1、在虚拟机启动时创建,用于存放对象实例,Java虚拟机规范中描述:所以的对象实例已经数组都在堆上分配(JIT编译器的发展是该规则有一点变化)
2、JAVA垃圾收集器管理的主要区域,因此称为GC堆
JAVA虚拟机内存模型的更多相关文章
- Java虚拟机内存模型及垃圾回收监控调优
Java虚拟机内存模型及垃圾回收监控调优 如果你想理解Java垃圾回收如果工作,那么理解JVM的内存模型就显的非常重要.今天我们就来看看JVM内存的各不同部分及如果监控和实现垃圾回收调优. JVM内存 ...
- Java虚拟机--内存模型与线程
Java虚拟机--内存模型与线程 高速缓存:处理器要与内存交互,如读取.存储运算结果,而计算机的存储设备和处理器的运算速度差异巨大,所以加入一层读写速度和处理器接近的高速缓存来作为内存和处理器之间的缓 ...
- Java虚拟机 - 内存模型
本文主要介绍Java虚拟机的内存分布以及对象的创建过程. 一.Java虚拟机的内存分布 文章开始前读者需要了解Java虚拟机的运行时数据区是怎样划分的.如下图所示: 1.程序计数器(Program C ...
- 深入理解Java虚拟机内存模型
前言 本文中部分内容引用至<深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)>第12章,如果有兴趣可自行深入阅读,文末放有书籍PDF版本连接. 一.物理机中的并发 物理机遇到的并 ...
- 面试常问的Java虚拟机内存模型,看这篇就够了!
一.虚拟机 同样的java代码在不同平台生成的机器码肯定是不一样的,因为不同的操作系统底层的硬件指令集是不同的. 同一个java代码在windows上生成的机器码可能是0101.......,在lin ...
- java 虚拟机内存模型
[声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:[http://www.cnblogs.com/smyhvae/p/4748392.html] 文章来源:[http://www.cnblog ...
- Java虚拟机03(Java虚拟机内存模型)
根据 JVM 规范,JVM 内存共分为虚拟机栈.堆.方法区.程序计数器.本地方法栈五个部分. 其实最需要Java程序员关注的是堆,栈,还有方法区,因为啊: 如果代码又问题的话,可能回出现栈溢出 然后说 ...
- 作业1:java虚拟机内存模型图示
看了很多篇文章,整理成一幅图,但仍然有许多不解的地方,以后再接着完善,哪位大神看到不正确的地方,请指出,谢谢.
- 栈帧 2.6. Frames 虚拟机内存模型
https://docs.oracle.com/javase/specs/jvms/se11/html/jvms-2.html#jvms-2.6 小结: 1. https://docs.oracle. ...
随机推荐
- Linux例行工作crontab
第一步编辑要定时执行的脚本: myScript.sh myScript.sh的内容为:touch /root/`date +%F' '%T`.txt 为myScript.sh增加可执行权限:chmod ...
- 10个必备的移动UI设计资源站
http://www.uisdc.com/10-necessary-mobile-ui-design-resources# 交互设计中如何增加趣味性.提升愉悦http://www.uisdc.com/ ...
- VS2010/MFC对话框:颜色对话框
颜色对话框 在上一节中为大家讲解了字体对话框的使用方法,熟悉了字体对话框,本节继续讲另一种通用对话框--颜色对话框. 颜色对话框大家肯定也不陌生,我们可以打开它选择需要的颜色,简单说,它的作用就是用来 ...
- 【C++算法设计】八数码问题
八数码问题 [题意] 编好为1~8的8个正方形滑块摆成3行3列(一个格子为空),如图所示 每次可以移动空格相邻的滑块到空格,要计算出能移动出目标局面的最小步数,如无法达到则输出-1. [分析] 我们可 ...
- angular学习(一):动态模板总结
近期在项目中用到了angular,之前从未用到过此js lib库,因为项目也比較着急,学习的寥寥草草.到眼下为止也仅仅是学会皮毛而已,现将自己学习的知识总结例如以下: 备注1: 版本:1.2.2 备注 ...
- Glog
Glog的简单入门,glog虽然在配置参数方面比较麻烦,但是在小规模程序中,由于其简单灵活,也许会有优势. 0, glog 是google的开源日志系统,相比较log4系列的日志系统,它更加轻巧灵活 ...
- C++内置类型对象之间的转换
C++定义了一组内置类型对象之间的标准转换,在必要时它们被编译器隐式地应用到对象上. 隐式类型转换发生在下列这些典型情况下. 1. 在混合类型的算数表达式中 规则:在这种情况下最宽的数据类型成为目标转 ...
- HDOJ 3415 Max Sum of Max-K-sub-sequence(单调队列)
因为是circle sequence,可以在序列最后+序列前n项(或前k项);利用前缀和思想,预处理出前i个数的和为sum[i],则i~j的和就为sum[j]-sum[i-1],对于每个j,取最小的s ...
- JSP内置对象----response
response 对象 当客户访问一个服务器的页面时,会提交一个HTTP 请求,服务器收到请求时,返回HTTP 响应.request 对象获取客户请求提交的信息, 与request对象相对应的对 ...
- nodejs入门demo
demo的实例引用自:http://www.runoob.com/nodejs/nodejs-event.html, 官方文档:https://nodejs.org/dist/latest-v6.x/ ...