Follow Slashdot stories on Twitter

 



Forgot your password?
typodupeerror
×
Mozilla The Internet

Mopping Up Mozilla Memory Leaks 300

mouseman writes "Geodesic Systems, a maker of memory management/debugging software, has a live demo of their Linux product running on the Mozilla nightly builds. It's pretty damn slick -- it detects memory leaks and can show where in the code the leaked memory was allocated and actually recover (GC) the leaked memory. The Mozilla reports actually look pretty good, which jibes with my own impressions of how much it has improved -- see for yourself."
This discussion has been archived. No new comments can be posted.

Mopping Up Mozilla Memory Leaks

Comments Filter:
  • Wish they'd come out with a port for Win32. I've had more programs (usually file sharing services) eat up both memory and processor cycles to the point that everything came to a standstill.
    • by mellon ( 7048 ) on Friday March 15, 2002 @03:44PM (#3170021) Homepage
      It does work on win32!
    • by Mr.Intel ( 165870 ) <mrintel173@ya h o o.com> on Friday March 15, 2002 @03:46PM (#3170039) Homepage Journal
      Their Analyzer [geodesic.com] product order page shows a drop down for Linux, Solaris and WIndows 2000. My guess would be they have a port already.
    • We do have one. Try www.geodesic.com
    • Doh-- my bad. Read, THEN post... Durh... *LARTS self*
    • by Alien54 ( 180860 ) on Friday March 15, 2002 @04:06PM (#3170149) Journal
      I know that when I have moderator status here on slash, I can watch the system resources disappear down a block hole if I hit a story with a lot of comments and I use Moz.

      You can hear me screaming down the street.

      It is a little better under IE, but I prefer to use Moz.

      • I never have any problem when I'm using opera 5 with mod points - even with huge amounts of comments. OTOH Opera does seem to have a problem with sites which use mod_auth type logins but that's another story...
      • Someone says,

        I know that when I have moderator status here on slash, I can watch the system resources disappear down a block hole if I hit a story with a lot of comments and I use Moz.... It is a little better under IE, but I prefer to use Moz.

        I've been tracking this particular bug for a LONG time, and couldn't get anyone at the former Netscape to do anything about it. I haven't pestered the current Netscape or Mozilla teams because I haven't actually used the current browsers, and consequently expected I'd receive a poor welcome. But it sounds like the bug IS in still in the codebase, per the above-quoted comment.

        Specifically, the resource leak occurs when there are a lot of links INSIDE table cells, AND those links contain a lot of text. This apparently has a trigger threshold since if you sufficiently cut down the amount of text displayed as links, the leak goes away. Worst case, a large table with lots of long links can suck resources to zero in 30 seconds flat.

        It appears that checkboxes, radio buttons, and dropdown boxes occuring inside table cells can also trigger the problem, tho I don't have this pinned down to exact cases.

        Symptoms vary with the NS version and the WinVersion under it, but in general you will notice oddities like vertically overlapping text and checkboxes that go invisible. An example that affects NS3.04 is Slashdot's own "User Preferences" page, with its zillion checkboxes.

        This bug is apparently in ALL versions of Netscape, but only visibly manifests in certain versions. To my certain knowledge, 3.04-16bit (running on Win16 or Win32), 3.04-32bit, and 4.64 are the worst affected, but apparently it can be triggered in ANY version if you work at it hard enough. 3.02-16bit Gold, 4.00-32bit, and 4.04-32bit are somewhat less affected than average.

        People using the old Delphi forums (which were horrible for triggering the leak) griped about the symptoms constantly, regardless of NS version. Of course most had no idea what was happening, only that using Delphi crashed their computer.

        So long as you haven't actually zeroed out the system, resources will usually recover by 90+% after you leave the triggering page.

        The bug is ALSO definitely in IE3.0. I don't personally know about other versions other than that IE5.01 seems somewhat resistant to it (but I only use IE as a last resort, so...) But per the quoted comment, the bug is clearly not absent in recentish versions (I assume no one here is insane enough to still be using IE3 :)

        Correct me if I remember wrongly, but don't IE and NS both ultimately derive from the Mosaic codebase? The implication is that this is a core bug in the foundation code.

        BTW there is also a resource leak that happens if you view a page that has SWF on it, but you do NOT have the SWF plugin installed. The leak is approx. 25% per SWF box per page, and unlike the above-mentioned leak, resources do NOT recover when you leave the affected page. This affects NS 3.04-32bit and 4.04-32bit equally, haven't checked other versions. I suspect this is another manifestation of the same leak, since SWF-inside-tables also seems to be involved.

        Affected sample of the SWF/tables resource leak: http://www.blkviper.com/index.html (however, NO leak IF you have the SWF plugin installed).

        I'm not a coder, but I can contribute testing if desired.. I hope this information finds its way to the appropriate people (or if someone knows who I should contact, I'll do it myself), and that this bug is finally fixed!

    • by Taco Cowboy ( 5327 ) on Friday March 15, 2002 @05:16PM (#3170617) Journal


      I'm gonna need people's help to add to the list below.

      Here is a list of (freeware) Memory Leak Detectors and Garbage Collectors -

      ccmalloc
      http://www.inf.ethz.ch/personal/biere/projects/ccm alloc/

      Valgrind
      http://developer.kde.org/~sewardj/

      Boehm Collector
      http://www.hpl.hp.com/personal/Hans_Boehm/gc/

      Parallel Collector on Message Passing Environment
      http://www.yl.is.s.u-tokyo.ac.jp/gc/dgc/

      If there are more out there, would you kindly add what you have to the list, please ?

      Thank you !
  • by nzkoz ( 139612 ) on Friday March 15, 2002 @03:41PM (#3169997) Homepage
    As an alternative to this one and purify, I've been using valgrind lately (http://developer.kde.org/~sewardj/). It's defintely worth a look for those of you who don't have access to these commercial tools.

    Of course it doesn't do much in the way of garbage collection (well, anything) but it's still a great tool.
  • by Eric Damron ( 553630 ) on Friday March 15, 2002 @03:43PM (#3170015)
    'cause I think I'm of the age that most of my memory is leaking all over the floor....

    Now where did I put that mop and bucket?
    • Sometimes memory leaks are a good thing to test tolerance for a massive numbers of zombie processes! Leave them in, let malloc() have some fun. Tell your boss, "I'm testing the swapfile", and then say,
      "These memory leaks demonstrate that as more memory is used for a process, the less effective the L1 and L2 become and the more delays you get due to the massive pipeline stalls in the P4. So that's why we need to upgrade to AMD, *please* sign my expenses form immediately and ignore that pron and DVD recorder"

      Memory leak detector. Great I need one of those because, uhhhh can't remember. I need to get rid of a bug which does a malloc and then uhhh oh man it just slipped my mind. My computer doesn't need a memory leak detector, instead the thing that needs a memory leak detector is uhhhh I was about to say something but forgot.

      Moral of the story: A PDA is better at stopping memory leaks than any memory leak detector.

  • Interesting (Score:2, Interesting)

    by martial ( 107984 )
    I must confess that since Purify is not available for Linux, we are always looking for interesting pieces of software to do this job.

    Now the only question I have are :
    1) can it be used as a debugger too ?
    2) how does it compare to other systems like electricfence ?

    • Re:Interesting (Score:2, Informative)

      by mpsmps ( 178373 )
      > I must confess that since Purify is not
      > available for Linux, we are always looking for
      > interesting pieces of software to do this job.

      > Now the only question I have are :
      > 1) can it be used as a debugger too ?
      Yes

      > 2) how does it compare to other systems like electricfence ?
      Take a look at the demo (perhaps when it is less slashdotted) and draw your own conclusion. It is pretty self-explanatory.
    • Try Insure++ [parasoft.com] from ParaSoft. It catches more memory leaks, memory corruption and other kinds of errors than Purify, and is available for Linux.
      I've been an Insure (was Insight) user for 5-6 years now, and it is a wonderful tool. It will save you many person-hours of painful debugging, especially if you use C (like we do).
  • YES!! (Score:2, Interesting)

    by JoeLinux ( 20366 )
    Ever since .9.7, Mozilla has been running so damn fast and stable that it replaced my old Browser (Nutscrape). I'm not surprised at all. IT renders pages faster than IE does. I'm quite happy with it.

    JoeLinux
    • Now if they could only make the fonts work well...
      • The problem is that on Linux systems, it's hard to get 'free' fonts that look good. Most fonts on Linux are bitmapped, and thus don't scale well. The following upgrade will help all applications work better, especially if you alias your 'helvetica' font to 'arial' and your 'times' font to 'times new roman'. Go to Microsoft's "web core fonts" site [microsoft.com] and download the .exe files. Extract with a program like cabextract (they're just cab files with a self-extracting wrapper). Put them in your X server's fonts directory. Restart the X server (and the fonts server, if you use Redhat). Set up Moz to use the new fonts. Marvel at the beautiful scaling of TrueType fonts. All is better ;).
    • by Anonymous Coward
      The Segway has a built in web browser too? Cool!
    • Memory Usage Trends (Score:5, Informative)

      by joelgrimes ( 130046 ) on Friday March 15, 2002 @04:19PM (#3170224)
      Over the last 6 months, every time I download a nightly or milestone, I've been recording the results of the following test.

      Download the installer and run it. Moz will launch automatically after install. Kill Mozilla and restart it. Bring up the task manager to see how much memory is used.

      Here's the results I've had on my W2k box:

      2001 10/01 build 03 22,540k
      2001 10/15 build 06 21,876k
      2001 10/18 build 03 21,692k
      2001 10/23 build 09 21,984k
      2001 11/16 build 03 21,952k
      2001 11/29 build 03 21,656k
      2001 12/06 build 03 19,868k
      2001 12/10 build 03 19,812k
      2002 01/07 build 03 18,124k
      2002 01/14 build 03 19,064k
      2002 01/17 build 04 19,244k
      2002 02/26 build 03 18,608k
      2002 03/06 build 04 18,220k
      2002 03/11 build 04 17,704k (build 0.9.9)

      That's a decrease of almost 5 megs in memory usage over six months - all the while they've been adding features.
      Significantly, they've added venkman, tabbed browsing, the dom inspector and favicon support.

      Also significant - I don't know why I bother to get the talkback builds anymore - I haven't submitted a crash in 3 months. And I run it all day, every day.
      • I just fired up IE 6 on XP, and it is using 10,648k of memory. =]

        Mozilla 0.9.9 is using 16,683k on the same machine and OS. I think the decrease in memory usage has to do with removal of a lot of debugging stuff and what not, that'd be my guess. How much optimization is taking place with Mozilla, and how much time is spent on new features and bug fixes?


        • So how much memory does the windows Kernel, Explorer.exe and IE6 use all together?

          You cant find out how much memory IE6 uses on WindowsXP, maybe on Windows95 you can.
          • Then you better count how much memory X is using when you are using Mozilla to make it fair. IE will run on shells other than explorer, and probably use the same amount of memory.
            • Not really. Does X window contain HTML rendering routines? Nope. X window is to GDI+ as Mozilla is to IE. In other words, Mozilla doesn't rely on X window any more than any other app out there. Really large parts of IE are integrated into Windows--it's just a fact.
      • This is great news!
        Mozilla is decreasing in size by 1 meg per month.
        At the going rate, Mozilla won't take up any memory by August 2003 !! Imagine the start up times! How will IE compete?

        ;-)
  • Other Platforms (Score:4, Interesting)

    by wazzzup ( 172351 ) <astromac AT fastmail DOT fm> on Friday March 15, 2002 @03:44PM (#3170024)
    Will this directly affect and improve Mozilla on non-Linux platforms? Would it have a use flagging the leaks in the Linux code and then making the code corrections on the OS X platform?
  • by Malc ( 1751 ) on Friday March 15, 2002 @03:44PM (#3170027)
    Does this product actually integrate with the debugger. For example, can it break on a line of code before it uses a dangling pointer?

    I've been using NuMega products within MSVC for a number of years. I used Purify before that. I haven't used the latest version from NuMega, but I've always had a lot of success with BoundsChecker (memory profiler, error detection, etc), True Time (performance profiler) and True Coverage (code usage profiler).

    I wouldn't even know where to start looking for open source equivalents of these products. Can anybody give me any pointers? Preferably for Windows, but also Linux. How does this product compare with the likes of those from NuMega and Rational?
    • by charles fiterman ( 566758 ) on Friday March 15, 2002 @03:53PM (#3170080)
      We have a product that fixes premature frees. This means it will (if asked) ignore all frees and only collect memory when there are no more references to it. It will also eliminate storage leaks. This one isn't a debugging tool in that it doesn't point you at the bug, it just fixes it. We keep hearing people say "I'll go with that if I can take the speed hit." So they connect it and speed improves some times by multiple powers of ten. This is because sand is faster than rust. A single page fault can be slower than many collections combined. So if we eliminate storage leaks and prevent page faults the time we spend doing it is swamped by the time we save.
  • by lordpez ( 126699 ) on Friday March 15, 2002 @03:46PM (#3170038) Homepage
    CCMalloc also detects memory leaks and shows you where they took place. Even uses the GPL! It might not be as easy to use (you link your program to it during compile instead of running the it on a completed binary), and doesnt have a web interface, but its functional, and has been out for years.

    I bet someone could write a ld_preload kind of thing that calls ccmalloc, and you could run it on the completed binary as well, so you could run 'ccmalloc ./a.out' just like the 'gsinject -d ./a.out' of this product.

    Here is ccmalloc's page.
    http://www.inf.ethz.ch/personal/biere/proje cts/ccm alloc/
  • Hmmm.. (Score:1, Redundant)

    Next product they need is a bandwindth leak detector for their web server....the /. effect seems to have run it's course already.
  • Garbage collector (Score:4, Informative)

    by PD ( 9577 ) <slashdotlinux@pdrap.org> on Friday March 15, 2002 @03:57PM (#3170100) Homepage Journal
    If you're writing C++ programs, you should be using a garbage collector, such as Geodesics, or the Boehm collector available freely on the net. I've heard various objections to collection, mostly boiling down to speed issues. At least with the Boehm collector, you can choose to manually manage some memory yourself. In that case, it should be treated as an optimization problem. Write your program with the collector, then profile it. Anywhere you can pinpoint the collector as a major slowdown, handle the memory yourself.
    • by Anonymous Coward
      Hmm, but I like to store pointers p and q as a=p+q and b=p-q, and to access them as *((a+b)/2) and *((a-b)/2). If somehow I erase "a" but not "b", will these garbage collectors be smart enough to free locations p and q?
    • C, C++ and other pointer-arithmetic enabled languages can only use conservative garbage collection, which is slow and hideous, and defeats the purpose of using a language like C or C++ in the first place.

      If you want high-level functions such as garbage collection, just use high-level languages that do it better (Java, Python, etc), profile the result, and write specific slower portions in C or C++.
    • Information on the free Boehm collector can be found here [hp.com].

      http://www.hpl.hp.com/personal/Hans_Boehm/gc/
  • Parasoft insure (Score:3, Interesting)

    by JohnZed ( 20191 ) on Friday March 15, 2002 @03:59PM (#3170112)
    I've tried a fair number of memory debugging tools, and the only one that really impressed me was Parasoft's Insure++ [parasoft.com]. No, I don't work for them, and I think their prices are ridiculous (a few grand, last time I checked), but the demo version alone was able to find some totally obscure memory corruption bugs in a program I was working on. The Geodesic tool looks neat, but it seems much less comprehensive than Insure, as far as I can tell from the demo.
  • by Aexia ( 517457 ) on Friday March 15, 2002 @04:01PM (#3170119)
    that I seem to be missing?

    After reading the Salon article [salon.com] about how improved and fast it was now, I decided to give it a whirl on my NT desktop at work.

    I uninstalled it after about 15 minutes. It was just slow. Sluggish in loading pages, slow in creating new windows, everything. Not only was it slower than IE 5.5 but what surprised me was that it was slower than *Netscape* 4.7, which is what I primarily use. It's a shame because it had some nice options.

    What am I missing? Is it not meant to run on NT? Is it debugging code? Would it run better on XP? I'd love to give it a chance but apparently, I got some other Mozilla browser instead of the one everyone here is raving about.
    • You aren't missing anything. Mozilla is a dog. Its Javascript is also flaky. On Linux, I use Galeon which uses the rendering component of Mozilla. It is much better and faster. I really wish someone would develop a browser on Windows using only Gecko. I don't need nor care about the Mozilla "Development" platform.
    • Make sure you delete all your old profile and setting files before you reinstall again. Installing over a previous version causes problems.

      see: http://www.mozilla.org/releases/mozilla0.9.9/#inst all
    • I use it on NT. I have a fairly nippy machine, I used to run it on a 166MMX with 64Mb of memory and it was slow. 4x that amount of RAM and a P-III makes a huge difference, and it actually goes from being slower than IE (much slower) to much faster. I don't know why, it doesn't make sense to me, but there you have it.

      One thing though, opening new windows is something Moz is bad at. Try setting up the tabs feature which is both lightening fast, and in the opinion of everyone I've met a vast improvement. Again, this is one of those I don't know why things - if someone described the idea of tabs to me, I'd have said it sounds horrible. But it isn't.

      Be aware that while Mozilla is physically slower and more memory hungry, it's still a lighter browser over all. It takes around 66% of the download space of a recent MSIE, despite also having email and IRC and whatever, and even manages to be smaller than Netscape.

      Beautiful, just beautiful.
      • by Aexia ( 517457 ) on Friday March 15, 2002 @04:36PM (#3170361)
        Be aware that while Mozilla is physically slower and more memory hungry, it's still a lighter browser over all. It takes around 66% of the download space of a recent MSIE, despite also having email and IRC and whatever, and even manages to be smaller than Netscape.

        It may be slower and consume more resources but at least it uses less disk space?

        That's really not an argument the open source community should be making.
        • Where did I say disk space?
          • I believe that he is interpreting:

            It takes around 66% of the download space of a recent MSIE...

            as "it takes less disk space than MSIE".

          • Where did I say disk space?

            You said:
            [I]t's still a lighter browser over all. It takes around 66% of the download space of a recent MSIE, despite also having email and IRC and whatever, and even manages to be smaller than Netscape.

            What exactly *were* you referring to then if not diskspace? Just the download file?

            Great, that's an even better argument.

            More bloat and less speed from a smaller file. Talk about efficiency. Maybe Microsoft could learn from this...
            • Comment removed based on user account deletion
            • Erm, ok:

              1. It was a throwaway comment.
              2. It's generally a good thing when the installation package is small. Sure, it's not 1.44megs so you can't bung it on a floppy, but as part of a standard install in a company, or something on your backups of stuff, it's pretty nice.
              3. Have you ever downloaded a multimegabyte file using a normal modem? No, didn't think so.

              Geez. If I said "This car has some problems, but it corners well" you'd have been back at me with "Oooooooooh! The car's huge and all you care about is that it has a big steering wheel!"

              Or "One thing I like about this way this chicken is cooked is that it's fairly spicy" would garner the response "Oh great. So you're eating this fattening chicken and risking botulism and all you care about is that it makes you sneeze!"

              Jesus H. Christ. Read what I fucking say next time ok? Is that too much to ask? Or couldn't you find anything more controvertial you could twist out of context today? I'm surprised you didn't go further: "5 million Cambodians are dead and all you can care about is saving precious bytes in your download folder", "India and Pakistan are on the verge of nuking one another, and you think Mozilla rocks because it's got a good installer?" "Yeah, I know who else made compact installation packages too: Hitler. That was what Hitler did!"

              Geez.
    • No other Mozilla, no debugging code, it really is that fat and bloated. On a fast machine, it is faster than IE in some places. In others, it is pigishly slow.

      Being faster than IE in some places lets some people argue that it is faster and better than IE. It is not. I use Mozilla exclusively though. I find the performance disappointing but tolerable, however, it cuts out advertising and supports Internet standards.

      The memory footprint is abhorrant. The tool in the demo spots leaks, not usage. I've never had serious problems with leaks in any web browser. Normally they crash long before I have to worry about them consuming too much memory.

      I think Mozilla is particularly bad on Win32 OSes because the virtual memory managers in Windows will swap out unused allocated memory in exchange for HDD cache. This means if Mozilla is inactive for 10 minutes or so, it will get swapped out so that your drive cache can gain another 50MB. Oddly, IE doesn't appear to suffer from this. It would not be unlike Microsoft to introduce an undocumented API which allows apps to behave differently in swap, but that's just speculation.

      On the other hand Linux appears to use virtual memory as a last resort. I'm not sure which scheme I like better. Windows could use being less agressive in how it expands cache.

      Of course that is not to say that Mozilla isn't a pig. It is.

      I think Mozilla will revolutionize the Internet and the way in which web browsers work, but it might not be through their own success, it might be through opening of standards and immitation of their technology.



    • Mozilla requires 300mhz machine at LEAST.

      You shouldnt be using it on an old as hell machine. Its slow because your CPU is slow, period. they cant make your CPU faster. I mean the problems you complain about are CPU load problems not problems with ram.
    • 0.9.4 runs nice, fast as hell, stable on my PIV 1.6 256mb ram, under Linux Mandrake 8.1. Haven't used it on windows though... The really odd thing about this system though, overall, is its faster under linux overall, but it boots far faster under Windows. Odd.
  • by Greyfox ( 87712 ) on Friday March 15, 2002 @04:04PM (#3170134) Homepage Journal
    Once they've recovered from their thorough slashdotting I'll have to go check 'em out. Efence alone has saved me multiple weeks of debugging time, allowing me to track down memory leaks in our horrid application instantly. This translates into thousands of dollars of development time that can be put to more productive use. I'd estimate that efence has saved my group over 12 thousand dollars in debugging time this year. Now if only I could convince the boss to channel even a small portion of that back into the open source community...
    • Now, imagine what would happen to productivity if you just programmed in a language where these kinds of bugs (and others that efence does not catch) simply couldn't happen! Don't forget that in order for efence or purify (or great circle, for that matter) to work, you need to be able to trigger the bug at run-time...
      • While I do like memory safe languages and feel that C gives not only allows you to shoot yourself in the foot this way, it also paints a bulls eye on your shoe, I'm afraid that nothing will protect you from a bad programmer. Most of my department's woes are due to the fact that the project started out as a small one-person endeavor and the first 3 years of its life it was written and maintained by people who didn't really know how to program in C. People who knew the original programmer told me that he was learning C as he went. Hence the complete lack of data structures, constants and in some cases functions (One of the C files has a 8,000 line function in it.)

        A similarly ugly pile of Java code was delivered to our team to maintain just recently. This was the result of an attempt to migrate some of our functionality to Java and the project was handed to a guy with no CS experience in school or out. He ended up copying the (hideous) design of the existing C code and delivered code that was not only as hideous as the original C code, it was harder to maintain due to a complete lack of comments (Which was in turn due to a complete lack of understanding about what the product actually does.)

        Much of the project is, in fact, set to be ported to Java at some point. I believe the team doing that is currently about a year behind schedule. This does not so much reflect on their abilities as programmers (With certain exceptions) but rather that the system is actually being designed this time and involves business units from several geographic locations and code from about a dozen diverse teams.

  • by Anonymous Coward on Friday March 15, 2002 @04:05PM (#3170142)
    This is a great example of the Open Source community giving back to private companies. Geodesic tests an OSS web-browser, and Slashdot stress-tests their web server.
    • And they're using that lame javascript browser detector that complains "You need to get a frames-capable browser" if you have javascript turned off (like a sensible person), and only shows THAT much if you view source. (Display comes up blank.)

  • memprof (Score:5, Informative)

    by Arethan ( 223197 ) on Friday March 15, 2002 @04:27PM (#3170290) Journal
    I tried mentioning this in a thread, but it was too quickly drown out. There is a free product that does ld_preload style memory leak detection. It even does memory allocation profiling, so you can find that hidden 'for' loop that is responsible for that extra 15MB of allocated memory. The gui is done with gtk+, so it's easy to use, and will run on most any linux distro these days.

    It's available at http://people.redhat.com/otaylor/memprof/ [redhat.com]
    Freshmeat has an entry for it [freshmeat.net] as well.
  • by mateub ( 146588 )
    ...is a cross-platform tool. We are working on a project (in C++) at work that runs on HP-UX, Linux and Windows-under-Cygwin (a little English town near Stratford-on-Avonshire). What I really want is ONE tool that I can use on ALL these platforms. We use ElectricFence on HP-UX and Linux, but no luck under Cygwin so far. Purify doesn't work under Cygwin either, only MS. First tool to support all three of these gets our vote and even our money.

    adéu,
    Mateu

  • by Peaker ( 72084 ) <gnupeaker.yahoo@com> on Friday March 15, 2002 @05:26PM (#3170678) Homepage
    "How hard is it to manage pointers and free your memory allocations anyways?"

    (To those who didn't get it, I was being cynical)

    That is the response I usually get when advising to write using high-level languages that take care of memory management. Finding enormous leakage in huge programs almost proves this response wrong. Finding leakage in almost all programs definitely proves it wrong, and you sure will find leakage in almost every large program written in a low-level language like C or C++.

    The overuse of low-level languages with increasingly powerful hardware is becoming appearant to more and more people. It seems the "dark side" will be out of the low-level language hell sooner, as Micros~1 is pushing C# and .NET with all their marketing strength.

    If you don't want the Linux/*nix world to stay behind, stop using C and C++ where Python and Lisp can be used. Writing in C or C++ instead of a higher-level language can be deemed as a premature optimization, as any specific part of the program can be optimized and written in C when necessary. We all know how evil premature optimization is.

    If you write in C or C++ because that's simply what you know, you should not be wary of learning new languages. You should know that C++ is extremely hellish to learn, while Java is a lot simpler, and Python takes at most a day or two!

    From my own personal exprience, functional languages are a bit more difficult to learn and grasp, but it seems they perfectly fit some mindsets.

    Stop wasting human power on writing destructors and freeing unused memory, when it can all be done automatically.
  • by Mneme ( 56118 ) on Friday March 15, 2002 @05:34PM (#3170722)

    The Mac OS X's malloc library has built-in support for providing good leak detection. The command line tool leaks (installed with the free developer tools [apple.com]). Although leaks can be run on any program, it works best when you set the enviromment variable MallocStackLogging, which causes the system to provide complete stack frame information about when each piece of leaking memory was allocated.

    Also of interest are the malloc_history and heap command-line tools. They tell you lots of interesting information about exactly what is on the heap and how it got there. The malloc library also detects double frees by default (making it immune to the recent zlib security vulnerability) and can also detect writing on free blocks, etc. Very nice.

    Finally there is a graphical application, MallocDebug which provides similar information on memory leaks and memory use but also provides an easy to use memory-browser interface. Unlike simple leak detectors, you can explore your program's memory space and discover memory that isn't strictly "forgotten" by your program (it still has valid references to it) but should perhaps have been deleted anyway (e.g., finding memory allocated for a splash screen graphic). This last application requires that the code use a special library, but it is easy enough to make dynamically-linked programs use this library (thanks to Darwin's equivalent of LD_PRELOAD, DYLD_INSERT_LIBRARIES).

    Although you can debug any code with these tools (from command-line tool to X-windows, Carbon or Cocoa app), they really shine debugging Objective-C, because Objective-C provides enough runtime information for the tools to tell you lots about the objects that are sitting there on the heap.

  • by Anonymous Coward
    Soon on www.mozillaquest.com:
    Mozilla leaks out of control
    Mozillas memory leaks are out of control. Things has become so bad that mozilla-developers has developed a webapplication that automatically detects leaks. Yet again we can see that mozilla management is unable to keep the developers focused on developing a browser which has resulted in yet new features instead of fixing bugs. In previous articles MozillaQuest has described how new features has deleyed milestones and caused new bugs.
  • by markj02 ( 544487 ) on Friday March 15, 2002 @06:05PM (#3170879)
    If you want leak detection and garbage collection, use the Boehm/Weiser/Dehmers garbage collector. It works with C, C++, and a lot of other languages. Mozilla should probably be using it by default. For plain leak detection, there are plenty of highly functional open source packages. "dmalloc" comes to mind (although it's not completely unencumbered). For array bounds violations, you can use valgrind, ElectricFence, and other free tools.

    A more basic question to ask, however, is why something like Mozilla has memory leaks in the first place. Avoiding memory leaks in C is hard because there simply are no hooks in C to automate resource management. But C++ has constructs that make writing leak-free code and code that doesn't use bad pointers pretty easy. Since switching from C to C++ a few years ago, memory leaks and bad pointers have simply not been an issue anymore in my code.

  • We apologize for the inconvenience, but you will need a frames- and javascript-capable browser to use Great Circle's web-based debugger. We support Netscape Navigator 4.74 and 5.0 and Microsoft Internet Explorer 4.01 with SP2, 5.0, and 5.5.

    So I could look at this Mozilla memory leak thing -- but... uh, not in Mozilla...?

    (Don't get me started on Javascript. You really don't want to hear me rant about that.)

  • The basic problem is that C and C++ require programmers to obsess on memory allocation, yet provide no language-level help in dealing with it.

    Adding garbage collection introduces a whole new set of problems. C++ destructor semantics doesn't play well with garbage collection. ("Hey, that window will get closed at the next GC, just be patient!") Finalization opens a whole can of worms of its own (C# supports "re-animation", where dead objects can come back to life during finalization).

    Perl's reference-counting, with strong and weak pointers, has easily understood semantics, but there's a performance overhead. A big advantage of reference counting is that objects go away when you expect them to, not at some random time later. So destructors get called when expected.

    I proposed a way to retrofit efficient reference-counting into C++ (search comp.std.c++ for "Strict C++) but it just doesn't fit without making larger changes to the language than the C/C++ crowd can stand.

    I'd like to see reference counting with compiler support, with reference count updates hoisted out of inner loops. This would yield efficient reference-counted programs. We'll probably never see this.

  • An earlier slashdot story, combined with the fact that the app I'm working on has to be both netscape and IE compliant, prodded me into installing Mozilla. Wow! All the reasons I switched from Netscape to IE have made me switch to Moz. IE takes 10 seconds from startup to finishing rendering my homepage (my.yahoo.com). Moz took 3 (from quick launch).

    The tabbed browsing is as cool as everyone said it was. I can keep a browser window for each context (one works on my app, one has my blog, another has /., another random searching), and multiple tabs in there. With the "LittleMozilla" theme, the toolbar is almost as small as in IE (I keep all my tools/menu on one line, but LittleMozilla shinks the font). I did the "middle click opens tab" modification to the preferences and it works well, even if middle-click-drag no longer scrolls.

    Plus developing in it is heaven. The DOM inspector saved my sanity twice today. I'm still trying to figure out the JavaScript Debugger (it won't break on my breakpoints), but it looks pretty cool.

    It's crashed a few times on me today, once when screwing with the DOM inspector and another when changing between themes. So it's not perfect when it comes to stability. Neither was IE when I switched from Netscape and that didn't stop me.

    The one thing I don't like is the plugin support. I have JDK 1.4 installed, but it doesn't see Mozilla. When I went to the plugin page for it, it tried to install 1.3. I tried to install quicktime and it didn't see it. I'm thinking I need Netscape installed at the same time for these to work properly.

Swap read error. You lose your mind.

Working...