[英]fast copying object content in scala
我有一個Int和Double字段很少的類。 將所有數據從一個對象復制到另一個對象的方法是什么?
class IntFields {
private val data : Array[Int] = Array(0,0)
def first : Int = data(0)
def first_= (value: Int) = data(0) = value
def second : Int = data(1)
def second_= (value : Int) = data(1) = value
def copyFrom(another : IntFields) =
Array.copy(another.data,0,data,0,2)
}
這是我建議的方式。 但我懷疑它是否真的有效,因為我對scala的內部結構沒有明確的理解
實際上我正在搜索scala相當於c ++ memcpy。 我只需要取一個簡單的對象並逐字節地復制它。
數組復制只是一個黑客,我已經搜索了正常的scala支持方法,並找不到。
我試過microbenchmark兩個持有者:簡單的案例類有12個變量,一個用數組備份。 在所有基准測試中(簡單復制和基於集合的復雜計算),基於陣列的解決方案的工作速度較慢,約為7%。
所以,我需要其他方法來模擬memcpy。
由於用於Array.copy
兩個數組都是基本整數數組(即不是其中一個保持盒裝整數的情況,在這種情況下while
使用裝箱/拆箱的while
循環將用於復制元素),它是與Java System.arraycopy
一樣有效。 也就是說 - 如果這是一個巨大的數組,你可能會看到與復制元素的while
循環相比的性能差異。 由於數組只有2個元素,因此可能更有效:
def copyFrom(another: IntFields) {
data(0) = another.data(0)
data(1) = another.data(1)
}
編輯:
我想說最快的就是一個一個地復制字段。 如果性能非常重要,您應該考慮使用Unsafe.getInt
- 有些報告它應該比使用System.arraycopy
更快的小塊更快: https : Unsafe.getInt
-unsafe
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.