Java编程思想-一切都是对象

《Java 编程思想》第二章-一切都是对象,阅读笔记。

存储

  1. 寄存器:最快存储区,位于处理器内部。写 Java 程序时控制不了寄存器的,也就是说感觉不到寄存器的存在(C 和 C++ 允许向编译器建议寄存器的分配方式,还是这哥俩牛逼)。
  2. 堆栈:位于通用 RAM(随机访问存储器)中,通过“堆栈指针”可以从处理器那里获取直接支持。堆栈指针向下移动,则分配新的内存;若向上移动,则释放内存。Java 系统必须知道存储在堆栈内所有项的确切声明周期,以便上下移动指针。这一约束限制了 Java 系统的灵活性(因为 Java 的垃圾回收器是定时检查回收内存而不是实时检查回收内存,也就是说 Java 系统并不知道对象的确切生命周期),所以虽然某些 Java 数据存储在堆栈中——特别是对象引用,但是 Java 对象并不存储于其中。
  3. 堆:一种通用内存池(也位于 RAM 区),用于存放所有 Java 对象。堆不同于堆栈的好处是:编译器不需要知道存储的数据在堆里存活多长时间。坏处是:用堆进行存储分配和清理可能比用堆栈进行存储分配需要更多的时间。
  4. 常量存储:常量值通常直接存放在程序代码内部,因为它们永远不会被改变(所有有些嵌入式系统中,常量本身会和其他部分隔离开,可能存放在 ROM(只读存储器)中)。
  5. 非 RAM 存储:就是硬盘啦

Java 的基本类型变量是直接存放在堆栈中的,为了高效嘛!

BigInteger 和 BigDecimal

BigInteger 支持任意精度的整数运算;BigDecimal 支持任意精度的定点数,可以用它进行精确的货币运算!

Java 中的数组

C、C++ 中的数组就是内存块,所以取越界数组的值时你有可能看到难以用科学解释的东西哦!Java 为每个数组多增加了些内存开销以及运行时的下标检查,得到了安全性和效率的提高,因此这些代码就是值得的嘛!这也符合 Java 要实现的主要目标之一——安全嘛!(注意:这是语言级别的安全,并不是网络安全啥的)
如果是对象数组,则数据初始化时每个元素都置为 null;如果是基本类型的数组,则数据初始化时整个数组的内存区都置为 0,这也刚刚好能符合基本类型默认值吧!(Java 中数组也是对象,对象的元素那就是对象的属性了,对象的属性默认值就是每种基本类型的默认值喽,条条大路通罗马,真理怎么说都是通的)