您的位置:首页 > 编程语言 > Java开发

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来创建的,该变量保存着值,并不是一个引用,该变量会存在栈中,因而效率会比较高。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: