java的内存结构

来源:互联网 发布:医疗网络咨询 编辑:程序博客网 时间:2024/06/06 16:38

1java内存区域的划分寄存器 方法区 堆内存 栈内存 本地方法区 

1)栈内存的特点:存储都是局部变量 

(函数参数,函数内定义的变量,语句中定义的变量)变量一旦使用完(作用域结束),就会在栈内存中自动释放。

2)堆内存特点:存储的是实体,对象

存储由new创建的对象和数组,由java虚拟机的垃圾回收装置管理。

1.堆内存中的实体都有首内存地址值.

2.堆内存中的变量都有默认初始化值.

3.对于没有任何引用变量指向的实体,会视为垃圾,会被垃圾回收机制所回收。

(数组和对象,只要是new的,都在堆内存中)


栈内存中存储的是指向arr 指向堆内存的地址 ,而new char [5]则在堆内存中开辟出 内存空间 存储实例对象,有默认值


String s1="ddsa"

String s2="ddsa" 先在栈中创建一个对String类的对象引用变量str, s1==s2 返回true

String s1=new String("ddsa") 新建对象 地址不同


Person p = new Person("Xcc",19);
这句话都做了什么?
1,因为new用到了Person.class,所以会先找到Person.class文件并加载到内存中
2,执行该类中的static代码块,如果有的话,给Person.class类进行初始化
3,在堆内存中开辟空间,分配内存地址
4。在堆内存中建立对象的特有属性,并进行默认初始化(name=null age=0 country=null)
5。对属性进行显示初始化(也就是属性初始化,如果没有赋值就是默认初始化的值 name=null age=0 country="cn")
6。对对象进行构造代码块初始化
7。对对象进行对应的构造函数初始化

8。将内存地址赋给栈内存中的p变量


java中常用的内存区域

在java中主要存在4块内存空间,这些内存的名称及作用如下:

  1. 栈内存空间:保存所有的对象名称(更准确地说是保存了引用的堆内存空间的地址)
  2. 堆内存空间:保存每个对象的具体属性内容。
  3. 全局数据区(静态域):保存static类型的属性。
  4. 全局代码区:保存所有的方法定义。


0 0