我想創(chuàng)建一個(gè)3x3矩陣類。我應(yīng)該將元素存儲(chǔ)在大小為9的浮點(diǎn)向量中,還是創(chuàng)建9個(gè)浮點(diǎn)字段以獲得最佳性能/內(nèi)存占用?太像了
public class Float3x3 {
public final float[] components = new float[9];
}
vs
public class Float3x3 {
public float a11;
public float a12;
public float a13;
public float a21;
// ...
public float a33;
}
(對(duì)象應(yīng)該是可變的,沒(méi)有g(shù)etter/setter,它是有目的地公開的。這不應(yīng)該是討論的重點(diǎn))
我已經(jīng)決定不使用float[3][3]
,因?yàn)檫@將創(chuàng)建更多的數(shù)組對(duì)象,加上3個(gè)arrays不一定在內(nèi)存中的同一位置,并且您不能利用像arraycopy
這樣的東西,因?yàn)樗鼈兪菃为?dú)的arrays。到目前為止,我的想法是:
- 9個(gè)浮點(diǎn)字段:應(yīng)該是最小的內(nèi)存占用,當(dāng)這些對(duì)象中的許多被快速實(shí)例化時(shí),這應(yīng)該更好,除非發(fā)生一些填充?而且,它們應(yīng)該在記憶中很接近,對(duì)嗎?
- 浮點(diǎn)數(shù)組:更大的占地面積,因?yàn)閍rrays是對(duì)象,加上數(shù)組的
length
屬性。然而,它們?cè)谟洃浿锌隙ㄊ窍噜彽模谏贁?shù)情況下你可以利用arraycopy
。然而,我不確定這是否真的比為這么小的數(shù)組設(shè)置字段更快?
那么,我應(yīng)該選擇哪一個(gè)選項(xiàng)才能獲得最佳性能呢?如果是4x4、5x5(我知道,沒(méi)用)。。。矩陣
我知道我談?wù)摰氖欠浅P〉男阅懿町悾乙仓皇呛闷胬碚撋鲜裁磻?yīng)該更快/更好,以及為什么。
通常,與為每個(gè)元素使用單獨(dú)的浮點(diǎn)字段相比,使用浮點(diǎn)的平面陣列可能更具性能和內(nèi)存效率,尤其是對(duì)于較大的矩陣。原因如下:
對(duì)于3x3矩陣,使用平面陣列和單個(gè)場(chǎng)之間的性能差異可能很小,但隨著矩陣大小的增加,使用平面數(shù)組的優(yōu)勢(shì)變得更加明顯。此外,使用平面陣列可以簡(jiǎn)化某些運(yùn)算,例如矩陣乘法,這可以使用
arraycopy
等陣列運(yùn)算來(lái)實(shí)現(xiàn)。總的來(lái)說(shuō),如果性能和內(nèi)存使用是應(yīng)用程序的重要考慮因素,那么使用平面陣列來(lái)存儲(chǔ)矩陣的元素可能是更好的選擇。