java内存区域与对象的访问
发布日期:2021-06-29 03:44:57
浏览次数:2
分类:技术文章
本文共 1259 字,大约阅读时间需要 4 分钟。
我们都知道,在学习java的时候,有一个东西是特别重要的,那就是java内存的划分,以及对象的访问是如何进行的,下面是我自己在一些书籍上整理的,学完了之后感觉特别有用!!!
一,java的内存区域
在运行java程序的时候,java的虚拟机在执行java程序的过程中会把它管理的内存进行不同的划分,每一个区域都是有着自己各自的功能
上面的图片就是java HotSpot虚拟机将内存进行的划分 1,方法区:用于存储的是已经被虚拟机加载的类信息,常量,静态的变量,即是编译器编译后的代码等数据 2,堆内存:java的堆内存是所有线程共享的一块数据区域,它是在虚拟机驱动的时候进行创建,主要的作用是存放对象的实例,几乎所有的对象实例都是在堆内存进行内存分配的,它也是java虚拟机管理的最大的一块内存区域 这两个内存区域都是所有的内存共享的数据区3,虚拟机栈:java中的虚拟机栈是线程私有的,它的生命周期是与线程相同的,虚拟机栈描述的是java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧,用于存储局部变量,操作数栈,动态链接,方法出口等信息,每一个方法在从调用直至执行完成的这个过程,就对应着一个栈帧在虚拟机栈中入栈到出栈
4,程序计数器:程序计数器是一块比较小的区域,它可以看作是当前线程所执行的字节码的行号的指示器 5,本地方法区:这个内存是与虚拟机所发挥的作用是非常的相似的,他们之间的区别不过是虚拟机栈为虚拟机执行java方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到Native方法服务, 这三个内存区域是线程隔离的数据区二,对象的访问定位
在我们创建对象的时候,比如我们创建一个自定义的Person对象
上面的变量名p表示的是对象的引用,表示的是Person类型的变量,是存储在本地方法栈内存的,它存储的是Person对象在堆内存中的对象的引用,但是具体是怎么引用,java虚拟机主要有两种方式,使用句柄的方式以及使用直接指针的方式 1,使用句柄的方式 如果使用句柄的方式,那么java虚拟机会在堆内存划分出一块内存来作为句柄池栈,本地方法栈内存中的reference中存储的就是对象中的句柄地址,而句柄中包含了对象实例数据与类型数据各自的具体地址信息 2,使用直接指针访问 使用这种方式,java堆内存中的布局就必须考虑如何访问类型数据的相关信息,而栈内存中的对象的引用reference中存储的直接就是对象的地址这两者的访问的方式是各有自己的优缺点
使用句柄来访问的最大的好处就是本地方法栈中对象的引用reference中存储的是稳定的句柄地址,在对象被移动(垃圾回收)时只会改变句柄中的实例数据指针,而这个reference是不需要改动的 使用直接指针访问的最大的好处就是速度很快,它是节省了一次指针定位的时间的开销,这个节省是很有必要的,因为对象的访问在java中是很频繁的总结:在理解java内存区域和对象的访问是能够使我们更加的理解java的运行原理,很是重要的呀
转载地址:https://blog.csdn.net/zcswl7961/article/details/51108399 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年04月04日 00时23分47秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
云服务平台的架构及优势(下)
2019-04-29
5G黎明前 AI或成手机市场焦点趋势
2019-04-29
Spring Cloud Eureka高可用(二)
2019-04-29
二手车服务商完成A轮融资,投资方为标志雪铁龙集团 ...
2019-04-29
大手笔的Uber:无人驾驶项目每月烧钱2000万美元
2019-04-29
使用Grab的实验平台进行混沌实验编排
2019-04-29
企业采购阿里云服务器 这些技巧你知道吗
2019-04-29
万佳安联手腾讯云,传统安企开启 AI 新征程
2019-04-29
汽配供应链平台三头六臂宣布完成1.7亿元A轮融资,钟鼎资本领投、君联资本联合投资 ...
2019-04-29
Java 中static与final使用
2019-04-29
4月15日云栖精选夜读 | 贾扬清:我对人工智能方向的一点浅见 ...
2019-04-29
网络爬虫入门:你的第一个爬虫项目(requests库) ...
2019-04-29
Linux基础命令---lpstat查看打印机状态
2019-04-29
【译】混沌工程与区块链
2019-04-29
Python零基础学习笔记(二十四)—— 函数
2019-04-29
马斯克为节省遣散费,决定暂停关闭门店和裁员计划,改为降低薪资“逼”员工主动辞职 ...
2019-04-29
企业云存储:为什么中大型企业都偏爱自建企业云? ...
2019-04-29
PostgreSQL 优化器代码概览
2019-04-29
人工智能“面诊”识别罕见遗传疾病,准确率可达90% ...
2019-04-29
阿里云安全肖力:从RSA2019看安全技术发展的十个机遇 ...
2019-04-29