java数组内存分析
2014-07-05 20:37
197 查看
基本类型和引用类型数组的内存分析:
基本类型数组内存图解如下:
引用类型数组内存图解如下:
其实上面的图解还是有点问题:基本类型数组中的图一中,int[] a;此时a的值不是null,本质是栈内存中给出了4个字节的引用空间,里面没有值。等到下面s = new int[5]的时候s的4个字节的引用空间中才有了值,指向堆地址的值。引用类型数组的栈内存也是如此问题。
当然如果成员变量是引用类型,而且没有没有赋值的情况下,如果new对象出来的话,编译器会自动将类中的引用变量处理为默认值null。
null是一个特殊的引用值。局部引用对象只声明没初始化,此时没有引用值。没有引用值和引用值为null是两码事。
String a; String b = null;
String a=null;//分配了一个内存空间,里面存储了一个特殊的堆地址值null(该值也也就是说明没有分配堆内存空间)
String a;//分配了一个内存空间,里面没有存储任何地址值(特殊的null地址也没有),当然也就没有分配堆内存空间
String a="";//分配了一个内存空间,里面存储了一个具体的地址值(非null地址值),常量池中存储了一个空字符串对象(用双引号初始化的字符串不存储在常量池中,常量池属不属于堆有空再查)
String a = new String("abc")//分配了一个内存空间,里面存储了一个具体的地址值(非null地址值),分配了堆内存空间,堆内存空间里面存储的是abc字符串
基本类型数组内存图解如下:
引用类型数组内存图解如下:
其实上面的图解还是有点问题:基本类型数组中的图一中,int[] a;此时a的值不是null,本质是栈内存中给出了4个字节的引用空间,里面没有值。等到下面s = new int[5]的时候s的4个字节的引用空间中才有了值,指向堆地址的值。引用类型数组的栈内存也是如此问题。
当然如果成员变量是引用类型,而且没有没有赋值的情况下,如果new对象出来的话,编译器会自动将类中的引用变量处理为默认值null。
null是一个特殊的引用值。局部引用对象只声明没初始化,此时没有引用值。没有引用值和引用值为null是两码事。
String a; String b = null;
String a=null;//分配了一个内存空间,里面存储了一个特殊的堆地址值null(该值也也就是说明没有分配堆内存空间)
String a;//分配了一个内存空间,里面没有存储任何地址值(特殊的null地址也没有),当然也就没有分配堆内存空间
String a="";//分配了一个内存空间,里面存储了一个具体的地址值(非null地址值),常量池中存储了一个空字符串对象(用双引号初始化的字符串不存储在常量池中,常量池属不属于堆有空再查)
String a = new String("abc")//分配了一个内存空间,里面存储了一个具体的地址值(非null地址值),分配了堆内存空间,堆内存空间里面存储的是abc字符串
相关文章推荐
- Java学习系列(三)Java运算符、控制语句、数组及其在内存中的运行分析
- java数组内存分析
- 关于Java中多维数组的内存结构分析
- java学习之旅52--数组_数组基本概念_内存分析
- Java数组(Array)_基本概念_内存分析
- Java语言基础-数组的动态初始化和内存分析
- Java学习系列(三)Java运算符、控制语句、数组及其在内存中的运行分析
- java学习之旅60--数组_多维数组_基本语法_内存分析
- 第八、Java的数组定义与内存分析
- Java数组内存分析
- 数组内存图分析--Java基础028
- Java语言基础-数组的静态初始化和内存分析
- 黑马程序员——java基础(面向对象)进制转换、数组、内存分析
- Java学习系列(三)Java运算符、控制语句、数组及其在内存中的运行分析
- java数组与内存分析
- java内存分析【精辟】
- 分析内存的好文章http://translate.google.com.hk/translate?hl=zh-CN&langpair=en%7Czh-CN&u=http://www.vogella.de/articles/JavaPerformance/a
- 利用jmap和heapAnalyzer对java进程进行内存使用率分析
- Java程序开发中的内存分配情况分析
- java内存查看与分析