Forgot your password?
typodupeerror
Java Programming Software

Java Vs. C#: Which Performs Better In the 'Real World'? 437

Posted by timothy
from the oh-you-tease dept.
Nerval's Lobster writes "Software developer Jeff Cogswell writes: 'Let's compare Java and C#, two programming languages with large numbers of ardent fans and equally virulent detractors. I'm not interested in yet another test that grindingly calculates a million digits' worth of Pi. I want to know about real-world performance: How does each language measure up when asked to dish out millions of Web pages a day? How do they compare when having to grab data from a database to construct those pages dynamically? The results were quite interesting.' Having worked as a professional C# programmer for many years, Cogswell found some long-held assumptions challenged."
This discussion has been archived. No new comments can be posted.

Java Vs. C#: Which Performs Better In the 'Real World'?

Comments Filter:
  • by InterBigs (780612) on Thursday January 17, 2013 @11:08AM (#42616419)
    When talking about large-scale websites the language is hardly relevent. There are as many high-traffic sites running on C#, Java, PHP or whatever. When facing large scale other factors play a much larger role. The only exception is when you're talking Facebook or Twitter scale: Facebook has practically reinvented PHP and also has some parts of their code in C (or C++, not sure) and Twitter made a switch from Ruby to Scala in order to handle the onslaught of users. The results mentioned in the article (accepting 2000 requests takes 600ms longer when using simple code) are not that interesting in this context.
  • by hsmith (818216) on Thursday January 17, 2013 @11:10AM (#42616441)
    As your worst developer on the team.

    I've used both and really haven't seen issue with either. I have a slight preference for C#, personally, but it all comes down to your design, architecture, and implementation that will slow you down.
  • Does it matter. (Score:5, Insightful)

    by Anonymous Coward on Thursday January 17, 2013 @11:10AM (#42616449)

    I personally would expect one to win in some regards and the other to win in others. My concern is that C# is too tightly bound to MS platforms. Java isn't perfect, it isn't the write once run everywhere that was promised, but the port from Java on MS to Java on Linux, Mac ... will most certainly be better.

    That is enough that I would prefer Java over C# on my projects. Of course there are always outside parameters that might be enough to tip the scale.

  • A question? (Score:4, Insightful)

    by Coisiche (2000870) on Thursday January 17, 2013 @11:13AM (#42616483)

    I have seen it often said that when a slashdot headline ends in a question mark then the answer is no.

  • by QBasicer (781745) on Thursday January 17, 2013 @11:18AM (#42616537) Homepage Journal
    This is more a comparison between runtimes and servers, and less about language.

    The reason this is interesting, is it's a very simple test, and hows the maximum performance. Requests can never be faster than returning a simple string. CLR + ISS is slower than JVM + Tomcat. Unfortunately, we don't know where exactly the performance difference lies.
  • by ranton (36917) on Thursday January 17, 2013 @11:20AM (#42616559)

    These tests were also just as simple as calculating Pi a thousand times. Based on the description, I was hoping for some tests where a website with a dozen or so complete views with significant bindings were created in both Java and C#. Instead it was just an HTTP request or a page that printed the date.

    Different frameworks and web servers are going to use varying amounts of overhead, so simple tests really only calculate that overhead. If you are going to provide benchmarks that actually have some meaning then they need to test complex enough behavior to mimic real world usage.

    These tests basically just show that Tomcat is faster than IIS for simple scenarios, or perhaps that ASP.NET MVC 4 adds more overhead to page requests than JSP does. Whether this overhead is meaningful when you are processing rich real world web pages is not covered by these tests.

  • by MojoRilla (591502) on Thursday January 17, 2013 @11:26AM (#42616625)
    This article was obviously written by someone who has no idea what the state of the art is in performance web serving. If you know anything about high scale web technology, skip it.

    Where to start complaining? Don't roll your own http server. You probably don't understand what you are doing, and you will get weird results. Using Windows as a platform for a java web server is pretty silly. The author incorrectly assumes that because the .Net framework is fast, the ASP.net framework will be. That isn't the case. Running load testing on hello world test cases is silly. If you are interested in the real world, try testing with real world applications. The author also doesn't seem to understand that the JVM or .Net runtime will compile bytecode using JiT methods (Just in Time compiling). Finally, if you have skilled developers, it doesn't really matter what language you use. Architectural issues like data storage and caching are much more important than language.
  • by Virtucon (127420) on Thursday January 17, 2013 @11:30AM (#42616681)

    "Real World?" If we're all not in the real world then we must be living in imaginary space then. Seriously, I see the C#/Java thing coming down to a matter of enterprise choice vs. performance of the language. You'll find big shops running WebSphere/Weblogic and those running JBoss to deploy enterprise apps. There's still a lot of folks deploying with tomcat, which is a great tool. Microsoft has done well over the past few years in improving IIS / .NET scalability where it now can compete with Java EE deployments. 5 years ago you couldn't say that but now the differences are becoming more narrow. I like Java and use it. I like C# and use it as well. My biggest concerns with both is that largely, they're in the hands of two very large vendors. Java has at least more open push on it but again, Larry Ellison will dictate largely what happens to Java and IMO he'll milk it for every penny he can get. C#/.NET not only sells OS licenses for MSFT but it also gets used as a toy as well.
    It would be really nice I guess if both of these were truly in the public domain as to prohibit Oracle and MSFT from having direct control over how the languages evolve and are licensed.

  • by PhrostyMcByte (589271) <phrosty@gmail.com> on Thursday January 17, 2013 @11:32AM (#42616701) Homepage

    C# 5.0 (the latest version) has language-integrated async functionality that makes writing vertically scalable software a snap. It looks and behaves almost exactly like sync code, but actually runs async. Talking about server-side async here, not client-side.

    Doing the same thing with Java or an older version of C#, where you have only the base libraries to help you, is really quite tedious to do properly.

    So, for a test like this involving web development, I'd say language is actually a pretty relevant topic. Unless you've got lots of money to spend and can throw more hardware at something, the kind of perf improvement that can be provided by this is pretty astounding.

    But, there are problems with this test. He says explicitly that he's looking for a real-world test, but then goes and basically times a Hello World. There is no database access, no concurrent users. No real-world anything.

  • Re:A question? (Score:4, Insightful)

    by Tridus (79566) on Thursday January 17, 2013 @11:41AM (#42616799) Homepage

    Not just slashdot, but you're right: http://en.wikipedia.org/wiki/Betteridge's_law_of_headlines [wikipedia.org]

  • by Anonymous Coward on Thursday January 17, 2013 @11:43AM (#42616833)

    You've gotta be kidding.

    Hey, I know of this great conspiracy site...

  • by squiggleslash (241428) on Thursday January 17, 2013 @11:44AM (#42616843) Homepage Journal

    I've seen Tomcat on Windows a lot. Remember that most Enterprise environments until relatively recently used Windows for everything, but also bought into Java as the development platform to standardize on. Developers would be required to develop Java under Windows, and the Gods of IT would refuse to countenance a Linux server in their server room even if the developers wanted Windows.

    RHEL's rise has changed things somewhat, but it's still a common combination.

  • by Anonymous Coward on Thursday January 17, 2013 @11:48AM (#42616909)

    The reason this is interesting, is it's a very simple test, and hows the maximum performance. Requests can never be faster than returning a simple string. CLR + ISS is slower than JVM + Tomcat. Unfortunately, we don't know where exactly the performance difference lies.

    Nope, maybe that's what author think's he's doing, but he clearly doesn't understand the stacks.

    For .NET, he's using the entire ASP.NET MVC framework to return a simple string. For Java, he's just using a bare servlet, and no framework code. To make this a fair test, he should be using Spring or something on the Java side.

  • by squiggleslash (241428) on Thursday January 17, 2013 @11:55AM (#42617001) Homepage Journal

    * Dalvik is not Java. While the Java programming language is available for Dalvik, together with a subset of the J2SE library, the runtime itself is unrelated.
    * Windows 8 Metro "does not use .NET" is kinda meaningless, neither does Win32. However, you certainly can build Metro apps in .NET. http://blogs.msdn.com/b/dotnet/archive/2012/04/17/net-for-metro-style-apps.aspx [msdn.com]
    * The comment about the author of the article testing Java "by using a C# client" is bizarre and misleading. A language had to be picked, with the choice having the same impact on both tests. Chosing to test a Java server with a Java client, and then a C# server with a C# client would cause the test to be different in both situations and render the test results invalid.
    * The author of the article concluded that Java was generally faster than C#, not that "it was a dog".
    * Other than that, your comment is completely 100% correct. Possibly. Or maybe I didn't check.

  • Re:Does it matter. (Score:5, Insightful)

    by hsmith (818216) on Thursday January 17, 2013 @12:00PM (#42617053)
    I'll give it to MS, they have moved the language forward. Linq is amazing. Oracle has just isn't pushing forward as MS has done.
  • by RedHackTea (2779623) on Thursday January 17, 2013 @12:00PM (#42617059)
    Today, most of (if not all) the reasons for choosing a language are subjective instead of objective (not objective-c). Languages are so similar (at least the fundamentals, not talking about Brainfuck-lang here) that you pick a language based on the platform it targets or just personal feelings.

    In short, the Microsoft fanboys avoid more Linux-favored languages (and don't even think about Apple languages); Apple fanboys avoid more Microsoft-favored languages; and Linux fanboys avoid more patent-encumbered, closed-source languages and ones requiring to purchase an IDE/etc. for development. All fanboys avoid what they perceive as "diseased languages" like the plague. However, they will still touch these diseased language every now and then because either they have to for a job or out of pure curiosity.

    Being a Linux fanboy, C# is my bubonic plague. This is also in part growing up using Microsoft Visual Studio 6 for C++. For the haters, I actually loved this IDE, but then I found out that none of my code would work on other platforms or even other compilers with Win32 such as Borland++, g++, etc. (we all remember how a variable in a for-loop wouldn't be contained to just that block... terrible). And then when exploring other languages/environments, I couldn't believe my eyes when I could actually see library-level source code -- you have no idea how useful this is. Even though I'll admit that Microsoft has gotten a little better about this (although they still tried to spread FUD using the DroidRage campaign), it's not worth it to me. They've already lost my faith in them as a customer, and I can't see myself ever returning.

    Now, a good study would be to remove all of this and determine what languages are either faster to code in, easier to debug/maintain/extend with enterprise-level code, or more readable. But would this study even be useful? The differences would be so minute. Scripting languages are going to be faster to code in, so what's the fastest scripting language to code in? Object-oriented languages will be the easiest to debug/maintain/extend. As for readability, who knows? It's so subjective. We'd have to get a large, random sample size of people that have never seen a programming language before.

    Having said all of this, I still appreciate this guy doing the study. Apache has always made top-quality code, and it's good to see that TomCat lives up to it.

    Finally, as for sheer speed (and needs to be at least easier than assembly), C will always win.
  • by Anonymous Coward on Thursday January 17, 2013 @12:07PM (#42617139)

    Unless you're running Facebook or Twitter, the odds are that you don't really need to be asking questions like this. The bottlenecks you encounter are more likely to be poor code within your codebase than anything intrinsic about the language.

    If you are running a site like Facebook that needs to scale beyond what that platform can realistically cope with, and your codebase is perfect and can't be made any faster, then it may be more feasible to do what Facebook did with PHP and fix the platform, rather than to switch to something different as that would involve rewriting your entire codebase, at which point you no longer have "perfect" code any more, and you lose the benefits of your dev team's existing skillset.

    But very few of us are ever going to be in that position. Facebook did what the needed to do given the circumstances, but the rest of us should just concentrate on improving our own code before criticising the platform we're using.

    Bottom line: If you write decent code, it doesn't matter what language it's in; all the major platforms are perfectly capable of running a high traffic web site. Conversely badly written code can and will bring even the most resiliant of servers to its knees. It's all about your code, not about the platform.

    Anyone who tells you otherwise and says "language X isn't capable of doing that" is being a language snob. Feel free to ignore them.

  • by 0123456 (636235) on Thursday January 17, 2013 @12:13PM (#42617205)

    Open Office is slow as hell.

    Repeat after me: Open Office is not written in Java, though it uses Java for some optional features. Yon don't even need Java installed to run Open Office, and disabling Java does reduce Open Office startup time since it no longer needs to start the JVM.

    But it's a good meme to keep repeating, because when someone says 'Java sucks because Open Office is slow' and they're not talking about startup time, it's a very good indication that they have no clue.

  • Frankly, the obvious problem (from somebody who has done a bit of both JSP and ASP.NET development) is the use of the MVC framework on IIS, and nothing even remotely equivalent on Java. If this were going to be as close to an apples-to-apples test as possible, you'd use bare ASP.NET (a single .ASPX page, possibly with a code-behind .cs file) and a single .JSP page.

    I don't even think it's a matter of the author of the article having any agenda or something... I think he just honestly doesn't understand how to use the frameworks. For a very roughly analogous example from another programming domain, if I want to display a line of text on the terminal, I print a line of text. I don't go pull up the ncurses library and use it to create a one-line-tall TUI into which I create a label containing my text and then immediately exit. That would be... well, about as smart as using a heavyweight MVC framework to produce a web page containing the current time.

  • by ImprovOmega (744717) on Thursday January 17, 2013 @12:18PM (#42617271)
    Eclipse is the emacs of the IDE world. It tries to be everything to everyone - infinite customizability, plugins, addons, tweaks you can make...it is at the point where for a new user it is really difficult to get a starting point to go from, and finding simple commands can be a PITA to find since they're in non-obvious (unless you've been using Eclipse for years) places.

    NetBeans does a better job of exposing the functionality you need, though the extensibility is more limited (like vi or nano).
  • by lightknight (213164) on Thursday January 17, 2013 @12:23PM (#42617321) Homepage

    This is Sun we're talking about, now Oracle; they were the original planet weird when it came to implementing programming languages. Swing is one of the few things I've seen leave programmers speechless with frustration.

    Plus Oracle has been doing so well with their JREs that even DHS has recommended disabling their plugins lately.

  • by bfandreas (603438) on Thursday January 17, 2013 @12:55PM (#42617679)
    The dot.com bubble called. They want their Applets back.

    Whoever still uses Java Applets in 2013 should have a very good explanation for his doings. We stopped using them 10 years ago.
    I also fail to see how Java applets running in a web browser in any way relate to server-side code?
    Swing actually has a quite nice API. I've seen worse. Of course it got a bad reputation after legions of hobby-grade developers failed to use threads for heavy lifting and instead did everything in the render thread.
    I can write bad code in any language. There are many good reasons -a lot, actually- to not use Java client-side. Swing is not neccessarily one of them.
  • by Pieroxy (222434) on Thursday January 17, 2013 @01:23PM (#42617947) Homepage

    That and the fact that his "simple" test took longer to run than his supposedly more complex test in Java. Something wrong with the first test ? With the second?

    Well, something very wrong with the overall test. When your results contradict themselves, you should not publish them.

  • Re:Aspects... (Score:4, Insightful)

    by burisch_research (1095299) on Thursday January 17, 2013 @02:06PM (#42618435)

    Um, no. You could probably write an entire office suite in perl and have it fit onto a few small pieces of paper when printed out; but nobody would ever understand it, probably not even the person who wrote it in the first place!

  • by cfulton (543949) on Thursday January 17, 2013 @02:53PM (#42618953)
    Just an FYI. There is nothing that prevents running Java + MS-SQL. It is a common back end stack and is used for all web applications at my current employer. It works very well. KISS is a good strategy and should be employed in any project. However, part of that strategy is to keep dependencies low across the project hence interfaces. Part of that strategy is to find bugs prior to integration hence unit testing. I have worked with Java for a long time and if you are conversant with it the "Eclipse + Tomcat + project + nant tasks + debug" setup doesn't take any longer than the "VS + solution/project + debug" setup. I think it is more of a matter of taste than anything.
  • by Anonymous Coward on Thursday January 17, 2013 @03:14PM (#42619165)

    I can't speak to C#. But I've written code for a financial exchange in Java with p50 response times around 100 microseconds. p99's are tricker but were still sub millisecond (mostly due to the GC, however we were moving toward zero GC's). Having said that, most developers who write Java would have balked at the unsavory things we had to do to achieve that speed.

    I believe we undervalue the effect of the culture associated with languages. My experience is a lot of Java code is utter crap because the community is self reinforcing of bad ideas. I suspect that competent and motivated developers can take either Java or C# or C++ or whatever and make them fast.

    I think in the end the system should have written the critical path in C as it has the right level of abstraction needed for low latency. Java or any other relatively high level language is great for supporting systems.

  • by PickyH3D (680158) on Thursday January 17, 2013 @04:01PM (#42619681)

    In the first test, he explicitly mentions going back on his word to use a Linux machine.

    Because of this discrepancy, I feel compelled to try out the Java version on a Linux server. The server used is a “c1.medium” on Amazon EC2. I install the two different Java classes and see essentially the same speeds. The HttpServer class takes about 14 seconds to process 15 requests. Not very good.
    slashdot (http://s.tt/1yA3K)

    The author is clearly not a Java developer, and the second test really calls the first test into question. In the first test, he is having trouble with socket connections, which proved devastating to Java's numbers. Then, he moved onto using ASP.NET versus JSP in the second test, and JSP did significantly better than his simple socket tests in Java.

    The simple fact that he did not go back to figure out what was wrong with his first test demonstrates quite clearly that both sets of his results are useless. It should be obvious that he is a weak Java developer--even without seeing the code--and I suspect he is not a particularly strong C# developer either on the basis that he did not question the results.

  • Duh. (Score:4, Insightful)

    by wcrowe (94389) on Thursday January 17, 2013 @05:22PM (#42620435)

    Well gee, let's see. I can definitely say that C# programs do not perform as well on OSX, Linux, or IBM I.

  • by stenvar (2789879) on Thursday January 17, 2013 @06:55PM (#42621179)

    Maintaining an all-Linux backend usually requires a lot of high level administrative support and the administrators I can guarantee you are looking at COST first THEN functionality and they will ALWAYS see a Microsoft-based solution as inherently cheaper "because we already do that."

    That's utter nonsense. In reality, Linux is no harder (and probably easier) to maintain than Windows: it's less complicated, its interfaces and tools change less over time, and there are numerous ready-made, turnkey server solutions that you basically just boot up and use. More CS grads will know and will have administered Linux systems than Windows systems because administration for Linux systems is much more similar between single user and multi-user.

    School administrators may choose Windows because they believe it's easier to maintain, but they are mistaken.

If a camel is a horse designed by a committee, then a consensus forecast is a camel's behind. -- Edgar R. Fiedler

Working...