Thinking in java学习2
2013-08-06 18:54
155 查看
数据存在哪里:
1、寄存器(registers)。这是反映最快的存储,因为它所处位置不同:在处理器里。不过寄存器的数量非常有限,所以它是由编译器分配的。你非但不能直接控制寄存器,甚至连它在的证据也找不到。
2、栈(stack)。位于"常规内存区"里,处理器可以通过栈指针对他进行直接访问。栈指针向下移就创建了新的存储空间,向上移就释放内存空间。只是仅次于寄存器的最快、最有效率的分配内存的方法。由于java编译器必须生成能控制栈指针上移和下移的代码,所以程序编译的时候,那些将存储在栈中的数据的大小和生命周期必须是已知的。这使得程序的灵活性受到了限制,所以尽管Java把某些数据----特别是对象的reference(引用)存放在栈里,但对象本身并没有放在栈里。
3、堆(heap)。这是一段"多用途的内存池",所有Java对象都保存在这里。同栈不同,堆的优点是,分配空间的时候,编译器无需知道该分配多少空间,或者这些数据会在堆里呆多长时间。因此使用堆的空间会比较灵活。只要你想创建对象,用new就行了,程序执行的时候自会在堆里分配空间。当然你得为这种灵活性付出代价,分配堆的存储空间要比分配栈的慢一些(假如你能像C++那样在栈里创建对象的话)。
4、静态存储(static storage)。“静态”在这里的意思是“在固定的位置”(尽管它还是在RAM里面)。静态存储里面的数据在整个程序的运行期间都能访问到。你可以用static关键词来指明对象中的某个元素是静态的,但是java对象本身是决不会放到静态存储中去的(说明里边存的是对象的引用)。
5、固定存储(constant storage)。常量值通常直接存放在程序里,这样他们就不会被改动了,因而也更安全。有时常量还能为自己设置界限,这样在嵌入式系统中,你就能选择是不是把它们放到ROM里面去。
6、非内存的存储(Non-RAM storage)。如果数据完全独立于程序,那么即使程序不运行,它也应该还在;即使程序失去了对数据的控制,它也仍然还在。两个最主要的例子是"流对象(streamed object)"和“persistent对象”。大致上说,前者是一种会被送往另一台机器的,由对象转化而成的字节流;而后者则是保存在磁盘上的,能在程序中止之后仍保存对象状态的文件。这类存储的奥妙就在于,对象被庄华成了某种能保存在其他介质上的东西,但是要用的时候,又能在内存里重建。
Java的基本类型boolean、char、byte、short、int、long、float以及double类型的变量并不是通过new来创建的,该变量保存着值,并不是一个引用,该变量会存在栈中,因而效率会比较高。
1、寄存器(registers)。这是反映最快的存储,因为它所处位置不同:在处理器里。不过寄存器的数量非常有限,所以它是由编译器分配的。你非但不能直接控制寄存器,甚至连它在的证据也找不到。
2、栈(stack)。位于"常规内存区"里,处理器可以通过栈指针对他进行直接访问。栈指针向下移就创建了新的存储空间,向上移就释放内存空间。只是仅次于寄存器的最快、最有效率的分配内存的方法。由于java编译器必须生成能控制栈指针上移和下移的代码,所以程序编译的时候,那些将存储在栈中的数据的大小和生命周期必须是已知的。这使得程序的灵活性受到了限制,所以尽管Java把某些数据----特别是对象的reference(引用)存放在栈里,但对象本身并没有放在栈里。
3、堆(heap)。这是一段"多用途的内存池",所有Java对象都保存在这里。同栈不同,堆的优点是,分配空间的时候,编译器无需知道该分配多少空间,或者这些数据会在堆里呆多长时间。因此使用堆的空间会比较灵活。只要你想创建对象,用new就行了,程序执行的时候自会在堆里分配空间。当然你得为这种灵活性付出代价,分配堆的存储空间要比分配栈的慢一些(假如你能像C++那样在栈里创建对象的话)。
4、静态存储(static storage)。“静态”在这里的意思是“在固定的位置”(尽管它还是在RAM里面)。静态存储里面的数据在整个程序的运行期间都能访问到。你可以用static关键词来指明对象中的某个元素是静态的,但是java对象本身是决不会放到静态存储中去的(说明里边存的是对象的引用)。
5、固定存储(constant storage)。常量值通常直接存放在程序里,这样他们就不会被改动了,因而也更安全。有时常量还能为自己设置界限,这样在嵌入式系统中,你就能选择是不是把它们放到ROM里面去。
6、非内存的存储(Non-RAM storage)。如果数据完全独立于程序,那么即使程序不运行,它也应该还在;即使程序失去了对数据的控制,它也仍然还在。两个最主要的例子是"流对象(streamed object)"和“persistent对象”。大致上说,前者是一种会被送往另一台机器的,由对象转化而成的字节流;而后者则是保存在磁盘上的,能在程序中止之后仍保存对象状态的文件。这类存储的奥妙就在于,对象被庄华成了某种能保存在其他介质上的东西,但是要用的时候,又能在内存里重建。
Java的基本类型boolean、char、byte、short、int、long、float以及double类型的变量并不是通过new来创建的,该变量保存着值,并不是一个引用,该变量会存在栈中,因而效率会比较高。
相关文章推荐
- 我的Thinking in Java学习笔记(七)
- java成员的初始化 --thinking in java学习笔记(三)
- thinking in java——0327学习笔记
- Thinking in java学习笔记之String的不可变性
- Thinking in Java [Java编程机制] 学习笔记 -- List / ArrayList
- Thinking in java学习笔记-并发(一)
- 我的Thinking in Java学习笔记(四) (zt)
- thinking in java 学习笔记(三)之重载
- 我的Thinking in Java学习笔记(十)
- Thinking In Java学习笔记
- java学习笔记【五】--thinking in java 小记录2
- 我的Thinking in Java学习笔记(八)
- 【thinking in java】学习笔记 三 初始化及权限控制
- Thinking in Java 4th学习笔记--Java中的双等号(==)比较操作符与equals()方法
- Thinking in Java学习小记
- 我的Thinking in Java学习笔记(2)
- JAVA学习日记---Thinking in Java学习笔记,第5章总结
- JAVA学习日记---Thinking in Java学习笔记,1-4章总结
- Thinking in Java学习笔记
- 我的Thinking in Java学习笔记(九)