Wil Shipley (Delicious Monster) sågar garbage collection

Tråden skapades och har fått 19 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • Stockholm
  • 2006-01-08 13:43

Wil Shipley från Delicious Monster talar om minneshantering och garbage collection i senaste avsnittet av CocoaRadio (40.19 in i programmet). Han menar att ett program som Delicious Monster inte skulle kunna skrivas i Java, på grund av inneffektiv minneshantering. Intressant!

Vänligen, Ylan

  • Medlem
  • Gävle
  • 2006-01-08 16:31

Hmm, nu har jag inte hört avsnittet än (så den här kommentaren kommer jag nog att ångra) men att såga garbage collection i allmänhet och att såga javas minneshantering är inte riktigt samma sak. Aja, nu ska jag lyssna på den också.

  • Medlem
  • Stockholm
  • 2006-01-08 16:43

Rubriken var väl något tillspetsad ;), men han menade verkligen att det mycket är av vikt att kunna bestämma när man skall ta minne i anspråk, och när man skall släppa det. Det är ju oerhört kostsamt i tid att köra slut på det fysiska arbetsminnet, och bröja skriva till och läsa från skiva.

Vänligen, Ylan

  • Medlem
  • Stockholm
  • 2006-01-15 13:57

För att utvidga frågeställningen (och bumpa den ursprungliga), vill jag återkomma till Mr. Shipley. Han hävdar att det inte finns några större konsumentprogram som är skrivna i Java, och då av tidigare i tråden nämnda skäl. Stämmer detta? Jag har för mig att jag hört om någon "Office killer" som skulle vara helt utvecklad i Java.

Vänligen, Ylan

  • Oregistrerad
  • 2006-01-15 14:32

Java på desktopen har väl inte blivit någon större framgång. De felsta verktyg skrivna i Java verkar vara utvecklingsverktyg, typ Eclipse, Netbeans och Together för att nämna några. Att detta skulle bero på minneshanteringen har jag dock svårt att tro. Java's VM (speciellt sedan 1.5 lanserades) är ruggigt snabb på att allokera minne, enligt vad jag hört iaf.

Se Java Urban Legends på IBM DeveloperWorks för lite information om Java's minneshantering och prestanda.

/Markus

  • Medlem
  • Stockholm
  • 2006-01-15 22:38
Ursprungligen av Malakim:

Java's VM (speciellt sedan 1.5 lanserades) är ruggigt snabb på att allokera minne, enligt vad jag hört iaf.

Det kan väl vara så att det är när man tvingas allokera riktigt mycket minne, som man måste se till att deallokera det man inte behöver längre ASAP. Det kvittar ju hur snabbt man allokerar/frigör om man måste ut och skriva på disken.

Vänligen, Ylan

Open Office är väl skriven i Java? Det är väl därför den är så horribelt långsam.

  • Oregistrerad
  • 2006-01-15 15:04
Ursprungligen av Ingemar Ragnemalm:

Open Office är väl skriven i Java? Det är väl därför den är så horribelt långsam.

Nej, OO.org är skrivet i C++. Dock är det nära knutet till Java. Man kan skriva moduler till OO.org i Java. T.ex är databashanteraren som används skriven i Java, och de delar som hanterar XML är nog också till stor del skrivna i Java.

Edit: Bör tilläggas att jag inte är 100% säker, utan det var den information jag lyckades hitta på nätet.

/Markus

  • Medlem
  • Gävle
  • 2006-01-15 22:41

Jag har lyssnat nu och visst stämmer det att han sågar garbage collection i största allmänhet, dock stämmer inte det han påstår; GUI-applikationer skrivna i Java är överlag sega, men det är verkligen inte GUI-applikationer skrivna i C#/.NET (för Windows). Det är snarare Java det är fel på, inte garbage collection i största allmänhet.

  • Medlem
  • Stockholm
  • 2006-01-15 22:53

Det är inte lätt för en gröngöling som jag att förstå vad som är vad. En del säger att Obj-C är slött, andra att C# är snabbt. Det enda jag vet är att inte många kontorsprogram skrives i Java, och att Wil Shipley menar att det rentav vore ogörligt att skriva ett program som Delicious Monsters Library i Java.

Vänligen, Ylan

  • Medlem
  • Gävle
  • 2006-01-16 00:11

Vem säger att Obj-C är slött?

  • Medlem
  • Stockholm
  • 2006-01-16 07:35
Ursprungligen av Jogin:

Vem säger att Obj-C är slött?

Jag antar att det är sådana som skriver assembler eller C. Jag har sett det på ett flertal ställen, och det är väl inte så konstigt att det, i likhet med andra "mellannivåspråk" drar med sig vissa tidskostnader. En stor fördel med Obj-C är ju att all Ansi-C kod är giltig kod. Man kan alltså välja att koda "närmare" processorn om man har tidskritiska processer.

Vänligen, Ylan

  • Medlem
  • Gävle
  • 2006-01-16 07:55

De som skriver GUI-applikationer i assembler kan nog räknas på min vänstra hand.

  • Medlem
  • Stockholm
  • 2006-01-16 08:44
Ursprungligen av Jogin:

De som skriver GUI-applikationer i assembler kan nog räknas på min vänstra hand.

Jag spekulerade i vilka det är som tycker att Obj-C är slött. Det är väl naturligt att de uppenbara fördelar man får med ett språk på högre abstraktionsnivå, har en kostnad. Jag hörde Steve Wozniak i TWIT att han var en av de få som fortfarande skänker en tanke åt hur en kompilator fungerar, när han programmerar.

Jag har nyligen börjat med Obj-C, och funderat på hur illa designad mycket av min kod varit, om det är så att det tar längre tid att skicka ett meddelande till ett objekt, än att hämta innehållet i en variabel. Gör det det? I så fall torde det vara ganska stor risk att man skriver "slö" kod.

Vänligen, Ylan

Senast redigerat 2006-01-16 09:08
  • Oregistrerad
  • 2006-01-16 15:05
Ursprungligen av Ylan:

Jag har nyligen börjat med Obj-C, och funderat på hur illa designad mycket av min kod varit, om det är så att det tar längre tid att skicka ett meddelande till ett objekt, än att hämta innehållet i en variabel. Gör det det? I så fall torde det vara ganska stor risk att man skriver "slö" kod.

Visst går det snabbare att hämta värdet på en lokal varaibel än att skicka ett meddelande (iaf i C / C++, kan inte svära på hur det fungerar i Obj-C), MEN du förlorar hela fördelen / iden med OOP, att du skall kapsla in din data så att inte vem som helst kan komma åt den hur som helst. Något sämre prestanda är priset man får betala för att få mer lätthanterliga program, och det är det värt om du frågar mig. Skriver du inte extremt tidskritiska eller utrymmesbegränsade applikationer är detta knappast något problem.

/Markus

  • Medlem
  • Stockholm
  • 2006-01-16 15:17
Ursprungligen av Malakim:

Visst går det snabbare att hämta värdet på en lokal varaibel än att skicka ett meddelande (iaf i C / C++, kan inte svära på hur det fungerar i Obj-C), MEN du förlorar hela fördelen / iden med OOP, att du skall kapsla in din data så att inte vem som helst kan komma åt den hur som helst. Något sämre prestanda är priset man får betala för att få mer lätthanterliga program, och det är det värt om du frågar mig. Skriver du inte extremt tidskritiska eller utrymmesbegränsade applikationer är detta knappast något problem.

/Markus

Det måste man inte. Jag tänkte att det skulle kunna vara effektivare att hämta samma värde från ett objekt en gång, istf att skicka meddelande varje gång man har glädje av värdet (för det fall man använder värdet flera gånger). Man bryter alltså inte inkapslingen. Jag kom på mig själv med att skicka samma meddelande fem gånger till ett objekt. Jag är som sagt gröngöling!

Vänligen, Ylan

Ursprungligen av Ylan:

Det måste man inte. Jag tänkte att det skulle kunna vara effektivare att hämta samma värde från ett objekt en gång, istf att skicka meddelande varje gång man har glädje av värdet (för det fall man använder värdet flera gånger). Man bryter alltså inte inkapslingen. Jag kom på mig själv med att skicka samma meddelande fem gånger till ett objekt. Jag är som sagt gröngöling!

Ska du använda ett och samma värde fem gånger i samma metod är det kanske bättre att plocka ut den en gång och spara i en variabel, speciellt om det är något mer än en simpel accessor. Annars hade jag inte bekymrat mig om performance på såna här grejer, det ska du göra först när du upplever att det går långsamt och du har använt Shark för att ta reda på exakt vad det är som går långsamt. Optimera inte i förtid och optimera inte på gissningar.

  • Oregistrerad
  • 2006-01-16 18:22
Ursprungligen av Ylan:

Det måste man inte. Jag tänkte att det skulle kunna vara effektivare att hämta samma värde från ett objekt en gång, istf att skicka meddelande varje gång man har glädje av värdet (för det fall man använder värdet flera gånger). Man bryter alltså inte inkapslingen. Jag kom på mig själv med att skicka samma meddelande fem gånger till ett objekt. Jag är som sagt gröngöling!

Jaha, du menade på det sättet. Jag tänkte visst lite för långt där.
Men som morris säger så är nog inte detta något att oroa sig för i första taget, så länge det inte är väldigt prestandakritiska applikationer du håller på med.

Senast redigerat 2006-01-16 18:49
Ursprungligen av Jogin:

De som skriver GUI-applikationer i assembler kan nog räknas på min vänstra hand.

Det är väl mest Steve Gibson, men han kodar iofs allt från sina GUI- till webb-applikationer i assembler...

Office-paketet som är skrivet i java hittar ni här: http://www.thinkfree.com/
Det var ett tag sedan jag provade det, men vad jag minns så tyckte jag att hastigheten var helt ok.
När det gäller att ett GUI skrivet i java automatiskt skulle vara långsamt, så är det inte sant. Men det är däremot ganska knepigt att få det snabbt. Det har inte så mycket med java i sig självt att göra, utan hur Swing är skrivet. Jag har läst en väldigt bra artikel om det på nätet, och om någon är intresserad så kan jag nog leta fram den igen.

1
Bevaka tråden