java内存分析

在JAVA中,内存的管理分为Stack—栈,Heap—堆,DataSegment—数据段,Code Segment—代码段。

首先,先明确每一块区域存放的是什么内容。

Stack:可以翻译为栈区域,存放一些基本数据类型,局部变量,常量,对象的引用地址。

基本的数据类型为最基本的四类八种类型。如下图所示


指令代码就是一些函数和方法。

常量和对象的引用地址可以理解为定义的变量。但是只是引用地址,真正new出来的存放在heap中,即堆内存中。


Heap:存放对象实例,即在代码中new出来的东西全部放在此处。

DataSegment:数据段,存放静态常量和字符串常量。

CodeSegment:代码段,存放代码。


简单的内存分析图形如下红色标识


栈和堆的一些特点我通过图形进行了一些简单的对比


下面就以一个简单的实例分析下内存的存取

 
class Person{
    int id;
    int age;
    Person(int age, int id){
       this.age=age;
       this.id=id;
       System.out.println("ID:"+id+"年龄"+age);
    }
}
 
public class Test01 {
    public static void main(String[] args) {
        Person per=new Person(25,123);
    }
}


函数首先从mian执行

先创建一个per的局部变量在栈中


通过new创建一个Perosn的动态内存,在堆中分配空间,


最后调用构造函数,通过this指针自身给idage赋值,并将pe局部变量的引用指向对应的堆空间



通过内存分析,我们可以看出,创建对象,实质上在堆中动态的给变量分配一块内存空间,并将变量指向堆空间,也成为引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值