java内存分析

来源:互联网 发布:网络机顶盒怎么连接 编辑:程序博客网 时间:2024/05/29 19:01

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

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

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

 

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

 


 

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

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


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

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

CodeSegment:代码段,存放代码。


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

 

 


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

 


 

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

 

[java] view plaincopy
  1.    
  2. class Person{  
  3.     int id;  
  4.     int age;  
  5.     Person(int age, int id){  
  6.        this.age=age;  
  7.        this.id=id;  
  8.        System.out.println("ID:"+id+"年龄"+age);  
  9.     }  
  10. }  
  11.    
  12. public class Test01 {  
  13.     public static void main(String[] args) {  
  14.         Person per=new Person(25,123);  
  15.     }  
  16. }  


 

函数首先从mian执行

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

 


 

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

 


 

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

 


 


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

0 0