Java语言基础(二)
2011-09-18 17:28
260 查看
内存分析
这次学习Java,第一次接触内存中的程序的具体执行过程。感觉理解内存中数据的进出对程序的理解确实很有帮助。
Java的执行过程在内存中一共占四个区域:
heap (堆)区:用来存放new出来的东西,是一个对象的真正存放位置。堆用于动态分配和释放程序所使用的对象。
stack (栈)区:用来存放局部变量,一般是对象的引用。
data segment 区:用来存放静态变量和字符串常量(只是常量,new出来的String对象还是在heap中)。
code segment 区:存放要执行的代码(函数,语句)。
执行步骤:程序开始执行使,首先将要执行的代码从硬盘Load到内存中的code segment区中,然后找到main方法开始执行,执行过程根据语句中的变量的类型分配不同的内存空间。
举例:
程序代码:
执行过程,1 将代码加载到code segment区,
2 开始执行main方法,在data segment中创建静态变量sid,值为100,
在栈中创建局部变量"mimi”,其指向堆的的真正new的对象。在data segment中创建字符常量"mimi"。
3 开始执行构造函数,Cat有一个参数,是局部变量,所以在栈中创建局部变量"name",其指向data segment中的"mimi",在堆中创建mimi的真正内容,包括name,也指向data segment中的"mimi", 还有id,值为100,然后data segment中的sid+1=1=101。构造函数执行结束,释放栈中的局部变量name。
内存如图:
4 然后回到main函数,main函数结束。释放所有内存。
这次学习Java,第一次接触内存中的程序的具体执行过程。感觉理解内存中数据的进出对程序的理解确实很有帮助。
Java的执行过程在内存中一共占四个区域:
heap (堆)区:用来存放new出来的东西,是一个对象的真正存放位置。堆用于动态分配和释放程序所使用的对象。
stack (栈)区:用来存放局部变量,一般是对象的引用。
data segment 区:用来存放静态变量和字符串常量(只是常量,new出来的String对象还是在heap中)。
code segment 区:存放要执行的代码(函数,语句)。
执行步骤:程序开始执行使,首先将要执行的代码从硬盘Load到内存中的code segment区中,然后找到main方法开始执行,执行过程根据语句中的变量的类型分配不同的内存空间。
举例:
程序代码:
public class Cat{ private static int sid=0; private String name; int id; Cat(String name){ this.name=name; id=sid++; } public static void main(String[] args){ Cat.sid=100; Cat mimi=new Cat("mimi"); } }
执行过程,1 将代码加载到code segment区,
2 开始执行main方法,在data segment中创建静态变量sid,值为100,
在栈中创建局部变量"mimi”,其指向堆的的真正new的对象。在data segment中创建字符常量"mimi"。
3 开始执行构造函数,Cat有一个参数,是局部变量,所以在栈中创建局部变量"name",其指向data segment中的"mimi",在堆中创建mimi的真正内容,包括name,也指向data segment中的"mimi", 还有id,值为100,然后data segment中的sid+1=1=101。构造函数执行结束,释放栈中的局部变量name。
内存如图:
4 然后回到main函数,main函数结束。释放所有内存。
相关文章推荐
- Java语言基础{Java_se(02)}-字面量和常量-变量的基本定义和使用-Java表达式-数据类型和分类-基本数据类型的转换-算数运算符-赋值运算符-比较运算符-三元运算符-逻辑运算符
- Java基础—— Java的语言基础
- [Java入门笔记] Java语言基础(五):数组
- 【Java概念】java语言基础(1)
- java语言基础06数组
- Java语言基础
- Java语言基础组成(一)
- java语言基础-输出矩形图案
- 第三章 Java语言基础3(其它运算符与基本语句)
- java语言基础入门——异常处理
- java语言基础(8)——数据类型转换(默认转换和强制转换)
- Java语言基础
- Java语言基础第九天
- java软件工程师培训学习日记------java语言核心基础之认识JAVA
- java与.net比较学习系列(2) 基础语言要素
- Java语言基础组成(运算符,关键字,语句if,whle,for)
- 黑马程序员----Java语言基础2(语句、函数、数组)
- Java语言基础学习笔记(五)
- 黑马程序员-day02java语言基础组成1
- 黑马程序员-Java语言基础–面向对象 第10天