thinking in Java 笔记 一切皆是对象 (一)

程序存储的位置

1.寄存器

最快的存储区,它在处理器内部,寄存器是按照需求分配,无法直接控制。

2.堆栈

位于通用RAM中,可以通过堆栈指针来进行操作,指针向下移动,则分配新的内存,指针向上移动,则释放内存。速度仅次于寄存器。创建程序时,java必须知道在堆栈内所有项的生命周期,以便确定堆栈指针的上下移动,该约束限制了程序的灵活性,因此虽然某些数据(特别是对象的引用)存储在堆栈中,但java对象并不会存储在这里面。

注意:由于基本类型是特别小的、简单的变量,所以此类型变量不是用new来创建的,而是创建一个非引用的自动变量,该变量直接存储值,并置于堆栈中,所以更加高效。

3.堆

通用的内存池,也处于RAM中,可以存放所有的java对象。

存放在堆中的好处是:编译器不需要知道存储的数据在堆中存活多长时间,因此灵活性很大。当用new创建一个对象时,会自动在堆中进行存储分配。

4.常量存储

 常量值由于不会改变,因此可以直接放在程序内部。

5.非RAM存储

 数据完全存活在程序之外,则它可以不受程序控制,程序没有运行时也可以存在。

如流对象和持久化对象。流对象中,对象转化成字节流,通常被发送给另一台机器;持久化对象中,对象被存放在磁盘上,所以即使程序终止,它们仍可以保持自己的状态。

内存溢出和内存泄漏

内存溢出指程序在申请内存时,没有足够的内存空间供其使用,如申请了一个integer,但用它存储一个long才能存下的数,这就是内存溢出。

内存泄漏指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏的危害可以忽略,但如果该问题一直堆加,则内存到最后总会被消耗完。

详细解释:http://blog.csdn.net/buutterfly/article/details/6617375

JAVA中用于高精度计算的类

注意此时由于做运算需要以调用方法的方式来取代运算符方式,因此速度会变慢,是以牺牲速度来提高精度。

BigInteger

支持任意精度的整数

BigDecimal

支持任意精度的浮点数

---恢复内容结束---

posted @ 2017-08-03 13:21  grj0011  阅读(171)  评论(0编辑  收藏  举报