对象创建的内存分析

我们从两块最常用的内存空间对对象创建进行内存分析

  • 堆内存:存放的是对象的具体信息;在程序之中堆内存空间的开辟是通过new完成的
  • 栈内存:存放的是对象的地址信息,即通过地址找到堆内存进而找到对象内容,但是为了简化起见,简单理解将对象的名称保存在栈内存中

堆内存内每一块内存都有着一个专属的地址编号,而栈内存则存放这个地址编号

图解如下:

我们来分析一个创建对象的案例

public class test {
public static void main(String[] args) {
Students stu = new Students();
stu.name="工地佬";
stu.age=18;
}
}

内存图解:

第一步:Students stu = new Students();

new:在堆内存中开辟新的空间;

Students:定义了对象的信息;存放于所开辟的空间里

stu:对象的名称;存放于栈内存中,实则存放的是新空间的地址信息

第二步:stu.name="工地佬";

第三步:stu.age=18;

对象化的实例化有两种语法:

  • 使用声明并实例化:Student stu=new Students();
  • 分步完成:① 声明对象Student stu=null; ② 实例化对象 stu=new Students();

分步完成实例化的内存分析:

第一步:Student stu=null;

第二步:stu=new Students();

注意

  • 如果代码中只声明了对象,没有实例化,则无法调用。而此时会报错指向异常(NullPointerException),意为没有在辟堆内存开辟空间,即没有new,此异常只有在引用数据类型存在此问题。

最新文章

  1. jQuery的deferred对象详解
  2. phalcon几种分页方法
  3. rails里routes配置文件里的resources和resource的区别
  4. (转)android Fragments详解一:概述
  5. 机器人学 —— 机器人视觉(Bundle Adjustment)
  6. 从一个简单的Java单例示例谈谈并发
  7. javaweb 登录注册
  8. [LeetCode] 032. Longest Valid Parentheses (Hard) (C++)
  9. 1-6 hibernate映射集合属性
  10. Cocos2D创建多彩文本显示标签
  11. SSM-MyBatis-01:IDEA的安装,永久注册和简单的MyBatis用例
  12. js switch 字符串
  13. 9.selenium
  14. gradle文件中自定义字段值在java代码中使用
  15. Django基础(一)
  16. shell脚本--显示文本内容
  17. linux---文件颜色含义
  18. 《linux内核分析》chapter3读书笔记
  19. 在mysql中使用group by和order by取每个分组中日期最大一行数据
  20. ubuntu alsa

热门文章

  1. KFS Oracle RAC 数据解析同步配置方法
  2. 1 Java内存区域管理
  3. Typora Markdown 安装包
  4. C++ 左值引用与一级指针
  5. Chrome 浏览器缓存的问题
  6. Linux日志切割方法[Logrotate、python、shell实现方式]
  7. Solutions:应用程序性能监控/管理(APM)实践---python/flask
  8. 使用Gitlab的CI/CD功能自动化推送docker镜像到Nexus仓库出现的问题
  9. Module加载的详细说明-保证你有所收获
  10. WPF绘制圆形调色盘