Slashdot Mirror


Automated Migration From Cobol To Java On Linux

Didier DURAND writes "Just published an article about our 100% automated migration from IBM mainframe with Cobol to Linux Java: we could convert of our own application (4 million lines of code) through the tools that we developed. Those tools are open-sourced under GPL for other companies to benefit from them. We save 3 millions euros / year after this migration!"

38 of 195 comments (clear)

  1. "Automated" by 0100010001010011 · · Score: 2, Insightful

    Sounds like it could turn out like WYSIWYG HTML Editor code. Where every word you bold has the bold tags, etc.

    Dreamweaver, Word, etc all make some dang ugly HTML.

    1. Re:"Automated" by nicolas.kassis · · Score: 5, Insightful

      Converting something that was unmaintainable due to lack of proper skils to something totally unmaintainable due to lack of readability is not a good trade off.

    2. Re:"Automated" by ADRA · · Score: 3, Insightful

      The alternative is to maintain a pool of cobol developers to maintain the code instead of hiring (probably much cheaper) Java developers to improve any bad code.

      WYSIWYG's are a bad analogy, because it abstracts the process of writing HTML to a tool with the intent of writing HTML. In both cases (by hand or by machine) the results are HTML. With a -converter- like this one, the results may still generate bad code.

      --
      Bye!
    3. Re:"Automated" by plopez · · Score: 3, Insightful

      Cheaper Java programmers compared to what? People who know the code and business rules or people who will take years to learn the code and business rule, by which time they will be just as expensive. BTW, one of the stated goals was to migrate the people as well. That argument is a non-starter.

      --
      putting the 'B' in LGBTQ+
    4. Re:"Automated" by hamburgler007 · · Score: 4, Insightful

      The right tool for the right job. Java is a perfectly acceptable programming language in many circumstances. The key is understanding what it is capable of and what its limitations are.

    5. Re:"Automated" by Lonewolf666 · · Score: 2, Insightful

      Assuming the transcoder kept things like variable names, I guess the Java code will be more or less as (un)readable as the original. Maybe a bit worse because of "objectification" overhead without real gain in structure.

      So they saved a lot of grunt work (translating to Java without changing the functionality), but there is still a lot to do. As in, reworking the old code to take proper advantage of object orientation.

      --
      C - the footgun of programming languages
    6. Re:"Automated" by stevied · · Score: 3, Interesting

      I sympathize, but I suspect you're out of date. I remember doing some projects in Java in 1996/97. My conclusions at the time were that the language was pretty nice and clean, but lacked some of the stuff that seemed to me at the time to be important (type-safe generic programming capability), the runtime was too slow and too clumsy (shouldn't have felt like installing another OS on top of my OS), and the standard libraries were reasonable except for some stupid omissions (no interruptible I/O primitives .. from a Unix company??), and a horrible GUI (twice: AWT didn't expose the richness of the native GUI, Swing was slow as a dog for a long, long time.)

      I felt it had its place but couldn't understand what all the hype was about, and went back to my C++. Now I gather most of my grievances are fixed .. but I still don't understand why it took so long, or why everyone got so excited by version 1.0. Looking back, I'd've been interested in, say, a version of C++ with the direct memory access removed, i.e. no pointers, and some decent cross-platform standard libraries. The VM didn't interest me, but could easily have been added as an option later, as has happened with languages (Perl, Python, ...)

      Of course, "web hype" sells stuff in IT, just like sex does everywhere else. Witness the current Web 2.0 lunacy, where everyone's excited that we might just finally manage to produce web apps with usability that approaches that of the native applications we had 15 years ago. *sigh*

    7. Re:"Automated" by dzfoo · · Score: 3, Funny

      Ha, ha! You misspelled skilz!

            -dZ.

      --
      Carol vs. Ghost
      ...Can you save Christmas?
    8. Re:"Automated" by filesiteguy · · Score: 3, Informative

      "sluggish java"??

      I've heard this misfound rumor time and again.

      Java - when properly written - has been proven to be as fast in file operations, memory access and sequential processing as true "compiled" applications.

      The same goes for other JIT languages such as .NET.

    9. Re:"Automated" by BenoitRen · · Score: 3, Funny

      He isn't out-of-date. I have to suffer Java 1.6 at my college. The VM is still slow to start, and the GUI libraries still suck.

    10. Re:"Automated" by ralphdaugherty · · Score: 2, Informative

      ...it is usually pretty bloody difficult to just to figure out what the existing system is doing and and why.

            You're about the umpteenth post to point to a code readability problem which no one said existed as a reason for conversion.

            They stated clearly they were doing this to get off a mainframe and run off of PC server farms to save millions of dollars.

        rd

    11. Re:"Automated" by hotfireball · · Score: 2, Informative

      He isn't out-of-date. I have to suffer Java 1.6 at my college. The VM is still slow to start, and the GUI libraries still suck.

      Nah, not perfect though, but let's don't hyperbolize it either: it does not sucks really anymore. Personally I write a lot of Swing stuff and I would not say it that sucks as before Java 1.4 times. At least now 1.6 I'd say much better than even GTK or QT. Why?

      Because:

      • performance is same as QT or GTK. No, sorry. Performance sometimes better e.g. when you have a really huge amount of records and put it into table -- in that case I wish GTK performed better and GTK-based wxWindows did not crash.
      • In Java Swing you can create any possible widget you want per a very reasonable time, having it relatively easy. Example: http://download.java.net/javadesktop/scenario/demos/repaint-NestedTest.jnlp
      • While Swing looks like a cockpit of 747, yet it is over-flexible and thus very powerful. Yes, it is scary to new comers, but once you figured out, you have to say it is really cool, extendable and portable.
      • To write these kind of GUIs, including Quake-2 port in QT or GTK would take much more time for you. Not saying it is impossible. I am saying about time/cost/quality/competence/final-result-asap things.
      • I love JNLP concept and it works rock stable on controlled or semi-controlled networks, once done properly. JNLP (Java Web Start) is way better for internal software and enterprises than Ajax thing or equivalent GTK/QT stuff, since I've done all of this and can compare what was the best to achieve with average-skilled programmers, cheapest and fastest to develop-and-deploy. And you must know that either. :-)

      Additionally, you can use your own look-and-feel (including GTK's) etc. Of course, it has its side effects: you have to emulate specific platform etc. SWT does it natively, but it suffers from portability a lot, plus some parts are written in plain Java. Since API of various platforms changes and sometimes very drastically (like Apple is gonna drop Carbon one day), SWT renders to be a fool trap that always trying to catch up current status, but actually performs great only on Windows.

      Add to the story really great try of NetBeans team to bring you GUI visual editor and you have to agree that at least you can create GUI stuff literally in front of your boss's eyes. I agree, Swing not the best yet, but also not that horrible as before anymore either. That's why we can commit our patches to Java 7! :-)

    12. Re:"Automated" by dwye · · Score: 4, Interesting

      Java - when properly written - has been proven to be as fast in file operations, memory access and sequential processing as true "compiled" applications.

      Will the conversion program "properly write" its Java code, though? Care to lay odds? Especially considering that most COBOL code still in use is the code that uses COBOL's documented features (what were bugs in IBM 360, until they were written down, used, and so had to be replicated in any "real" COBOL implementation) to ... an unfortunate extent?

      The place that I worked at had a project to convert its legacy COBOL to C/C++, and it got to 90% easily, but the last 10% required manual conversion and/or rewriting the converter to handle the "missing" elements. I doubt that conversion to Java will be any more successful, at least on live, rather than sample, code.

    13. Re:"Automated" by Glonoinha · · Score: 2, Insightful

      Don't worry RD - all those guys are full of shit.
      I tell you what, let's show those guys just how awesome Java is ...

      Let's start with the fundamental awesomeness of Java (over that weak ass C and C++) by listing all the operating systems written completely in Java.

      No?

      Ok, maybe all the boot loaders written completely in Java.

      No?

      Hmmm.

      Ok, maybe all the space vehicles and satellites running completely on Java.

      No?

      Shit.

      Ok, how about the end-all, be-all of language completeness : this will show them - WHAT LANGUAGE IS THE JAVA RUNTIME WRITTEN IN?

      What's that? Not Java?

      Well shit.

      Fuck those haters. You watch, some day someone is going to invent a nice Java-like language (we can use pretty much the same syntax as Java) that is compiled instead of interpreted and will create native executables that run on the bare metal, something that can be used to write lightning fast applications, and even be used to write Unix and Windows type operating systems. It will be like 'Compiled Java', or maybe CJ for short. Maybe even shorten it a little more to just 'C'. And then people will write all kinds of fast, stable, OS quality binary code in this new version of Java, which we will call C. That will show them how awesome Java really is.

      --
      Glonoinha the MebiByte Slayer
    14. Re:"Automated" by WNight · · Score: 3, Insightful

      When "everything" is, "It's slow!", yeah.

      Yes, yawn, there are some things Java is slow for and that need speed. You shouldn't do those few things in Java. So what if it starts slow? Don't spawn new processes to handle incoming connections. For any given issue there are workarounds. If there are too many issues to justify it, use another tool.

      But, please, SHUT THE FUCK UP ABOUT IT!

      Seriously, just don't fucking use it. Just because you're too retarded to evaluate tools for the job at hand doesn't mean everyone else is.

      Java's not my choice either, but I don't feel the need to find every Java coder I know and rub it in. They're too busy redundantly declaring types to stop to chat anyways...

    15. Re:"Automated" by TheRaven64 · · Score: 3, Insightful

      Let's start with the fundamental awesomeness of Java (over that weak ass C and C++) by listing all the operating systems written completely in Java.

      What an incredibly stupid test. First, no operating system is written completely in C either. C is not expressive enough for the low-level initialisation code required by most CPUs, so every modern OS begins with some bootstrapping code written in assembler for the host platform. After the CPU is initialised, you can jump to something in a high-level (i.e. not processor dependent) language. For the record, I can name operating systems written in C, Java, C#, Algol*, Lisp*, Smalltalk, Ocaml, Pascal, and even one that has device drivers written in Python.

      * For these languages I can name operating systems for specific platforms which didn't need any assembly code for bootstrapping, but that's slightly cheating because they

      WHAT LANGUAGE IS THE JAVA RUNTIME WRITTEN IN?

      Java mostly, although this depends on the JRE you use. The first JREs were written by Smalltalk and Self hackers. A lot of Smalltalk VMs were all written in Smalltalk, specifically a subset of Smalltalk that was statically compiled (by a compiler written in Smalltalk), which then ran the rest of the environment.

      You watch, some day someone is going to invent a nice Java-like language (we can use pretty much the same syntax as Java) that is compiled instead of interpreted and will create native executables that run on the bare metal, something that can be used to write lightning fast applications, and even be used to write Unix and Windows type operating systems

      Ah, I see. You're an idiot who confuses a language with an implementation of a language. There's nothing stopping Java from being compiled; gcj produces static binaries from Java code, for example. Objective-C has all of the dynamic features of Java and is statically compiled. I've written a Smalltalk compiler that contains both a JIT and a static compiler, and can produce native object code from Smalltalk. Common Lisp is also statically compiled, and something like the Steel-Bank Common Lisp compiler has similar performance to g++.

      Similarly, it's possible to run C in a VM. Last year's LLVM developer meeting demoed a JIT compiler for C. If you do this then you can run all sorts of run-time profiling and dynamic optimisations (just as you typically do for Java).

      --
      I am TheRaven on Soylent News
  2. I sense a modest disturbance in the job market... by fuzzyfuzzyfungus · · Score: 5, Funny

    As though a few hundred cobol coders cried out in terror, and were suddenly obsolete...

  3. Thank the Lords of Cobol by popo · · Score: 2, Funny

    BSG humor is mandatory whenever Cobol comes up...

    --
    ------ The best brain training is now totally free : )
    1. Re:Thank the Lords of Cobol by Icegryphon · · Score: 2, Insightful

      Lords of Cobol are false deities, there is only one Lord, Ritchie.

  4. What do transcoders really buy you? by davidwr · · Score: 2, Insightful

    I'll say what they don't buy you: The ability to throw away the old language.

    If changes need to be made - and they will - you will want to change the original language not some intermediate that is stilted and hard to read at best and a candidate for an obscufated insert-language-here contest at worst.

    What transcoders do buy you:

    The ability to compile code on a platform that doesn't have a compiler for your flavor of your language.

    --
    Knowledge is how to play a game, intelligence is how to win, wisdom is knowing what game to play.
  5. Re:Sign of the times by umghhh · · Score: 2, Interesting

    If you are right there may be a cascade of converters to run and lucrative converters market full of consultants. If things go really ugly the more conversions are done more skills will be needed to find out why converted code malfunctions. These skills could possibly even include cobol just in case one has to look at original to find out ow did it work when it did:)

  6. Per slide 25 by Seakip18 · · Score: 4, Insightful

    All it appears to be doing is mapping COBOL line of code to Java Line of code, per Slide 25.

    This is more about being able to find someone who can read and write java. The code remains procedural, the COBOL programmers do the same stuff, just in Java now.

    Here's an example of the code that was spit out:

    sql("SELECT * FROM RS0403 WHERE CDPROJ=#1").into(vrs0403a.dvrs0403a).param(1, tuazone.tua_I_Cdproj)

    Not to dissuade, but in someways, they avoided doing a rewrite at all cost.

    Great if you want to get off legacy systems, but it's not going to magically improve your code base. GIGO rules still apply.

    --
    import system.cool.Sig;
    1. Re:Per slide 25 by phantomfive · · Score: 2, Interesting
      That would probably be scary, except the original code was like (from slide 26):

      MOVE FW-1ER-OCC-AFF TO J
      INITIALIZE SW-SEL-SA02

      Either way java seems like an improvement. I know in Cobol you can have expressive variables (readability was one of the original selling points of Cobol), so I'm going to guess that they have such weird looking variables on purpose. If you had decently named variables in the Cobol, it stands to reason that you would be able to have readable code as an output from their tools.

      --
      Qxe4
    2. Re:Per slide 25 by Alpha830RulZ · · Score: 2, Insightful

      "MOVE FW-1ER-OCC-AFF TO J
      INITIALIZE SW-SEL-SA02

      Either way java seems like an improvement. "

      Yeah,

      j = FW-1ER-OCC-AFF;

      and

      SW-SEL-SA02 = null;

      is so much easier to deal with.

      COBOL and other old programming environments sucked because they had limited length variable names, and no IDEs to help you keep track of variable names. This forced you to use naming standards to keep track of yourself, of which these names are undoubtedly an example of.

      --
      I was taught to respect my elders. The trouble is, it's getting harder and harder to find some.
  7. Serious Question Here by filesiteguy · · Score: 4, Interesting

    Though I could think of a ton of jokes - and have already seen a few - my first question is, "why."

    I can see the possible benefits of no longer relying on aging cobol programmers. I am often dealing with just this issue as I migrate '70's and '80's era systems off off ADABAS and COBOL. However, why would one want to make a one for one class creation of existing mainframe applications. I honestly remember a few programmers I knew doing this right before they retired back in '05. They took a COBOL/IMS application running on an AS390 and turned it into a HTML/ASP.NET application written in C# with IMS and SQL Server on a z890 in virtual MVS and SLES environments. The screens - web based now - were one for one matching with the previous mainframe screens.

    My question then too, was why bother?

    I just finished a second project in taking a '80's era mainframe application - this one to track the purchase of vital (birth death marriage) records - from mainframe into an n-tier model. Instead of simply copying the mainframe screens we spent time deciding what worked on the mainframe and what didn't. Some of the mainframe concepts - particularly in the public lookup - were fine. They stayed and became web-based applications. Other items were thrown out the window and completely re-worked into a user-friendly and efficient system. (In this case, we used MS .NET 2005 and C#, but we could have just as easily used Java. I'm not trying to say anything about the choice of language or underlying platform.)

    Having done a similar project for real property records in '07, we learned many lessons and were able to reuse assemblies in the new application. In fact, the entire UI, security, printing, data encapsulation, image import (there are over 160M TIFF files in our system), reporting and cashiering/finance/cash handling subsystems are identical and shared among both applications.

    I can see possibly wanting to utilize some classes for back end work but wouldn't it be better to review these individually and decide what is best?

    Oh, and we're saving roughly $3M/year in mainframe costs. :)

    (Okay, post finished now to wait for someone to mod me as a troll...)

    1. Re:Serious Question Here by Seakip18 · · Score: 2, Interesting

      I was wondering that too.

      My guess is that the business rules behind the application were known by each of the COBOL programmers. They didn't want to ditch the COBOL guys, but could see the age creeping in. So they decided to switch to Java as a compromise between a expensive rewrite that would render the COBOL programmers mostly useless and business as usual. Hey, you get a modern, functional language that is popular and get transition your COBOL guys into the syntax.

      I think it will come back to bite them in that they aren't going to magically be able to hire a Java programmer and have them ready to work within the same transition time as, say a truly OOP project would. The code is still the same, just with java syntax. Worse, a new programmer may start to write OOP code in a manner that the COBOL folks don't understand.

      --
      import system.cool.Sig;
  8. Re:Maintenance Maintenance Maintenance by Maxo-Texas · · Score: 3, Interesting

    I agree with your objections and have seen these problems so many times over the last decade that it is getting hard to believe that someone can't write a decent translator.

    Java is usually very easy to refactor (smart editors).

    It seems like a two or even three stage pass would work.

    Stage one, COBOL to raw java.
    Stage two, raw java to better formatted java.
    Stage three, better formatted java to even better formatted java.

    I wrote an RPG3 to RPG4 converter back in 2000.
    It used 5 passes-- each a small simple program.
    The result was actually fairly close to procedural java-- if we had decided to go with java, I could have written a 6th program to do that conversion.

    --
    She was like chocolate when she drank... semi-sweet at first and then increasingly bitter.
  9. Re:I sense a modest disturbance in the job market. by mikael_j · · Score: 2, Interesting

    Make that ten, although I've only coded COBOL at home for fun. Yeah, I'm probably some kind of masochist but I really wanted to give the language a spin and see if it was as horrible as people say it is.

    /Mikael

    --
    Greylisting is to SMTP as NAT is to IPv4
  10. Hmmmm. by Tablizer · · Score: 3, Funny

    I hacked into their source code, and found something a little odd:

    while (f = getFiles(srcDir)) {
      sendToBangalore(f);
      wait_a_little();
      result = getFromBangalore();
      save(result);
    }

  11. Re:I sense a modest disturbance in the job market. by realeyes · · Score: 4, Insightful
    Actually, a few hundred cobol coders announced their retirement, and a few dozen PHBs cried out in terror.

    My question is, "Do you also convert the CICS calls embedded in the code (and possibly 3270 terminal commands?!?) or is there a Java library to interface with CICS?" My experience with converters is that they follow the 90-10 rule, where they do great with 90% of the code, but that's the easiest, and could almost be done with global Find/Replace. The remaining 10% is why the conversion wasn't already done.

    Later . . . Jim

  12. Is it certified as a conforming COBOL compiler? by Ungrounded+Lightning · · Score: 2, Interesting

    I know there is a certification program to check that a commercial COBOL compiler processes the whole language and produces output code that performs correctly. (Can't recall the name at the moment though I think it was in the US government - perhaps in the DoD.) I'm wondering if this tool has been submitted to that and, if so, whether it passed.

    I'd occasionally thought it would be a useful thing to do something similar to this (but with ANSI V2 C++, rather than JAVA, as the target language) - and then get the tool certified. With such a certified tool IT administrators could, with confidence, transcode a COBOL application base into a language with multiple commercial and open compilers a long expected support lifetime, generating native code for virtually all possible targets (from PC clusters to current and future mainframes). If the transcoded output doesn't become excessively opaque and class-dependent it could later be warped into a more native form, should that be desirable.

    Perhaps this project will be able to actually do it.

    --
    Bantam Dominique roosters crow a four-note song. Once you've heard it as "Happy BIRTHday" you can't NOT hear it that way
  13. Re:Scary Thot by larry+bagina · · Score: 2, Funny

    CobolEngine cobol = new CobolEngine();

    cobol.AddLine("ADD A TO B GIVING RESULT");
    cobol.AddLine("PRINT RESULT.");

    cobol.Compile();
    cobol.Execute();

    --
    Do you even lift?

    These aren't the 'roids you're looking for.

  14. Re:mod parent up! by BikeHelmet · · Score: 3, Informative

    The JIT code is actually pretty fast. (especially when Hotspot is running in -server mode, which does some impressive optimization)

    It just consumes way too much memory, and starts damn slow. (though still faster than C#, in my experience)

    A couple times now I've taken base classes and rewritten them in Java to speed them up. ArrayList? Much too slow for my needs, even with a wrapper class ensurance it allocates in large enough chunks. By rewriting it in Java using Object arrays, I saw 60-100% speedups in the get/add methods, translating into roughly a ~2-4% speedup. (mileage may vary depending on workload)

    It was about 20000% faster than a default ArrayList - mind you, by default those things allocate in 6-index chunks, so every 6 objects you add it copies the whole ArrayList to a new one, with 6 more spots available. @_@

    There's a reason Java got the sluggish reputation, but it's not because the JIT code is slow. It's because the developers can get by with less of an understanding of what goes on behind the scenes, which never turns out good...

  15. That's terrible by Max+Littlemore · · Score: 3, Funny

    I propose a fix:

    while (f = getFiles(srcDir)) {
    sendToBangalore(f);
    wait_a_little();
    try {
    result = getFromBangalore();
    } catch (BangalorePedantryOnSpecException ex) {
    phoneBangalore();
    } finally {
    result = doLocally(f);
    }
    save(result);
    }

    --
    I don't therefore I'm not.
  16. Re:I have automatic translation to machine code by belmolis · · Score: 2, Interesting

    Ha, you think you're joking, don't you? A friend of mine used to work for the Air Force in one of their less high-tech establishments, a place that did inventory. The software, all locally developed, was written in Fortran. However, changing the source and recompiling was extremely tedious since it meant punching new cards, running them through to compile, then running the result of the first run through to link, then running the linked code, then transferring the output to another machine that could print. So, instead of changing the source, they edited the machine code. (And you wonder why they lost the aliens at Area 51...)

  17. Re:Java is for non-hackers by quanticle · · Score: 2, Insightful

    I guess it just goes to show that Paul Graham doesn't know very many great programmers. Either that, or his definition of 'great' is screwed up.

    Great programmers use the right tool for the job. Whether that tool is Lisp, Python, Java, or even COBOL doesn't matter. The way I see it, Mr. Graham's constant advocacy of Lisp as the be-all and end-all of programming environments is no better than any other language zealotry. Yes, Lisp has its place. So does Java. A truly great programmer would have the task dictate the language, not the other way around.

    --
    We all know what to do, but we don't know how to get re-elected once we have done it
  18. Re:mod parent up! by maraist · · Score: 2, Informative

    JIT code is slow? Or JITing the code is slow? When I run bench-marks, the average-benchark speed continually gets faster and faster as I increase the number of iterations. This is because the JIT continuously re-assesses basic-blocks to determine if coallesing is worth the expense. This means:
    A) code is NOT JIT'd at first, even with -server.. ONLY after a min-number of passes (why JIT initializtion code that'll never run a second time?)
    B) book-keeping to determine what to JIT and what not to JIT adds extra overhead for rarely used code
    C) Even JIT'd code is continuously evaluated to determine if larger execution-flow-patterns are possible.. So the same code might be JIT'd 50 times, each time being aggregated into larger bundles of contiguous raw assembly

    Thus, for short-lived applications, the JIT only provides marginal benefit if not a detriment (which is why the google android's JVM does ZERO JIT, and instead uses an alternate byte-code which is more efficient to cold-start).

    But, for servers (web-servers and mainframe code which will batch process all night long), you're talking about relatively small chunks of code (out of the overall loaded library) that are highly reused. It's entirely possible that an entire web-page can be inlined into a single chunk of assembly (though it's a stretch). Not even PHP can do this (at present).

    Basically typical code is complex because of optional flow-paths (if-statements, etc).. But in highly repetitive batch/server processing, there are a handful of paths which make up maybe 99% of execution, and thus can be rewritten in a way that in C would be horrendous (though certainly possible).

    Doing code-analysis to prove that an array index will never be out of bounds is expensive.. But once done, you can remove a lot implicit assembly-code. So general-purpose 3'rd party code can be almost fully optimized away. You get the best of both worlds.. High-degree of defensive coding + optimized execution. The cost is the ramp-up-time (and an immodest but reasonable memory foot-print).

    For single-app-servers, throwing 2 gig of RAM is NOTHING ($100 v.s. $5,000 ???), so I'm frustrated when I hear people bitch about memory consumption.. Memory use is bounded, if not, then you have a coded memory-leak and that's not the JVM's fault (usually due to misconfigured-as-unlimited in-mem caching - usually a disk-spill-over-caches that unknowingly (to the coder) retains headers in-mem).

    --
    -Michael
  19. Re:mod parent up! by maraist · · Score: 2, Informative

    "It just consumes way too much memory, and starts damn slow."

    Sigh. I've said this 100 times.. server apps (as relevant to this COBOL discussion) don't have startup time. They are up for months at at time (years even). Please distinguish between client-side apps and server-side apps.. As java-programming only exists in client-side-apps these days as server-interfaces (for fast-to-build, yet bug-free coding of mission-critical-apps) and cell-phone-apps (for hardware-portability). For this class of client-side apps, yes you can bitch about memory usage and startup time. Though hopefully memory usage shouldn't exceed 150Meg (a typical firefox executable). Server-apps, on the other hand have completely different requirements.

    A 'server' that runs java costs between $900 to $10,000. What is the cost of 2Gig of memory? $100? $200? Give me a break. Further, I usually recommend only using the 32bit JVM and thus <= 2Gig of JVM memory (typically caping out at 1Gig). Thus the worst stop-the-world GC-collection time is on the order of 1 second. This pause sacrifice gives you better overall throughput. There are server-app types that require 16, 32, 64 or 128Gig of RAM however, and thus you need the 64bit JVM (64bit pointers increase mem-overhead and cache-coherence) and can't risk the nearly-a-minute pause-times, so you need incremental collectors (with an additional 15% performance loss). But for this, I usually say that such large memory foot-prints are best handled by consolidated network-APIs. This allows you to cluster the apps on smaller, cheaper hardware, and then have a pair of larger-memory hardware on the back-end. But at this point, is the back-end really any different than a traditional large-mem database (such as mysql-INNODB or mysql-cluster/NDB or memcached)?

    And as for:
      "here's a reason Java got the sluggish reputation, but it's not because the JIT code is slow. It's because the developers can get by with less of an understanding of what goes on behind the scenes, which never turns out good..."

    If you're writing server-code (for targeted $10k hardware clusters), I should hope you're not paying somebody straight out of high-school. Or at least have coding-standard and code-reviews with senior staff.

    Otherwise, code to google-apps and run a castraded java-api that doesn't really let you waste resources and doesn't have startup-time issues. Actually, it's a pretty good segway for server-freshmen.

    --
    -Michael