4
What Is Project Valhalla? - DZone Java (dzone.com)
natsu 積分 0 編輯於

Reduced memory usage: No additional memory is used to store object metadata, such as flags facilitating synchronization, identity, and garbage collection.

但是這樣的話 value types 要怎麼被 GC 回收?

不過從 jvisualvm1 看起來,通常 java application 比較佔記憶體的大都是 char[], byte[], int[], ...,所以 value types 確實有機會減少記憶體的使用

Primitives do not currently support qualified method calls or field access (i.e. use of the dot operator)

Primitive types 也不能表達 null... 所以還是需要 wrapper class

The Minimal Value Types article goes into great detail on this initial exploratory implementation and although this first cut includes many approximations of the eventual implementation (such as the use of an annotation to denote a value type rather than an express keyword for this purpose), it provides a promising path for the eventual inclusion of value types into Java.

可能需要增加新的 annotation,所以舊的程式沒辦法直接用...

不是已經有 string pool 的概念了嗎?類似的方法套用到 value types 不知可不可行?

IngramChen 積分 1

value type 就不會在 heap,不需要被 GC (跟 primitive 一樣)

natsu 積分 0

value type 就不會在 heap,不需要被 GC (跟 primitive 一樣)

請問一下,若不是放在 heap 中,那是放在哪裡?

沒有 GC 的話,value type & primitive 佔用的記憶體會被釋放嗎?

chchwy 積分 2

放在 stack, 脫離作用域就釋放

natsu 積分 0

放在 stack, 脫離作用域就釋放

對吼,除了 heap 之外還有 stack 可以放資料到記憶體中 (stack 太少被提到了,差點忘了它的存在...)

但若是宣告在物件裡的 primitive 就會被放到 heap 中了吧?

chchwy 積分 1

對阿,這時primitive的生命週期就是跟著那個物件了。 (題外話C++物件可以宣告在stack上XDDD

natsu 積分 1 編輯於

原來如此,所以 Valhalla 要做的事就是把物件裡用到的多個 primitive 放在連續的記憶體空間中,以減少記憶體指標 (reference) 的使用。

以 char[] 來說,JVM 只需要知道開始的位置及陣列 (array)長度 (length),即可存取到陣列 (array) 裡面的任一元素 (element)值 (value), 而不用每個元素 (element) 都去紀錄值(value) 所在的記憶體指標 (reference)

IngramChen 積分 0

放在 stack 啊