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的值。

     

  • 相关阅读:
    .NETframework的EF框架学习报错之datetime 数据类型
    String...的用法
    存储过程从入门到熟练(c#篇)
    售前如何做好产品演示
    华为演讲培训售前人员重点学习
    report services 报表开发和部署,集成到解决方案中 全解析
    在Asp.net用C#建立动态Excel(外文翻译)
    NET(C#)连接各类数据库集锦
    在SourceForge.net上如何使用TortoiseCVS
    用C#实现在线升级
  • 原文地址:https://www.cnblogs.com/zhufeng123/p/12263011.html
Copyright © 2011-2022 走看看