zoukankan      html  css  js  c++  java
  • 内存分析

    1. 栈与堆:生存空间
        1.1  在java中,程序员会在乎内存中的两种区域:对象的生存空间堆(heap)和方法调用及变量的生存空间(stack)。
        1.2  我们知道所有的对象都存活于可垃圾回收的堆上,但是我么还没看过变量的生存空间。而变量存在于哪一个空间要看它是哪一种变量而定。
               这里说的“哪一种”不是它的类型,而是实例变量或局部变量。后者这种区域变量又被称为栈变量,该名称已经说明了它所存在的区域。
        1.3  栈与堆-----图
     内存分析 - 呆呆的坐、 - Jamkong的博客

      

    2. 实例变量与局部变量
        2.1 实例变量:
                              实例变量是被声明在类而不是方法里面。它们代表每个独立对象的“字段”(每个实例都能有不同的值)。实例变量存在于所属的对象中。
                               public class Duck( ){
                                           int size ;         //每个Duck对象都会有独立的size;
                               }
       2.2 局部变量:
                              局部变量和方法的参数都是被声明在方法中。它们是暂时的,且生命周期只限于方法被放在栈上的这段期间(也就是方法调用至执行完毕为止)。
                                public void foo( int x ){
                                           int  i = x + 3 ;    //参数 x 和变量 i ,b 都是局部变量。
                                           boolean  b = true ;
                                }      
    3. 如果局部变量生存在栈上,那么实例变量呢?
        当你新建一个Student()对象时,java必须在堆上帮Student对象找一个位置,这会需要多少空间呢?足以存放该对象所有实例变量的空间。没错,实例变量存在于对象所属的堆空间上。如果对象的实例变量为对象,Student对象只会留下实例引用对象的地址。也就是说,该实例变量将保存一个地址,而不是一个对象。
    4. 内存分析图:
        首先来段代码:
       
    class Student(){
       String name;//学生姓名
       int age; //学生年龄
       static int id;//学生id
       public void study(){
           ....
       }
       public void sayHello(){
           ....
       }
    }
    public class Demo{
        public static void main(String[] args){
            Student st1=new Student(); 
            st1.name="陈大爷";
            st1.age=20;
            Student.id=6;
            st1.study();
            st1.sayHello();
        }
    }
    以上面代码为例的内存分析图:
    内存分析 - 呆呆的坐、 - Jamkong的博客
    解释:(结合上面的知识点)
             s1 是在main方法里面的局部变量。所以它是放在Main方法的栈里头。
             new Student();创建了一个对象。因为是对象,所以它被放到了堆中。---->也就是图中的s1对象。
  • 相关阅读:
    移动端适配方案
    js基础知识复习
    js单线程的本质-------Event Loop
    第13课 字典
    第12课 习题讲解
    第11课 循环嵌套和算法
    第10课 文件的读写
    第9课 循环语句与注释
    第8课 对象的方法
    第7课 初识函数
  • 原文地址:https://www.cnblogs.com/JamKong/p/4447030.html
Copyright © 2011-2022 走看看