/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Vector vs. array
Fra : Morten Krogh Anderse~


Dato : 09-04-03 10:57

Hejsa

Er det et klogt hovede, som kan svare på, hvor stort et memory-overhead
der er på Vector i forhold til et typespecifikt array?

Mvh. Morten


 
 
Robert Larsen (09-04-2003)
Kommentar
Fra : Robert Larsen


Dato : 09-04-03 11:10

Morten Krogh Andersen wrote:
> Hejsa
>
> Er det et klogt hovede, som kan svare på, hvor stort et memory-overhead
> der er på Vector i forhold til et typespecifikt array?
>
> Mvh. Morten
>
En hel del.
Med vector skal du foretage stakmanipulation, funktionskald og
allerværst (performance mæssigt) så er det tråd sikkert, hvilket betyder
at monitorer skal tjekkes og låses.
Jeg har dog ingen benchmarks til at bakke min påstand op.

VH
Robert


Robert Larsen (09-04-2003)
Kommentar
Fra : Robert Larsen


Dato : 09-04-03 11:16

Robert Larsen wrote:
> Morten Krogh Andersen wrote:
>
>> Hejsa
>>
>> Er det et klogt hovede, som kan svare på, hvor stort et
>> memory-overhead der er på Vector i forhold til et typespecifikt array?
>>
>> Mvh. Morten
>>
> En hel del.
> Med vector skal du foretage stakmanipulation, funktionskald og
> allerværst (performance mæssigt) så er det tråd sikkert, hvilket betyder
> at monitorer skal tjekkes og låses.
> Jeg har dog ingen benchmarks til at bakke min påstand op.
>
> VH
> Robert
>
Damn...det kan godt være at jeg skal til at læse hvad jeg svarer på før
jeg svarer.
MEMORY overheadet er ca. ikke-eksisterende. Vector indeholder to int's
(8 bytes) samt et array, så forskellen må være 8 bytes.

VH
Robert


Morten Krogh Anderse~ (09-04-2003)
Kommentar
Fra : Morten Krogh Anderse~


Dato : 09-04-03 12:10

Robert Larsen wrote:

> Robert Larsen wrote:
>
>> Morten Krogh Andersen wrote:
>>
>>> Hejsa
>>>
>>> Er det et klogt hovede, som kan svare på, hvor stort et
>>> memory-overhead der er på Vector i forhold til et typespecifikt array?
>>>
>>> Mvh. Morten
>>>
>> En hel del.
>> Med vector skal du foretage stakmanipulation, funktionskald og
>> allerværst (performance mæssigt) så er det tråd sikkert, hvilket
>> betyder at monitorer skal tjekkes og låses.
>> Jeg har dog ingen benchmarks til at bakke min påstand op.
>>
>> VH
>> Robert
>>
> Damn...det kan godt være at jeg skal til at læse hvad jeg svarer på før
> jeg svarer.
> MEMORY overheadet er ca. ikke-eksisterende. Vector indeholder to int's
> (8 bytes) samt et array, så forskellen må være 8 bytes.
>
> VH
> Robert

Hej Robert

Tak for at du tog dig tid til at læse spørgsmålet ordentligt ;)
Og tak for svaret!

Jeg indlæser et ukendt antal objekter, som jeg skal bruge referencer til
i flere forskellige klasser. Dvs. at jeg kun tilgår objekterne gennem
Vector'en een gang. Derefter tilgår jeg dem direkte, så derfor er det
kun memory overhead jeg er(var) bekymret for :)

Mvh. Morten


Robert Larsen (09-04-2003)
Kommentar
Fra : Robert Larsen


Dato : 09-04-03 12:59

Morten Krogh Andersen wrote:

> Hej Robert
>
> Tak for at du tog dig tid til at læse spørgsmålet ordentligt ;)
> Og tak for svaret!
>
> Jeg indlæser et ukendt antal objekter, som jeg skal bruge referencer til
> i flere forskellige klasser. Dvs. at jeg kun tilgår objekterne gennem
> Vector'en een gang. Derefter tilgår jeg dem direkte, så derfor er det
> kun memory overhead jeg er(var) bekymret for :)
>
> Mvh. Morten
>

Hvis trådsikkerhed ikke er et problem burde du bruge ArrayList klassen.
Den er ret magen til Vector bortset fra, at dens metoder ikke er
synkroniserede, så den er en del hurtigere end Vector.

VH
Robert


Morten Krogh Anderse~ (09-04-2003)
Kommentar
Fra : Morten Krogh Anderse~


Dato : 09-04-03 13:04


Robert Larsen wrote:

> Hvis trådsikkerhed ikke er et problem burde du bruge ArrayList klassen.
> Den er ret magen til Vector bortset fra, at dens metoder ikke er
> synkroniserede, så den er en del hurtigere end Vector.

Enig, men skidtet kører på en embedded controller, hvis Java
implementation ikke indeholder ArrayList :)

Mvh. Morten


Michael Banzon (09-04-2003)
Kommentar
Fra : Michael Banzon


Dato : 09-04-03 16:45


"Morten Krogh Andersen" <spam1@krogh.net> skrev i en meddelelse
news:3e93ee7e$0$24724$edfadb0f@dread14.news.tele.dk...
> Er det et klogt hovede, som kan svare på, hvor stort et memory-overhead
> der er på Vector i forhold til et typespecifikt array?

I et array hvor du allokerer plads til de objecter som du bruger
vil du bruge det antal bytes som en enkelt reference bruger
gange antallet af objecter...

I en Vector allokerer vector-objectet et array for dig, der i
værste fald er dobbelt så stort som det nødvændige (når der
ikke er mere plads i arrayet fordobles størrelsen). Dette kunne,
ved mange objekter, give et væsentligt overhead...

Så det må vel være en vurdering. Det kommer an på hvor mange
objekter du vil bruge, hvordan du kan indsætte dem, om de skal
slettes, er der flere tråde der skal tilgå dem osv. osv. ...

Håber at det kunne svare på spørgsmålet...

/ Michael



Allan Weber (09-04-2003)
Kommentar
Fra : Allan Weber


Dato : 09-04-03 21:20

Morten Krogh Andersen wrote:

> Hejsa
>
> Er det et klogt hovede, som kan svare på, hvor stort et memory-overhead
> der er på Vector i forhold til et typespecifikt array?
>
> Mvh. Morten

Som en anden i tråden påpeger, så risikere du, at en vector er større end
nødvendig, men det kan klares med funktionen trimToSize() som sætter
kapaciteten af vector'eren til dens størrelse.

aw

Michael Banzon (09-04-2003)
Kommentar
Fra : Michael Banzon


Dato : 09-04-03 20:30


"Allan Weber" <weber@oncable.dk> skrev i en meddelelse
news:b71o8h$ot5$1@sunsite.dk...
> Som en anden i tråden påpeger, så risikere du, at en vector er større end
> nødvendig, men det kan klares med funktionen trimToSize() som sætter
> kapaciteten af vector'eren til dens størrelse.

Ja ok, men det ville jo give noget unødvændigt overhead...
Hvis man eksempelvis typisk tilføjer 1000 objekter af gangen ville det
der performer bedst nok være et array som man selv håndterer... Og udvider
med 1000 entries pr. gang...

Jeg mener stadig at en grundig vurdering af gennemsnitlig
udførelse/performance
skulle foretages og danne baggrund for valget af implementeringen...

/ Michael

P.S. Wow en masse _fine_ ord!



Robert Larsen (09-04-2003)
Kommentar
Fra : Robert Larsen


Dato : 09-04-03 21:10

Michael Banzon wrote:
> "Allan Weber" <weber@oncable.dk> skrev i en meddelelse
> news:b71o8h$ot5$1@sunsite.dk...
>
>>Som en anden i tråden påpeger, så risikere du, at en vector er større end
>>nødvendig, men det kan klares med funktionen trimToSize() som sætter
>>kapaciteten af vector'eren til dens størrelse.
>
>
> Ja ok, men det ville jo give noget unødvændigt overhead...
> Hvis man eksempelvis typisk tilføjer 1000 objekter af gangen ville det
> der performer bedst nok være et array som man selv håndterer... Og udvider
> med 1000 entries pr. gang...
>
> Jeg mener stadig at en grundig vurdering af gennemsnitlig
> udførelse/performance
> skulle foretages og danne baggrund for valget af implementeringen...
>
> / Michael
>
> P.S. Wow en masse _fine_ ord!
>
>

Man kan også selv bestemme hvor meget Vectoren skal udviddes når den
bliver fyldt. Fra JavaDoc'en:


protected int capacityIncrement

The amount by which the capacity of the vector is automatically
incremented when its size becomes greater than its capacity. If the
capacity increment is less than or equal to zero, the capacity of the
vector is doubled each time it needs to grow.



public Vector(int initialCapacity,
int capacityIncrement)

Constructs an empty vector with the specified initial capacity and
capacity increment.

Parameters:
initialCapacity - the initial capacity of the vector.capacityIncrement -
the amount by which the capacity is increased when the vector overflows.


Morten Krogh Anderse~ (10-04-2003)
Kommentar
Fra : Morten Krogh Anderse~


Dato : 10-04-03 07:41

Robert Larsen wrote:
> Michael Banzon wrote:
>> "Allan Weber" <weber@oncable.dk> skrev i en meddelelse
>> news:b71o8h$ot5$1@sunsite.dk...

Blahblah ;)

Takker for de mange fine svar, men som Robert opdagede, så var det KUN
et spørgsmål om memory overhead ved en Vector indeholdende n elementer,
vs. et array indeholdende de samme n elementer.

Jeg opretter et ukendt antal objekter, som jeg efterfølgende henter
referencer til fra forskellige andre objekter. Alle kald foregår
derefter på disse referencer, så der er listetype irrelevant.

Det er et spørgsmål om at smide alle de oprettede objekter over i et
array, efter indlæsningen (og så sætte Vectoren = null), eller at fyre
en Vector.trimToSize() af.. Så jeg gør det sidste. :)

Mvh. Morten


Jakob Justsen (10-04-2003)
Kommentar
Fra : Jakob Justsen


Dato : 10-04-03 22:18

Så vidt jeg husker fra min dAds-tider (alogritmer og datastrukturer) på
datalogisk institut, kan man
vist nok bevise at rent performance-mæssigt er det mest effektivt at
fordoble array'et når man løber
tør for plads.

Så man skal vurderer hvorvidt man vil spare hukommelse eller forøge
hastigheden.

/just

"Allan Weber" <weber@oncable.dk> wrote in message
news:b71o8h$ot5$1@sunsite.dk...
> Morten Krogh Andersen wrote:
>
> > Hejsa
> >
> > Er det et klogt hovede, som kan svare på, hvor stort et memory-overhead
> > der er på Vector i forhold til et typespecifikt array?
> >
> > Mvh. Morten
>
> Som en anden i tråden påpeger, så risikere du, at en vector er større end
> nødvendig, men det kan klares med funktionen trimToSize() som sætter
> kapaciteten af vector'eren til dens størrelse.
>
> aw



Søg
Reklame
Statistik
Spørgsmål : 177460
Tips : 31964
Nyheder : 719565
Indlæg : 6408200
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste