java内存分配

根据所属数据类型分为:基本数据类型和引用类型,如图(2)。

这里写图片描述

图(2)

基本类型和引用类型的内存分配方式是不一样的。基本类型只占一块内存,引用类型实质上是指针,占两块内存。

如 int i=0;在内存里面只分配了一块内存,里面存放的就是值0,使用i这个名字来访问这块内存。

又如 String s;//此时为引用变量s分配了一块内存,但是目前这个内存什么也没有存,因为此时s不指向任何一个对象,所以是null

s=new String(“hello”);//使用new创建了一个对象后,又分配一块内存(堆),这个对象的内容“hello”就存放在新分配的内存中。而之前给s分配的内存也有了内容,根据这个内容就可以找到第二块内存,使用其中的内容(“hello”).

这里顺便说一下程序执行过程中内存的分配,如图(3):
这里写图片描述

图(3)

程序执行时都必须是在内存中。所以程序首先加载到内存,这时候程序代码就放在code segment这样的内存区域,然后找到main开始执行并如图所示为各种其他的变量、常量、对象等分配相应的内存。其中new出来的变量是放在堆中,局 部变量是放在栈中的。例如上面代码示例中,Person person=new Person();person是一个局部变量,为它分配了栈内存,而person对象的实际内容如name和age的值是保存在堆中的,根据栈中存储的 内容找到堆中person的具体内容,其内存分配情况参考下图(4)。此外,同一个类的每个对象有不同的成员变量存储空间,同一个类的每个对象共享方法, 方法在执行的时候才会为其分配空间,不执行时候,就是一段代码。JAVA中进行函数调用传参时,基本类型传递的是该数值本身,引用类型传递的是对对象的引 用,而不是对象本身。

这里写图片描述

posted @ 2017-07-17 16:38  gn00  阅读(152)  评论(0编辑  收藏  举报