Java对象在内存中是如何存储的
2016-11-26 21:53
260 查看
原文地址:How are Java objects stored in memory?
在Java中,所有的对象都被动态地分配在堆上。这与C++不同,C++的对象要么分配在栈中,要么分配在堆上。在C++中,我们用new()来分配对象,这个对象就会被分配到堆上,如果不是全局的或者静态的,那么就会分配到栈上。
在Java中,只有我们在申明一个类型变量的时候,只创建一个引用(内存不会为对象分配)。为了给一个对象分配内存,我们必须用new()。所以对象总是分配在堆上(详细情况请看这里)。
例如,下面的程序不能编译,编译器报“Error here because t is not initialed”的错误。
用new()分配内存可以让上面的代码运行。
在Java中,所有的对象都被动态地分配在堆上。这与C++不同,C++的对象要么分配在栈中,要么分配在堆上。在C++中,我们用new()来分配对象,这个对象就会被分配到堆上,如果不是全局的或者静态的,那么就会分配到栈上。
在Java中,只有我们在申明一个类型变量的时候,只创建一个引用(内存不会为对象分配)。为了给一个对象分配内存,我们必须用new()。所以对象总是分配在堆上(详细情况请看这里)。
例如,下面的程序不能编译,编译器报“Error here because t is not initialed”的错误。
class Test { // class contents void show() { System.out.println("Test::show() called"); } } public class Main { public static void main(String[] args) { Test t; t.show(); // Error here because t is not initialed } }
用new()分配内存可以让上面的代码运行。
class Test { // class contents void show() { System.out.println("Test::show() called"); } } public class Main { public static void main(String[] args) { Test t = new Test(); //all objects are dynamically allocated t.show(); // No error } }
相关文章推荐
- 【Java】运行时Java对象在内存中是如何存储的?
- Java中如何实现一个类在内存里只能创建一个实例对象
- 如何计算java对象占用的内存
- java如何获取对象在内存中的大小
- 深入理解Java 虚拟机(周志明)笔记(三)——Java对象在内存中的存储与访问
- Java 内存——Java虚拟机中对象的创建、存储、访问定位。
- 简述c++中string对象的内存分配策略?如何获得其可存储的最大字节
- 【JAVA内存】如何计算一个Java对象占用的字节数
- java中如何保证对象在内存中的唯一性
- 危险代码:如何使用Unsafe操作内存中的Java类和对象
- Java 对象在内存中的存储
- Java序列化 如何把多个对象存储在一个文件中
- JAVA内存使用--如何计算一个Java对象占用的字节数
- JVM 内存分配模型概念和java中各种对象的存储
- 如何计算java对象占用的内存
- JAVA内存使用--如何计算一个Java对象占用的字节数
- C#和JAVA对象在内存中的存储
- 如何通过mat从java内存dump中找到缓存对象中的所有字符串
- JAVA基础积累(程序运行时对象是怎么放置安排,内存是如何分配?)
- JAVA内存使用--如何计算一个Java对象占用的字节数