Bu yüzden, birkaç terabayt veriyi karıştırmak için kullandığım bu Java programına sahibim. Performans bir endişe.Java'da verimli strtod?
Ben app profilli ettik ve tüm bellek ayırmalarını büyük bir bölümünün yanı sıra CPU zamanının büyük bir bölümünün basit bir işlemi gerçekleştiren gelir: Ben ASCII karakter dizisi var
. i
ofsetinden j
ofsetini karakterlerin kayan nokta sayısını temsil ettiğini biliyorum. Bu kayan nokta sayısını double
'a ayıklamam gerekiyor.
Nakil Double.parseDouble(new String(buf, i, j - i))
işini yapıyor.
new String()
yeni bir nesne oluşturur oluşturur dahilichar[]
dizi ve kopya diziye karakterler;: çok zaman harcanmaktadır ve hafıza tahsisleri bir sürü nereden geldiğini Ancak bu çünkü muhtemelen vardırDouble.parseDouble()
birFloatingDecimal
nesne oluşturur ve de birchar[]
dizi da içine karakterleri kopyalama oluşturur.
Tüm bu ayırmalar ve tüm bu kopyalar gerçekten gerekli değildir. Onlardan sakınabilir miyim? Gerçekten ediyorum nasıl bir
birchar[]
(veya
byte[]
) yanı sıra başlangıç / bitiş uzaklıklar almak ve bir
double
dönecekti bir
strtod
benzeri fonksiyonudur.
Herhangi bir öneriniz var mı? Kendim mi çıkarmalıyım? strtod
etrafında bir JNI sarmalayıcı mı yazmalıyım? Zaten orada olan bazı Java kütüphanelerini kullanmalı mıyım?
ikinci 10,5 metre dönüşümleri /, String.substring yöntemi kopyalamaz başlangıç dizisi. String kurucu bir darboğaz ise yararlı olabilir. –