1,存储数据的五个地方
寄存器:位于处理器内部,最快的存储区但是数量极其有限,不能直接控制
堆栈:位于RAM中,通过指针可以从处理器获得直接支持,指针下移分配新内存,指针上移释放内存,快速有效仅次于寄存器,程序创建时java系统必须知道堆栈内所有项的确切生命周期以便上下移动指针,主要存储对象的引用,但对象不存储于其中.
堆:位于RAM中,用于存放java对象,好处java编译时不需要知道堆中数据的生命周期,但比起堆栈处理数据会更耗时
常量存储:可选择存放于ROM(只读存储器),因为其永远不会改变常量值通常直接存放在程序代码内部
非RAM存储:数据完全独立于程序之外,例如持久化到硬盘上的数据,在程序需要时可以恢复为常规的基于RAM的对象
2,基本数据类型
基础数据类型不像其他对象一样会存储于堆中,而是直接存储于堆栈内,同时会提供基本数据类型的包装类使其能够在堆中创建一个非基本对象.
基本数据类型 大小 最小值 最大值 包装器类型
boolean -- -- -- Boolean
char 16bit Unicode 0 Unicode 2的16次幂-1 Character
byte 8bit -128 +127 Byte
short 16bit -2的15次幂 +2的15次幂-1 Short
int 32bit -2的31次幂 +2的31次幂-1 Integer
long 62bit -2的63次幂 +2的63次幂-1 Long
float 32bit IEEE754 IEEE754 Float
double 64bit IEEE754 IEEE754 Double
void -- -- -- Void
BigInteger BigDecimal用于提高大数据处理,无基本数据类型,可调用方法分别对应于int,float但必须以方法调用来进行运算不能使用运算符处理,运算速度较慢
3,注释标签
@see 引用其他类 @see classname
{@link package.class#member label} 与@see相似但用于行内以label作为超链接文本
{@docRoot} 生产到文档根目录的相对路径,用于文档树页面显示超链接
{@inheritDoc} 从当前这个类的最直接基类中继承相关文档到当前文档的注释中
@version 标签格式:@version version-information version-information包含在版本说明中的信息
@author 标签格式:@author +name
@since 允许指定程序代码的最早使用版本
@param 参数标识
@return 标识返回值含义
@throws 声明异常
@deprecated 声明已过时
4,finalize();
java代码调用本地c代码malloc()函数分配内存空间,需要java代码中finalize()方法中手动释放内存
5,垃圾回收方式:
应用中的内存+1,释放的内存 -1,即标记为0的进行回收(自动根据场景切换清理方式)
复制:设置两个分区,将应用中的对象复制到新堆,清除未复制的对象,当程序产生少量垃圾时不适用
标记-清扫:方式速度慢,但适用于少量产生垃圾的情况,运行逻辑为先标记再统一处理,会导致内存空间不连贯,要得到连贯空间需进行整理,垃圾回收过程中程序会被停止
6,初始化顺序
先静态对象(静态代码块)后非静态对象(非静态代码块) 先于构造器
变量:在类的内部,变量初始化先于构造器初始化
静态数据:只会占用一份内存空间只初始化一次
总体顺序为:父类的static变量及代码块--->子类static变量及代码块-->父类成员变量及代码块-->父类构造方法-->子类成员变量及代码块-->子类构造方法
7,final
final方法不能被重写,final类不能被继承
8,transient
transient关键字标记的成员变量不参与序列化过程。