2.9.1 对象保存在哪里?
程序运行时,最好对数据保存到什么地方心中有数。
-
寄存器. This is the fastest storage because it exists in a place different
than that of other storage: inside the processor. However, the number of
registers is severely limited, so registers are allocated by the compiler
according to its needs. You don't have direct control, nor do you see any
evidence in your programs that registers even exist.
-
堆栈. This lives in the general RAM (random-access memory) area, but
has direct support from the processor via its stack pointer. The stack
pointer is moved down to create new memory and moved up to release that
memory. This is an extremely fast and efficient way to allocate storage,
second only to registers. The Java compiler must know, while it is creating
the program, the exact size and lifetime of all the data that is stored
on the stack, because it must generate the code to move the stack pointer
up and down. This constraint places limits on the flexibility of your programs,
so while some Java storage exists on the stack � in particular, object
handles � Java objects are not placed on the stack.
-
堆. This is a general-purpose pool of memory (also in the RAM area)
where all Java objects live. The nice thing about the heap is that, unlike
the stack, the compiler doesn't need to know how much storage it needs
to allocate from the heap or how long that storage must stay on the heap.
Thus, there's a great deal of flexibility in using storage on the heap.
Whenever you need to create an object, you simply write the code to create
it using new and the storage is allocated on the heap when that code is
executed. And of course there's a price you pay for this flexibility: it
takes more time to allocate heap storage.
-
静态存储. "Static" is used here in the sense of "in a fixed location"
(although it's also in RAM). Static storage contains data that is available
for the entire time a program is running. You can use the static keyword
to specify that a particular element of an object is static, but Java objects
themselves are never placed in static storage.
-
常数存储. Constant values are often placed directly in the program
code, which is safe since they can never change. Sometimes constants are
cordoned off by themselves so that they can be optionally placed in read-only
memory (ROM).
-
非RAM存储. If data lives completely outside a program it can exist
while the program is not running, outside the control of the program. The
two primary examples of this are streamed objects, in which objects are
turned into streams of bytes, generally to be sent to another machine,
and persistent objects, in which the objects are placed on disk so they
will hold their state even when the program is terminated. The trick with
these types of storage is turning the objects into something that can exist
on the other medium, and yet can be resurrected into a regular RAM-based
object when necessary. Java 1.1 provides support for lightweight persistence,
and future versions of Java might provide more complete solutions for persistence.