Java面向对象内存分析详解(实例、图)通俗易懂

Java面向对象内存分析详解(实例)通俗易懂

在开始之前先了解一下【JAVA虚拟机运行时数据区域

1. 一个对象的内存图解

在这里插入图片描述
①、在运行main方法之前,方法区最先有数据,按照上述代码执行顺序,把类相关信息加载到方法区中
②、main方法开始进栈(也叫做压栈),执行 Phone one=new Phone(),把Phone one存到栈中(局部变量/引用),把new Phone()存到堆中(new 的对象/数组),那么new出来的对象内容去哪里找呢?
③、在我们创建对象的时候,我们从方法区找到成员变量、成员方法存放到堆中,然后我们在中把三个成员变量赋上初始值null、0.0、null,在中我们把成员方法赋个地址值为【0x333】(成员方法其实保存的是一个地址值),这时堆当中的成员方法是一个地址值指向了方法区。我们把new Phone()也赋个地址值为【0x666】。
④、那么我们在栈中就可以把【one】赋个地址值为【0x666】,我们在继续看代码,执行三行打印输出语句,根据地址【0x666】就可以找到这个对象,之前在堆中赋上了初始值null、0.0、null,所以打印出来的就是null、0.0、null,接下来在执行【one.brand=“苹果”】、【one.price=8388.0】、【one.color=“黑色”】,根据地址值在堆中重新赋值为【苹果】、【8388.0】、【黑色】改变了成员变量的值。
⑤、执行【one.call()】方法,首先通过one的地址值【0x666】在堆中找到成员方法,在通过成员方法的地址值【0x333】在方法区找到call()方法,call()方法要是运行,【call(String who)】方法就要进栈(也称压栈:先进后出),然后打印一句话,运行完后,call方法就会出栈,从内存中释放。main方法还没运行完,接下来在运行sendMessage()方法,同理运行完出栈,最后main方法运行完也要出栈,整个程序运行结束。

下面几种情况,结合代码和图可以自己试着分析。道理都大同小异。

2. 两个对象使用同一个方法的内存图解

在这里插入图片描述

3. 两个引用指向同一个对象的内存图解

在这里插入图片描述

4. 使用对象类型作为方法的参数内存图解

在这里插入图片描述

5. 使用对象类型作为方法的返回值类型内存图解

在这里插入图片描述

已标记关键词 清除标记
课程简介: 历经半个多月的时间,Debug亲自撸的 “企业员工角色权限管理平台” 终于完成了。正如字面意思,本课程讲解的是一个真正意义上的、企业级的项目实战,主要介绍了企业级应用系统中后端应用权限的管理,其中主要涵盖了六大核心业务模块、十几张数据库表。 其中的核心业务模块主要包括用户模块、部门模块、岗位模块、角色模块、菜单模块和系统日志模块;与此同时,Debug还亲自撸了额外的附属模块,包括字典管理模块、商品分类模块以及考勤管理模块等等,主要是为了更好地巩固相应的技术栈以及企业应用系统业务模块的开发流程! 核心技术栈列表: 值得介绍的是,本课程在技术栈层面涵盖了前端和后端的大部分常用技术,包括Spring Boot、Spring MVC、Mybatis、Mybatis-Plus、Shiro(身份认证与资源授权跟会话等等)、Spring AOP、防止XSS攻击、防止SQL注入攻击、过滤器Filter、验证码Kaptcha、热部署插件Devtools、POI、Vue、LayUI、ElementUI、JQuery、HTML、Bootstrap、Freemarker、一键打包部署运行工具Wagon等等,如下所示: 课程内容与收益: 总的来说,本课程是一门具有很强实践性质的“项目实战”课程,即“企业应用员工角色权限管理平台”,主要介绍了当前企业级应用系统中员工、部门、岗位、角色、权限、菜单以及其他实体模块的管理;其中,还重点讲解了如何基于Shiro的资源授权实现员工-角色-操作权限、员工-角色-数据权限的管理;在课程的最后,还介绍了如何实现一键打包上传部署运行项目等等。如下所示为本权限管理平台的数据库设计: 以下为项目整体的运行效果截: 值得一提的是,在本课程中,Debug也向各位小伙伴介绍了如何在企业级应用系统业务模块的开发中,前端到后端再到数据库,最后再到服务器的上线部署运行等流程,如下所示:
©️2020 CSDN 皮肤主题: 技术工厂 设计师:CSDN官方博客 返回首页