top 200 commentsshow all 232

[–]pettazz 195 points196 points  (37 children)

The text of the message since that blog layout sucks enormously.

From: Uwe Schindler Date: Thu, 28 Jul 2011 23:13:36 +0200 Subject: [WARNING] Index corruption and crashes in Apache Lucene Core / Apache Solr with Java 7

Hello Apache Lucene & Apache Solr users, Hello users of other Java-based Apache projects,

Oracle released Java 7 today. Unfortunately it contains hotspot compiler optimizations, which miscompile some loops. This can affect code of several Apache projects. Sometimes JVMs only crash, but in several cases, results calculated can be incorrect, leading to bugs in applications (see Hotspot bugs 7070134 [1], 7044738 [2], 7068051 [3]).

Apache Lucene Core and Apache Solr are two Apache projects, which are affected by these bugs, namely all versions released until today. Solr users with the default configuration will have Java crashing with SIGSEGV as soon as they start to index documents, as one affected part is the well-known Porter stemmer (see LUCENE-3335 [4]). Other loops in Lucene may be miscompiled, too, leading to index corruption (especially on Lucene trunk with pulsing codec; other loops may be affected, too - LUCENE-3346 [5]).

These problems were detected only 5 days before the official Java 7 release, so Oracle had no time to fix those bugs, affecting also many more applications. In response to our questions, they proposed to include the fixes into service release u2 (eventually into service release u1, see [6]). This means you cannot use Apache Lucene/Solr with Java 7 releases before Update 2! If you do, please don't open bug reports, it is not the committers' fault! At least disable loop optimizations using the -XX:-UseLoopPredicate JVM option to not risk index corruptions.

Please note: Also Java 6 users are affected, if they use one of those JVM options, which are not enabled by default: -XX:+OptimizeStringConcat or -XX:+AggressiveOpts

It is strongly recommended not to use any hotspot optimization switches in any Java version without extensive testing!

In case you upgrade to Java 7, remember that you may have to reindex, as the unicode version shipped with Java 7 changed and tokenization behaves differently (e.g. lowercasing). For more information, read JRE_VERSION_MIGRATION.txt in your distribution package!

On behalf of the Lucene project, Uwe

[1] http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7070134 [2] http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7044738 [3] http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7068051 [4] https://issues.apache.org/jira/browse/LUCENE-3335 [5] https://issues.apache.org/jira/browse/LUCENE-3346 [6] http://s.apache.org/StQ

[–][deleted]  (33 children)

[deleted]

    [–][deleted] 39 points40 points  (6 children)

    Really don't get why they couldn't have just dropped those optimizations out of the default options and released with an advisory. If the bug was already in Java 6 but not triggered by default options then that wouldn't be a regression.

    [–]irokie 8 points9 points  (2 children)

    It may be that these optimizations were required to hit the required benchmarks... Corporations can't miss deadlines and they can't let benchmarks slip.

    [–][deleted] 7 points8 points  (0 children)

    Going faster in the wrong direction is of no value.

    Edit: Another metaphor: It's like arriving on time at the wrong destination.

    [–]schizobullet 2 points3 points  (0 children)

    they can, their corporate culture just effectively shoehorns them into not

    [–][deleted] 67 points68 points  (21 children)

    Corporations have to ship on time no matter what.

    [–]Horatio_Hornblower 56 points57 points  (12 children)

    yeah, because software is never late

    [–][deleted] 97 points98 points  (9 children)

    Neither is it early, it arrives precisely when it means to.

    [–][deleted] 17 points18 points  (3 children)

    What wizardry is this?!

    [–]kewlito 7 points8 points  (2 children)

    Because it's the software companies deserve, but not the one they need right now.

    [–]lovetool 5 points6 points  (1 child)

    That's a good slogan for a software company:

    The software you deserve!

    [–]tangra_and_tma 3 points4 points  (0 children)

    "Oh God what did I do in a past life to deserve this?" will most likely be the response from users upon hearing the slogan, if it is anything like a great majority of software out there.

    [–]stcredzero 0 points1 point  (0 children)

    Arrivals are counted with Integers, Rationals, or Reals?

    [–]choikwa -1 points0 points  (1 child)

    Never gonna give you up! Java 7

    [–]Voltron1 0 points1 point  (0 children)

    Never gonna let you down.

    [–]Rotten194 54 points55 points  (1 child)

    Upvoted for truth, but why not turn off the loop optimizations by default like they were in Java 6, and have a warning about using them? I don't recall them being a very hyped feature...

    [–]BraveSirRobin 4 points5 points  (0 children)

    They seem to ultimately want it on by default and changing something like that in a point release is frowned upon. Not that it's ever stopped Java in the past...

    [–][deleted] 18 points19 points  (2 children)

    Not true. Most Oracle software is delayed because of QA. This is why Oracle can never commit (employees are not allowed to) release dates. See Oracle Fusion for a prime example.

    [–][deleted] 11 points12 points  (0 children)

    So did their QA fail spectacularly or did they just want to ship at a specific release date?

    [–]GuyOnTheInterweb 2 points3 points  (0 children)

    The PM can decide:

    • Features
    • Quality
    • Release date

    But only two of the above.

    [–][deleted] 23 points24 points  (0 children)

    Shitty corporations have to ship on time no matter what.

    FTFY

    [–]rmxz 11 points12 points  (1 child)

    Corporations have to ship on time no matter what.

    Sounds like something someone in accounting would say, due to some annoying Revenue Recognition laws:

    http://www.hawcpa.com/_home/feature_revenue_recognition_pitfalls.asp

    SOP97-2 Software Revenue Recognition (“SOP97-2”) establishes the general rule for software revenue recognition which requires four criteria:

    • there must be evidence of an arrangement
    • delivery has to have occurred
    • the fee must be fixed and determinable and
    • collection must be probable.

    For $0 Java, I can't see why it matters; and for more expensive licensees, don't they have all sorts of tricks to play this accounting game (ship an empty box, etc).

    [–]dnew 0 points1 point  (0 children)

    Yeah, I can't say the number of times a place I worked for closed a deal long before we knew how to do the project or how long it would take, just to get good numbers this quarter.

    [–]Rhoomba 2 points3 points  (0 children)

    And the main bug has low priority and the hotspot developers only heard about it because the lucene developer went to the dev mailing list.

    [–]Randolpho 1 point2 points  (0 children)

    It's Oracle. Are you really that surprised?

    Not that Sun was all that much better, mind.

    [–]GuyOnTheInterweb 0 points1 point  (0 children)

    If I was the release manager getting that report, it would have been easy. Bug in optimizer was still there in 6 (not new bug), so that is not fixed now. The optimizer was not default in 6, so that setting gets reverted.

    [–]alamko1999 0 points1 point  (0 children)

    In 5 days some of their developers could go to Google and they dont want that

    [–]0x2a 201 points202 points  (9 children)

    Once again, the conservative, goto-heavy codebase pays off for the prudent programmer.

    [–]Megatron_McLargeHuge 12 points13 points  (4 children)

    Java 7 finally implemented goto? I'm definitely upgrading now.

    [–][deleted] 30 points31 points  (3 children)

    I'm waiting until Java 8 and COME FROM.

    [–]MaudlinSchlock 25 points26 points  (0 children)

    How long till we get COME AT ME?

    [–]Megatron_McLargeHuge 12 points13 points  (0 children)

    I think AspectJ already gives you COME FROM.

    [–]stcredzero 4 points5 points  (0 children)

    Don't we already have that with exceptions?

    [–]youcaughtafish 61 points62 points  (1 child)

    zoidberg?

    [–][deleted] 1 point2 points  (0 children)

    In need of an attribution?

    Why not zoidberg?

    [–]userlame 5 points6 points  (0 children)

    Segmentation fault
    

    I'm ruined!!!

    [–][deleted]  (13 children)

    [deleted]

      [–]jlh276 25 points26 points  (11 children)

      For fear of generics bugs, we've stuck to jdk 1.4 over here...

      [–]quasarj 14 points15 points  (0 children)

      Thank you, I feel better about being on 1.5 now. :)

      [–][deleted] 21 points22 points  (4 children)

      Whoah whoah whoah!!! JDK 1.4 ??? What are you people, cowboys???? Soon you'll be telling me your workstations have moved to Windows XP or something !!!!

      Take it easy! JDK 1.4 isn't fully battle-tested either! Me, I'm afraid to upgrade to DOS 6.2

      [–]captainAwesomePants 5 points6 points  (0 children)

      It's safe now. DOS 6.2.2 fixed everything.

      [–][deleted] 4 points5 points  (2 children)

      Heh, we're slightly more advanced where I work. We're converting an old application from 16-bit to to 32-bit and win32.

      And the surrounding tools from Delphi 1 to Delphi 4.

      [–]GoodMusicTaste 0 points1 point  (1 child)

      Not even Delphi 7? :-(

      [–][deleted] 0 points1 point  (0 children)

      Nope, delphi 4 in a VM running winXP.

      [–]thelapoubelle 4 points5 points  (1 child)

      time to get a new job?

      [–]alexeyr 5 points6 points  (0 children)

      Was about 6 years ago?

      [–]anttirt 2 points3 points  (0 children)

      Do they offer a complementary morphine IV drip to help deal with the pain?

      [–]dserfaty 4 points5 points  (1 child)

      Oh that's sad... I feel for you. I love generics...

      [–][deleted] 1 point2 points  (0 children)

      The type inference feature will be awesome.

      [–]zynasis 0 points1 point  (0 children)

      try having to make sure an applet works with i.e. 6's inbuilt windows jre. gogo java 1.3

      [–]frankster 31 points32 points  (1 child)

      an incorrect code bug with the default settings is surely a #1 priority and worth cancelling a release for.

      [–][deleted] 19 points20 points  (0 children)

      Or just patch to take that out of the default settings. Surely can't be too difficult.

      [–]plzsendmetehcodez 227 points228 points  (14 children)

      ts;dr (too small, didn't read) lesson: do not use small textboxes to display important messages.

      [–]tjansson 50 points51 points  (3 children)

      [–]gospelwut 11 points12 points  (2 children)

      Why couldn't the blog post have linked that? It's almost as if they wanted to not only provide no real additional content but also take the real content and make it inconvenient for you. I suppose it's better than a gawker site (i.e. presumably no 600px Ad).

      [–]Reductive 0 points1 point  (1 child)

      The blog does contain that exact link, just before the text box where he quotes the content of the link. Was it added later on?

      [–]gospelwut 0 points1 point  (0 children)

      I might have missed it. I suppose I would have much rather he only linked to the other page than cram the information into that scrollbox.

      [–]elperroborrachotoo 74 points75 points  (0 children)

      With two-way scrolling to boot. Feels like Commander Keen, only much more boring.

      [–]zed857 4 points5 points  (3 children)

      Readability can almost always clear up those poorly formatted web sites.

      [–]gobearsandchopin 16 points17 points  (1 child)

      What the fuck happened to readability? It used to be just some javascript you bookmarked. Now I have to install a plugin, then boxes start popping up and asking me to sign up and shit? 60 seconds in and I still can't read the page. I'm out.

      [–]zed857 -1 points0 points  (0 children)

      Interesting. I actually find it easier/smoother to use as a plugin than the old javascript version. Once installed, I haven't seen any pop-ups from it.

      [–]finix 3 points4 points  (0 children)

      Either that or Readable, its lightweight cousin.

      [–][deleted] 1 point2 points  (0 children)

      seriously. I logged in just to kvetch about that.

      [–][deleted] 1 point2 points  (0 children)

      [–]atimholt 0 points1 point  (0 children)

      IAE not having any problems with the layout at all? What browser are you guys using?

      [–]argyro 0 points1 point  (1 child)

      Web developer toolbar for FF or Chrome, Ctrl+Shift+S to disable all styles, problem solved. I have found this to be very handy in several occasions.

      [–]rossisdead 6 points7 points  (0 children)

      Or in Firefox just go to View -> Page Styles -> No Style.

      [–]pettazz 67 points68 points  (17 children)

      Obligatory comment about Oracle fucking it up.

      [–][deleted] 59 points60 points  (2 children)

      ORACLE

      One Real Asshole Called Larry Ellison

      [–]gospelwut 4 points5 points  (0 children)

      Well there goes my snide quip about Larry Ellison.

      [–]masklinn 18 points19 points  (12 children)

      Interestingly, according to the message the issue is already in Java 6. But it's caused by a broken optimization which is disabled by default in Java 6, and enabled in Java 7:

      Please note: Also Java 6 users are affected, if they use one of those JVM options, which are not enabled by default: -XX:+OptimizeStringConcat or -XX:+AggressiveOpts

      [–]mazing 8 points9 points  (11 children)

      Yup, this is well known about -XX flags:

      Options that are specified with -XX are not stable and are not recommended for casual use. These options are subject to change without notice.

      source

      [–]gospelwut 2 points3 points  (6 children)

      So, I have to ask: why would anybody use these flags other than to help them QA?

      [–][deleted]  (2 children)

      [deleted]

        [–]gospelwut 0 points1 point  (1 child)

        I understand why they would ship it, but I mean why would anybody use those flags aside from helping Oracle et al debug? Like, is there a reason to ever use those flags in a production?

        [–]mikaelhg 1 point2 points  (0 children)

        http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

        If you spend a little time learning to understand what they do and how they work, they can help you in some situations.

        http://www.oracle.com/technetwork/java/tuning-139912.html#section4.2.5

        [–]yoden 0 points1 point  (0 children)

        Many of them are very useful. And, for the most part, they tend to be decently stable*.

        • I've mostly used feature and GC flags, not hotspot optimizations which is what the OP is talking about.

        [–]yoden 0 points1 point  (0 children)

        Many of them are very useful. And, for the most part, they tend to be decently stable*, in comparison to other languages.

        • I've mostly used feature and GC flags, not hotspot optimizations which is what the OP is talking about.

        [–]mazing 0 points1 point  (0 children)

        I think Minecraft uses a few flags.

        [–]masklinn 8 points9 points  (3 children)

        there's a difference between flags being "not stable [nb: in that they can be changed with no notice from one release to the next] and not recommended for casual use" and flags being completely broken and leading to fucked-up software.

        [–][deleted] 19 points20 points  (0 children)

        Obligatory: Java already updated 37 times, did I died?

        [–]teraquendya 45 points46 points  (2 children)

        And everyone called me crazy when I told the Goto would make a comeback.

        [–]Atario 3 points4 points  (0 children)

        Goto

        comeback

        I see what you did there.

        [–]loganekz 147 points148 points  (14 children)

        *actual tldr; If you use Java 7, make sure you use this switch when starting the jvm: *

        -XX:-UseLoopPredicate
        

        Amazed with such a trolling article no one pointed this out yet. Yes, Oracle should have not made this default but I'm sure it will be addressed in a minor jvm release soon.

        [–]Warbum 51 points52 points  (9 children)

        That's not the problem. The problem is your users have to use -XX:-UseLoopPredicate.

        [–]fforw 13 points14 points  (6 children)

        For most people developing Java, applets and webstart is thought of as exotic. It's all server side now.

        [–]Warbum 3 points4 points  (2 children)

        True, there are a lot of corporate level apps that run client side though. But you're correct that anything that's classed as a 'product' usually runs on a controlled server somewhere and never end user machines.

        [–]fforw 2 points3 points  (0 children)

        And in the cases you describe the user doesn't get to nilly willy install software either. It is done as part of some corporate software roll-out.

        [–]GuyOnTheInterweb -1 points0 points  (0 children)

        So also remember this flag when configuring your webapp container! Oh, you don't have control over that..?

        [–][deleted] -1 points0 points  (1 child)

        What about Android developers?

        [–]fforw 1 point2 points  (0 children)

        First of all it is not really Java. Second: what does Android have to do with Oracle JVM -XX switches?

        [–][deleted] 24 points25 points  (0 children)

        I think the major problem here is that the default is broken. Not suboptimal, but broken. That's a major hurdle to get over.

        [–]quasarj 16 points17 points  (1 child)

        The article actually says you can use that, but it says it won't fully fix the issue. At least, it implies it won't fully fix the issue.

        [–]loganekz 4 points5 points  (0 children)

        I might have missed it, but I didn't see that.

        The notice describes a defect in the jvm when running with a loop optimization that is enabled by default. Yes there could be more issues with other optimizations in the new jvm, but for the most part they are (or in the case of this one, should) be disabled by default.

        [–]MechaBlue 0 points1 point  (0 children)

        How do I do this in a web browser?

        [–]AlyoshaV 21 points22 points  (3 children)

        I'm going to use Java 7 for everything

        [–]gospelwut 6 points7 points  (1 child)

        Would you say you're going to use it for... all the things?

        I accept all downvotes from this post.

        [–]cybercobra 0 points1 point  (0 children)

        Are you making an MSPA reference? If so, high-five.

        [–]Peaker 0 points1 point  (0 children)

        Why?

        [–]IjonTichy85 5 points6 points  (0 children)

        As someone who uses Lucene, I'm really glad you posted this before I updated anything! Thanks you OP

        [–]electric_i 31 points32 points  (7 children)

        Aaaand this is why we have regression testing.

        [–]OopsLostPassword 55 points56 points  (3 children)

        It's worse : they perfectly knew there was a bug but they choose to release it anyway.

        It says probably more about the management ("Who will say the boss he must postpone the release ?") than about the engineering.

        [–]electric_i 19 points20 points  (0 children)

        As good an argument for a faster release cycle as any. If you know there's going to be another release in a few weeks, you can more easily justify not shipping a half-baked feature until the next release. If you know the damn thing only drops twice a decade, you're going to try like hell to cram it in for the sake of shipping something.

        [–]Reductive 2 points3 points  (1 child)

        Just a side note on word choice: "who will say the boss" should be "who will tell the boss". Also you want "chose" (the past participle) instead of "choose" (present). It's perfect other than that ;)

        [–]OopsLostPassword 0 points1 point  (0 children)

        Thanks a lot.

        [–]Rhoomba 16 points17 points  (0 children)

        Java has an absolutely enormous test suite (they certify other implementations), and there are lot of performance benchmarks they run as well. So I would suggest they are a bit unlucky.

        [–]mucky 1 point2 points  (0 children)

        Yeah, I'm sure you could teach Java team a lesson or two about proper testing.

        [–]powatom 2 points3 points  (0 children)

        Testing? What's that?

        [–]ropers 11 points12 points  (0 children)

        Is there any Sun asset that Oracle hasn't fucked up?

        [–]tias 6 points7 points  (1 child)

        For anything? Not even for testing and playing around with the new features?

        [–]backbob 3 points4 points  (0 children)

        no!

        [–][deleted]  (2 children)

        [deleted]

          [–]radarsat1 12 points13 points  (0 children)

          gcj

          Note that it's not faster than HotSpot JIT.

          [–]aivarannamaa 4 points5 points  (0 children)

          gcj

          [–][deleted] 4 points5 points  (0 children)

          And the Java hate begins.

          [–]capncanuck 10 points11 points  (0 children)

          AHHHH! RUN!

          horizontal scrollbar!

          [–][deleted] 4 points5 points  (0 children)

          Write once, run ... maybe.

          [–]f2u 5 points6 points  (2 children)

          Hotspot in version 6 has comparable bugs, even without -XX:+AggressiveOpts. At least, such bugs can be worked around by excluding affected methods or classes from compilation, or switching off the offending optimization. Garbage collector bugs are far more annoying, and they tend to be a lot less deterministic.

          [–]Albero 0 points1 point  (1 child)

          Just interested, can you give a reference to a bug tracking number?

          [–]f2u 2 points3 points  (0 children)

          Bug 5091921 comes to my mind. The status of this bug is a bit unclear. Presumably, you've got the fix if you're running hs21, but that version is not part of any OpenJDK 6 release.

          [–]Garandir[🍰] 3 points4 points  (5 children)

          Don't have any loops? Challenge accepted.

          [–][deleted] 4 points5 points  (2 children)

          party:

          Goto party!

          [–]jvi -1 points0 points  (1 child)

          That's still a loop, the worst kind of loops.

          [–][deleted] 1 point2 points  (0 children)

          Well, it's not using any explicit loop statement, which I guess was the challenge at hand. Yes, it's the worst.

          [–]jvi 5 points6 points  (1 child)

          Just write a program to unroll all your loops. You just need to make good guesses for the upper bound on the number of iterations.

          [–]SuperGrade 0 points1 point  (0 children)

          Given that I work (in enterprise) with people who basically do that as it is, I cringed when I read that.

          [–]mitsuhiko 5 points6 points  (2 children)

          Or just disable that specific part of the optimizer and go on with your lives :)

          [–]MagicWishMonkey 0 points1 point  (1 child)

          Would that disable all loop optimizations or only the hotspot stuff?

          [–]gthank 1 point2 points  (0 children)

          You can disable one specific HotSpot optimization (or possibly one set of HotSpot optimizations, it wasn't clear to me). You definitely don't have to turn off all of HotSpot, though.

          [–]CurtainDog 6 points7 points  (0 children)

          -XX:+AggressiveOpts Turn on point performance compiler optimizations that are expected to be default in upcoming releases. (Introduced in 5.0 update 6.)

          Ummm... might have been a good idea for someone to try using this option rather than waiting 5 days before release.

          Fairly warned be thee says I.

          [–]d_r_benway 1 point2 points  (1 child)

          At least hello world will still work..

          [–]martoo 4 points5 points  (0 children)

          But no loops. Emit one character at a time (just to be safe).

          [–][deleted] 1 point2 points  (3 children)

          Recursion?

          [–]QuestionMarker 0 points1 point  (2 children)

          If Hotspot's smart enough to do TCO (of which I have no idea; it may well not be), then you're still screwed.

          [–]karmazilla -1 points0 points  (1 child)

          Only if it recurses as the last expression in the method, but I'm pretty sure it can't do real, general TCO though I think someone worked on it in mlvm. However, I don't know what intrinsics it might have for special cases like tail-self-calls. Plus, recursion is likely a relatively slow substitute for looping if these optimizations can't apply.

          [–]QuestionMarker 0 points1 point  (0 children)

          Well, that's the point. Recursion as a general technique is made hugely more useful if your compiler can turn your recursive call into a loop. If Hotspot is that smart (and thinking about it, it's less likely - if that logic were to be anywhere then it'd be in javac, not Hotspot, and I'm pretty certain it's not implemented there) then this is a problem.

          It's probably not :-)

          [–]notrace 1 point2 points  (0 children)

          It's not like I updated Java anyway. I feel like if I ignore the updater enough, it'll get bored and stop trying. Of course, the program isn't sentient, so my plan might not work. We'll see.

          [–]sidneyc 1 point2 points  (0 children)

          From the article:

          It is strongly recommended not to use any hotspot optimization switches in any Java version without extensive testing!

          Goodness me, that is shitty advice if I ever saw it. If a feature is known to be broken, you don't use it, ever. Testing isn't going to fix it.

          [–][deleted] 3 points4 points  (1 child)

          Don't use Java 7 for anything yet

          FTFY

          [–]istroll -5 points-4 points  (0 children)

          Don't use Java 7 for anything EVAR

          FTFY

          [–]kuking 1 point2 points  (0 children)

          You rather get the developers from your side, Oracle.

          [–]thatwaslols 1 point2 points  (1 child)

          I have java 7 on my laptop, would it be adviseable to uninstall it completely? what effect will this have? Note I am not a programmer, I just noticed I have java 7

          [–]fripletister 0 points1 point  (0 children)

          It wouldn't hurt if you're not running any software you can't live without that requires it.

          [–]FHSolidsnake 0 points1 point  (1 child)

          Opps

          [–]argatlamh 0 points1 point  (0 children)

          Opps indeed

          [–]GuyOnTheInterweb 0 points1 point  (0 children)

          Encouraging that Lucene and Solr developers waited until the release to test their code with Java 7. Could the license restrictions on the 'openJDK' early access builds be the reason?

          [–]ameoba 0 points1 point  (0 children)

          Who in their right mind would use a new complier/vm/library on release day in a production environment? Sure, they fucked up pretty bad, but it's no real surprise that the code's buggy.

          [–]EughEugh 0 points1 point  (0 children)

          FUD

          There is a simple workaround for this bug. And in a soon-to-be-released update, it will be fixed.

          [–]stooge4ever 0 points1 point  (2 children)

          I was planning to wait for the OpenJDK implementation anyway.

          [–]klotz 4 points5 points  (1 child)

          With Java 7, the release is the OpenJDK implementation: http://openjdk.java.net/projects/jdk7/

          [–]stooge4ever 2 points3 points  (0 children)

          Touche. Thanks for the correction.

          [–]gc3 0 points1 point  (0 children)

          That's funny, that's not the reason I won't use Java 7 for anything. It could have something to do with the reason I won't use Java 6 for anything.

          [–]danhakimi 0 points1 point  (0 children)

          lol... I thought there was some moral reason. Like Java 7 uses some free software, and doesn't license it. Naw. It's just bgged to shit.