java学习笔记_内存分析

Posted 蚂蚁啃大树

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java学习笔记_内存分析相关的知识,希望对你有一定的参考价值。

 
程序执行时内存一般被分为4部分
  • 代码区(code segment):存放代码
  • 数据区(data segment):静态变量和字符串常量
  • 栈(stack): 存放局部变量
  • 堆(heap):动态生成内存(new出来的东西)
 
代码如下:
public class Person{
     int id;    
     int age;
     Person(int _id,int _age){
          id = _id;
          age = _age;
     }
 
     public static void main(String[] args){
        Person p = new Person(1,25);
     }
}

 

内存分配如下:

说明如下:
  1. 栈内存存放局部变量,堆内存存放new出来的东西;
  2. p为引用数据类型,是Person类的一个变量,Person p时,只在栈内存为p开辟一个空间,存放一个地址(比如地址为XXX ,不一定是物理地址),该地址用于指向对象new后堆内存为其分配的地址XXX。当new Person(1,25)时,堆内存才会为p的属性(id和age) 分配一个空间,空间的地址为XXX。并调用构造函数Person( )对属性值进行初始化,初始化为1和25(这个1和25是从栈内存中找到构造函数的变量_id和_age的值后再赋给p的变量id和age的);
  3. 调用构造函数Person时,会产生两个局部变量_id和_age。因为任何一个局部变量都会存放在栈内存中,所以栈内存中会为这两个局部变量分配空间,存放这两个变量的值1和25。
  4. 因为当方法调用完成之后,栈里面为其分配的所有空间会全部消失。所以当构造函数使用结束后,会收回其在栈内存中分配的_id和_age的空间,把空间“腾出来”给其他方法使用。但对象p会一直在栈内存中存在。

以上是关于java学习笔记_内存分析的主要内容,如果未能解决你的问题,请参考以下文章

Java集合源码学习笔记LinkedList分析

Android内核源码bionic目录下的子目录arch-arm源码分析笔记

[原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等(代码片段

深入理解 Java 虚拟机之学习笔记

深入理解 Java 虚拟机之学习笔记

Java编程思想学习笔记_1