Java vs. C++

Lasot Performance of Java versus C++ uzdūros vienam interesantam teikumam.

Another evidently well known problem in C++ is the overhead of returning an object from a function (several unnecessary object create/copy/destruct cycles are involved).

C++ problēma? Un kādēļ Java nav šīs “problēmas”? Java nenodod metodēm objektus un neatgriež objektus no metodēm. Java darbojas ar atsaucēm (reference) uz objektiem heap atmiņā. C++, turpretī, “problemātiskajā” gadījumā darbojas ar objektiem stekā. Tas jau līdzinās “ābols ir slikts, jo tas nav apelsīns” uzbraucienam. Kas gan liedz arī C++ darboties ar heap objektiem?

SomeClass getSomeClass() {
    return SomeClass();
}
...
SomeClass a = getSomeClass();
a.doSomething()

jāpārraksta par

SomeClass *getSomeClass() {
    return new SomeClass();
}
...
std::auto_ptr<SomeClass> a(getSomeClass());
a->doSomething();

Š ausmīgā C++ problēma pazuda nebūtībā, jo objekts vairs netiek atgriezts. Protams, otrajā gadījumā atmiņu var atbrīvot arī manuāli ar operatoru delete, tomēr šajā gadījumā tas ir maksimāli tuvināts oriģinālajam variantam.

Pieriebusies mērīšanās ar krāniņiem. Java virtuālā mašīna šajās sacensībās izdara tikai to, kas C++ gadījumā būtu bijis jādara programmētājam ar profiler: atrast šaurās vietas un nooptimizēt. Kā šīs Java fīāas ietekmē programmu bez izteiktas šaurās vietas (analizēšana tomēr nav bezmaksas)? Katrā ziņā mums ir izvēle: veltīt mazāk laika kodēšanai un paļauties uz instrumentiem vai darīt netīro darbu pašiem.

3 Responses to “Java vs. C++”

  1. asdfs says:

    pāaardon, aizmirsās tagu aizvērt ;D

  2. Pretty insightful post. Never thought that it was this simple after all. I had spent a good deal of my time looking for someone to explain this subject clearly and you’re the only one that ever did that. Kudos to you! Keep it up

Leave a Reply

You must be logged in to post a comment.