标签:实例化 元素 col 维护 释放 eal 通过 pre 内存分配
前言
下面将介绍:
Java面向对象的特征(简要概述)
类和对象的定义结构
对象的内存分配
0x00?Java面向对象的特征
Class 类名称{
...
}
可以在类中定义两种类型的元素:Filed和Method
对象的定义:
对象的定义有两种方式:
声明并实例化对象: 类名称 对象名称=new 类名称();
分步完成
声明对象:类名称 对象名称=null;
实例化对象:对象名称=new 类名称;
Java中的数据类型分为引用数据类型。这里对象名称是引用数据类型等同于C语言中的指针。关键字new的主要功能是开辟内存空间(不同于C++中的new,C++中的new完成了两个功能开辟空间和初始化对象)。new后面的类名称()完成对象属性的初始化。
0x13?对象的内存分配
寄存器
是最快的存储区,位于处理器内部,数量有限,一般不能被直接控制。
堆栈
位于通用RAM(随机访问存储器)中。堆栈指针通过向下移动可以分配内存,向上移动可以释放内存。这种快速分配内存的效率仅次与寄存器。创建程序时,Java系统必须知道存储在堆栈内所有项的确切生命周期,以便上下移动堆栈指针。这一约束限制了程序的灵活性,但是Java中的对象引用是存储在堆栈中的。
堆
一种通用的内存池(也是位于RAM区),用于存放所有的Java对象。堆不同栈的好处是:编译器不需要知道存储的数据在堆里的存活时间是多少。因此,在堆里分配会具有很大的灵活性。虽然灵活但是也有代价,在堆里清除过期对象的花费会比清除栈中的要高。
常量存储
常量值通常直接存放在程序代码内部,永远不会被改变。
非RAM存储
如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。其中两个基本的例子便是:流对象和持久化对象。“流对象”:对象被转换为字节流,发送给另一台机器。“持久化对象”:对象被放于磁盘上。因此,即使程序终止,它们也可以保持自己的状态。
回到Java对象在内存分配的问题上。堆内存保存着每一个对象的属性内容。在使用new关键字时就是在堆上开辟了一个新空间。栈内存中保存着是存储对象引用其值便是指向对应存储了属性值的堆空间地址。
需要注意:
一块没有被任何栈内存指向的堆空间就会成为垃圾空间,所有的垃圾会不定期地被垃圾收集器GC进行回收,回收后会释放其所占用空间。
虽然,Java有自动垃圾回收机制,但是在代码的开发过程中还是要尽量减少垃圾空间的产生。
标签:实例化 元素 col 维护 释放 eal 通过 pre 内存分配
原文地址:https://www.cnblogs.com/myworld7/p/9975791.html