zoukankan      html  css  js  c++  java
  • 对象的内存解析

    一、栈(Stack ),是指虚拟机栈。虚拟机栈用于存储局部变量等。局部变量表存放了编译期可知长度的各种基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用 (reference类型,它不等同于对象本身,是对象在堆内存的首地址)。方法执行完,自动释放。

    • 栈:先进后出
    • 方法中定义的变量都是局部变量,存在于栈空间中

     二、堆(Heap),此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。这一点在 Java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配。

    • 将new出来的结构(比如:数组、对象)加载在对空间中。
    • 补充:对象的属性(非static的)加载在堆空间中

    三、方法区(Method Area),用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

    注意点:编译完源程序以后,生成一个或多个字节码文件。
    我们使用JVM中的类的加载器和解释器对生成的字节码文件进行解释运行。意味着,需要将字节码文件对应的类加载到内存中,涉及到内存解析。

     四、典型代码:

      Person p1 = new Person();
      Person p2 = new Person();
      Person p3 = p1;//没有新创建一个对象,共用一个堆空间中的对象实体。
      说明:
      如果创建了一个类的多个对象,则每个对象都独立的拥有一套类的属性。(非static的)
      意味着:如果我们修改一个对象的属性a,则不影响另外一个对象属性a的值。

     

  • 相关阅读:
    如何导出API文档,没有你做不到,只有你想不到!
    Oracle 数据库数据排名函数:rank() 和dense_rank() 。
    第二次绩效评估
    检查博客
    “E记”Alpha版使用说明
    绩效评估
    第一个冲刺周期意见评论
    第一个冲刺周期意见汇总
    第一次冲刺会议评审总结
    软件工程概论第一个冲刺周期
  • 原文地址:https://www.cnblogs.com/zhufeng123/p/12263011.html
Copyright © 2011-2022 走看看