Java内存分析二
来源:互联网 发布:数据库课程视频 编辑:程序博客网 时间:2024/04/29 20:12
这是本系列的第二篇博客,继续上一篇的内容我们继续分析。
类跟数组一样,都是属于引用类型,引用类型就是指一堆对内存可以同时被多个栈内存指向。下面来看一下引用传递的简单实例。
1对象的引用传递例1
class Person{ String name; int age; public void tell(){ System.out.println("姓名:"+name+",年龄:"+age); } } public class Test03{ public static void main(String[] args) { Person per1=new Person(); Person per2=per1; per1.name="张三"; per1.age=30; per2.age=33; per1.tell(); per2.tell();
程序运行结果为:
姓名:张三,年龄:33
姓名:张三,年龄:33
从程序的运行结果可以发现,两个对象输出的内容一样,实际上所谓的引用传递,就是将一个堆内存空间的使用权交个多个栈内存空间,每个栈内存空间都可以修改堆内存空间的内容,此程序的内存分配图如下所示:
2对象的引用传递例2
class Person{ String name; int age; public void tell(){ System.out.println("姓名:"+name+",年龄:"+age); } } public class Test04 { public static void main(String[] args) { Person per1=new Person(); Person per2=new Person(); per1.name="张三"; per1.age=30; per2.name="李四"; per2.age=33; per2=per1; per1.tell(); per2.tell(); } }
上述程序运行结果为:
姓名:张三,年龄:30
姓名:张三,年龄:30
从程序的输出结果可以发现可Test03一样。不过内存分配发生了一些变化,具体如下所示:
注意点:
- Java本身提供垃圾收集机制(Garbage Collection,GC),会不定期施放不用的内存空间,只要对象不用了,就会等待GC释放空间,如上面堆内存中的name="李四";age=33。
- 一个栈内存只能指向一个对内存空间,如果要想再指向其他的堆内存空间,则必须先断开已有的指向才能分配新的指向。
java中常用的内存区域
在java中主要存在4块内存空间,这些内存的名称及作用如下:
- 栈内存空间:保存所有的对象名称(更准确地说是保存了引用的堆内存空间的地址)
- 堆内存空间:保存每个对象的具体属性内容。
- 全局数据区:保存static类型的属性。
- 全局代码区:保存所有的方法定义。
0 0
- Java内存分析二
- JAVA内存泄漏分析(二)
- Java虚拟机(二):Java常见内存溢出异常分析
- java基础--java内存分析(二)(类和对象与内存分析)
- C++内存分析(二)
- mysql内存使用分析(二)
- Objective-C(二):内存分析
- linux 内存分析(二)
- 内存泄漏分析二-线程
- java内存分配<二>
- Java内存模型二
- Java内存模型二
- Java的内存分析
- Java内存分析图
- Java内存分析小节
- Java 程序内存分析
- Java 程序内存分析
- Java 内存溢出分析
- Android客户端与服务器端数据同步
- mysql数据库中文变问号'???'
- makdown--LaTeX公式大总结
- python 编码、解码错误处理
- opencv3学习笔记(三)RGB HSV YUV相互转换
- Java内存分析二
- 区间覆盖问题
- python数据类型详解
- hautoj 1268: 小天使改名
- 备考PMP第七天
- 程序运行内存分析
- leetcode 406. Queue Reconstruction by Height
- python SMTP发送邮件
- Linux设备驱动注册