对Java内存的一点理解


在java中变量分为全局变量和局部变量,而全局变量又分为成员变量和类变量(静态变量)。成员变量放在堆里面,类变量放在内存的静态区。而对于java中的局部变量却是放在栈(堆栈)中的。

而我们编写的java代码是存放在内存中的代码段的。数据段又是什么呢?数据段里面存放的是常量和静态的数据,静态区也是包含在数据段里面的!

常常想到底堆里面是存放什么,在java中,堆里面存放的是对象,这时候就要想了,为什么成员变量也存放在堆里面?这里的“成员”二字很明显,成员变量它是属于我们某个类的普通变量,而类又是对象的模版,所以当我们在new的时候,这时候对象就按照我们规定好了的模版把这个对象给生成出来了,那么现在这个对象就拥有了定义该类时候的成员变量,由于对象我们知道是存放在堆里面的,所以这里根据对象拥有它自己的成员变量引发出,当前对象的成员变量是存放在我们的堆中的。

大家都知道,当我们new一个对象的时候,对象的实体是存放在堆里面的,但是此时指向该new出来的对象的引用是存放到那里的呢?正确答案是存放在栈(堆栈)里面。Dog dog = new Dog();这里new了一个Dog对象,把指向堆里面new出来的Dog对象的引用放在了dog里面,大家仔细看了,其实这个dog在java中叫做变量,只不过是一个类型为Dog的变量。

纯属个人理解,如有朋友发现有误,请帮我指出,谢谢!

相关内容