几种JAVA创建对象时内存的分配情况
今天在装VS2008,实在是太墨迹了,顺便看了下JAVA基础,想到了几种JAVA创建对象的方式,对于其中内存的分配方式感到疑惑,于是就百度了下,下面做下总结:
a)首先,我们应该要知道,在创建一个对象的时候,JAVA会用到内存里面的3个东西,
堆:存放所用new出来的对象
栈:存放对象的引用(也就是地址),基本数据类型产生的变量
常量池:(这个比较特殊)是用来存放String常量,如“abc”
注意:堆比栈的速度要慢很多,
b)下面,分析下下面几种创建对象的方式:
String a = "123";
这是声明一个字符串常量,首先在常量池(如果是int或者其他基本类型,则是在堆中)
中查找有没有这个“abcdef”,如果没有,在池中产生一个“123”,然后把引用赋值给栈中的a
String a = new String("123");
因为有new,调用了String类的构造,在堆中产生了一个对象,值为“abcdef”,然后
在栈中声明一个引用a,把产生的对象的引用赋值给a
c)还有一个疑问:
SomeClass a=new SomeClass();
a=new SomeClass();
new SomeClass();
他们三者之间有什么区别和联系呢?
SomeClass a=new SomeClass();
1,SomeClass:栈中产生一个a对象,
2,new SomeClass() 堆中产生一个对象
3."="将new出来的对象地址赋给a
a=new SomeClass();
1.new SomeClass();重新开辟一个对象
2,“=”,将新对象地址赋给a
new SomeClass();
直接在堆中产生一个对象,但是没有传给栈中的一个引用(根据JAVA的垃圾回收机制,长时间不用,JVM会调用
System.gc()方法析构掉这个对象)。
很多都是网上拜读出来的,感觉很有用,就发出来了
- Java创建对象过程中,内存的分配
- Java 关于创建String对象过程的内存分配
- 深入java (类)构造函数和对象创建的内存分配
- Java创建对象分配内存
- 基础回顾——Java对象创建、内存分配、访问定位概述
- Java对象创建(含静态属性)内存分配流程解析
- Java中对象的创建、内存分配和销毁
- java创建对象内存分配空间及其原理一
- Java创建对象过程中,内存的分配
- [Java] 查看java对象的内存占用情况--java 优化系列
- placement new 在一块已分配内存上创建对象
- 创建String对象过程的内存分配小结
- Java中如何实现一个类在内存里只能创建一个实例对象
- 黑马程序员-java内存结构和对象创建的过程
- Java 创建对象有哪几种方式
- C++中有三种创建对象 内存分配问题
- Linux查看内存分配情况的几种方法
- Java对象的生命周期-内存分配、回收内存
- java类中属性的加载顺序,以及内存分配情况介绍
- Java对象内存占用情况分析