标签:
在Java中,内存的管理分为以下几个部分:
![技术分享](http://img.blog.csdn.net/20140226110934296?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGFuZGFuem1j/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
Heap:堆区域,存放对象实例,凡是New出来的东西都存放在此。
Stack:栈区域,存放基本数据类型、常量、局部变量、对象的引用地址
Data Segment:数据段,存放静态变量和字符串常量
Code Segment:代码段,存放代码
一个程序的执行,先要从程序的存放地加载到内存区,然后找到内存区中的main方法执行,在这个执行过程中,内存就会对其进行管理。
![技术分享](http://img.blog.csdn.net/20140226112523609?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGFuZGFuem1j/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
Heap VS Stack:
![技术分享](http://img.blog.csdn.net/20140226140615046?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGFuZGFuem1j/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
内存分析实例:
现在通过一个实例来分析下在程序的执行过程中其内存是怎么对其管理的。
实例:
分析:
第一:寻找main主程序,执行Cat.sid=100;此时在程序中可以看到sid属于静态变量,所以将sid存放在Data Segment中。
第二:执行Cat mimi =new Cat("mimi");此时先声明一个对象mimi,存放在Heap中,又因为new Cat("mimi")中的“mimi”是一个字符串常量,存放在Data Segment中。这个对象存在两个私有属性,id和name。
第三:执行构造方法Cat(String name)中的this.name=name;为Cat(String name)中的name变量分配空间,存放在Stack中。Stack中的name指向Data Segment中的mimi。而this.name=name中的this指的是这个对象的name,即指的是Heap中的name。
第四:构造方法Cat(String name)中的this.name=name;完成后,垃圾收集器自动回收不使用数据
第五:执行构造方法Cat(String name)中的id=sid++;将sid的100分配给id,然后sid自身再加1。
第六:执行mimi.info();打印出
java内存的那些事
标签:
原文地址:http://www.cnblogs.com/yuxiliang/p/5943313.html