
Greatest Java apps - miked85
https://blogs.oracle.com/javamagazine/the-top-25-greatest-java-apps-ever-written
======
the_arun
To this list we could also add Cassandra, ANTLR, Spring Framework, JUnit,
Jetty, Tomcat, Android etc. The list continues. The beauty of Java is not
Java/Programming language - but JVM. It inspired people to make other
languages such as Scala or Kotlin.

~~~
DaiPlusPlus
I don’t know if I’d celebrate Spring... and Oracle would rather Android use
“real” Java, not Dalvik.

The JVM was nice at the time, but I feel that languages like Scalia and Kotlin
exist because Java was too conservative - and many of Kotlin’s great features
had to be implemented using hacks and tricks to work-around the JVM’s now-
primitive type-system. Also note that Kotlin can now target other platforms
besides the JVM.

I think we can all agree the JVM is lagging behind the CLR, and the CLR is
behind where we should be (when looking at the things that Clang is capable
of)

~~~
pron
That other popular Java-platform languages exist indeed shows that the Java
language is too conservative _for some_ , but that 90% use the Java language
shows that its design is in line with what most people want.

And the CLR is about, oh, ten-fifteen years behind OpenJDK in compilation, GC
and low-overhead deep profiling and observability. OpenJDK's C2 compiler is
pretty much on par with clang in terms of optimisation [1] -- ahead on some,
behind on others -- and in terms of sheer innovation and potential, its Graal
compiler is probably the biggest breakthrough in compilation of the decade.

[1]: [https://youtu.be/0yrBuPiGk8I](https://youtu.be/0yrBuPiGk8I)

~~~
DaiPlusPlus
I know the CLR’s runtime performance has room for improvement- but I’m
referring to the CLR’s capabilities and “language-enabling”-feature-set.

~~~
pron
Its "language-enabling" feature set sucks. Reified generics for reference
types force C#'s variance model on any CLR language that wants good code and
data interop, and there is no portable good lightweight concurrency primitive.
Sure Java is missing some important stuff like value types and tail call
elimination (I don't think the CLR has the latter, either), both being
addressed, but the CLR suffers from some early decisions that are nearly
impossible to fix even if MS did show it had the inclination to fix them.
Overall, Java is a more compelling compilation target than .NET, and Truffle
is making it so much more so.

------
tannhaeuser
In praise of Lucene, it's stated that

> _Wikipedia replaced the Lucene engine with Elasticsearch, a distributed,
> REST-enabled search engine also written in Java_

Elasticsearch is still using Lucene as core search engine though, so all that
was replaced is the custom job control and wrapping around Lucene (SOLR?) by
the one that Elasticsearch provides I guess.

~~~
amaccuish
I gave up on lucene and solr on my dovecot server because of memory usage and
use [https://github.com/grosjo/fts-xapian](https://github.com/grosjo/fts-
xapian) instead

~~~
nicoburns
You may also be interested in [https://github.com/tantivy-
search/tantivy](https://github.com/tantivy-search/tantivy)

------
cageface
I'd nominate Bitwig for this. The UI is written in Java and is one of the
nicest DAW interfaces around. The stuff they've been doing in the modular grid
lately is particularly impressive. The fact that it's in Java means it works
great on Linux too.

[https://www.bitwig.com/en/home.html](https://www.bitwig.com/en/home.html)

~~~
jmartrican
Does it use JavaFx for its UI? If not do you know what library/framework they
use?

~~~
callmeal
I could be wrong, but at first glance, it looks like Eclipse's SWT.

~~~
JonathonW
Looks like JavaFX or Swing to me-- SWT doesn't really do themed widgets
(everything looks like the platform's native controls).

------
altcognito
Lucene? Android :) Tomcat? Maven?

The Minecraft coding community is amazing. What they get done without
documentation is stunning.

~~~
tlarkworthy
It's funny how Java is not considered a good language for games... yet Java
managed to snag one of the most important games of the decade in the end

~~~
Orphis
It's really not great. Doable, but not great. That's why they moved to a
classic C++ codebase instead on other platforms.

On a side note, I worked on Jpcsp, a PSP emulator in Java. Great for research
and doing refactoring in the code quickly, not great for performance, even
with a JIT. We wrote later PPSSPP in C++, performance was there quite easily.

~~~
iamcreasy
> It's really not great.

Could you provide some more information on what it was not great?

~~~
mumblemumble
For games, probably the worst thing about Java, especially if you're still on
Java 8, is the garbage collector. Its pause times can be brutal. This won't be
noticeable for games that aren't too hard on memory, or games where framerate
doesn't really matter, but it was definitely noticeable (and annoying) in
earlier versions of Minecraft.

On Java 11 or later, I wouldn't expect it to be nearly such a big deal. At
least not relative to some other issues. For example, it being a reflective
language means that there's a fair amount of memory overhead that's really
only there to support features that aren't so useful in games development.
Also, there's a fair bit of overhead, in terms of both CPU and memory churn,
to making calls into native libraries from Java. Nowadays, neither of those is
a big deal for a large swathe of games, either, so I don't think one can
really make a blanket statement that Java is not great for games development.

~~~
mooman219
The "Java is bad for games" mindset is in part just historical bias.
Performance and GC are thrown around as shallow excuses for comparing
idiomatic Java with game design C++. Actually applying methods to reduce
memory pressure like using arenas, and accepting vectors to mutate instead of
creating new ones solve most of the GC penalty you paid for not having to
think about it while prototyping. Large servers in java minecraft patch the
server to do just that, and they operate well. I think the biggest barrier for
Java in Games is the stigma and lack of resources relative to C++.

~~~
smabie
Yeah, of course Java can make games. Hell, even some high frequency trading
shops are using Java. But the amount of effort you have to put in to twist a
language and ecosystem that is practically designed around frequent allocation
is just not worth it. Like, if you're writing zero allocation Scala or Java
you're going to be writing C/C++ in the first place.

Might as well just use C/C++ instead of fighting the ecosystem tooth and nail.

~~~
iamcreasy
> But the amount of effort you have to put in to twist a language and
> ecosystem that is practically designed around frequent allocation is just
> not worth it.

Do you an example in mind? Unity3D uses C# which is a garbage collected
language.

~~~
smabie
And as anyone who as played Unity games would attest to, the performance is
terrible. There's a reason why UE is much more popular than Unity for triple-A
games.

Take Escape From Tarkov, an FPS that tries to be a AAA game and uses Unity.
The performance problems that game has is frankly staggering.

~~~
iamcreasy
But the shear volume of successful games built by Unity suggests that the
extra work comes with a GC'ed language is worth it.

~~~
smabie
I mean, I don't think anyone is saying languages with GC are bad for a wide
genre of games. They just are inappropriate for the most cutting edge,
performance intensive games.

Unity is a lot easier to get started with than UE4, so I understand the
popularity. But for some games, the player can really tell how inappropriate
the engine is. You can feel the GC churning away: poor performance, high
dispersion of fps, frequent stuttering, etc.

While any game using any engine could have these problems, it's especially
prominent in unity games.

------
cletus
So what's funny to me is how Oracle here is bending over backwards not to give
Google credit for pretty much anything. It's actually hilarious.

I laughed at Eclipse Collections. What? No mention of Guava, even though it's
used way more. It's practically part of Oracle's copyrighted Java API.

but of course the most hilarious omission is, of course, Android. And you can
say "blah blah Dalvik VM blah blah" but... it's Java.

And I have to say a word about IntelliJ (and Jetbrains IDEs more generally).
They're the standard by which I judge every other IDE. To put it another way,
they're the reason every other IDE makes me sad. Even VS Code.

~~~
pjmlp
I have used Java on and off since 1998, am yet to ever touch Guava.

Android Java is Google's J++, with its half baked Java 8 compatibility, and
deserves the same treatment that J++ once had.

~~~
suyash
Android Java != Java so no credit needed to be given. Though Google does make
Java contributions in other libraries and projects which is very welcome by
the community!

~~~
pjmlp
Their wrongdoings with Android to the Java eco-system are more harmful than
whatever contributions they might have done.

------
rando231
Sort of mystifying that ByteBuddy (a library) is included while Spring
framework is not. I realize that some people point to the edges of the Spring
ecosystem as proof that it is low-quality, but it's hard to argue against the
framework itself being great.

Edit: To clarify, I also don't agree with 'proof' of Spring being 'low
quality'. In my experience most who criticize Spring don't understand that it
is a loosely coupled collection of things implemented on top of IoC/AOP, and
are frustrated when they are forced to diagnose things that go wrong. From the
beginning, Spring moved fast because it wasn't bogged down in committee, and
it covers huge portions of software development. Quality does vary between the
value add sub-projects, but it's amazing what the Spring community has done
with IoC/AOP.

~~~
javajosh
Yes, Spring is good, and in general there's been a lot of innovation started
in Java and spread elsewhere. The whole "Dependency Injection" idea started in
Java, and a lot more stuff started there too, or at least was popularized
AFAIK. For example, pattern languages themselves. But some great libraries
like JodaTime came from there, as did Doug Lea's very nice rendering of better
concurrency primitives - and both of these ultimately got into the core
library itself.

~~~
noema
Wasn't the "Gang of Four" book written entirely in C++?

~~~
javajosh
Yes; that's why I added the caveat "or popularized".

------
jmartrican
What are the odds that a language known for its use in boring enterprise
software is the language used to create the most popular video game in history
(Minecraft). If C++ was a person it would be mad/salty at this fact.

~~~
the_af
And yet people here on HN have told me in recent threads, when discussing
Java, that:

\- Java is not suitable for enterprise software (yes! Some people here
actually believe that).

\- Java is not a good general purpose language (but Minecraft was written in
Java. Or even better, the list of very varied apps from this article shows
it's indeed a good general purpose language).

What these people actually mean is "I don't like Java". Because Java hasn't
been "hip" for years, this makes people claim all sorts of absurd things about
it. Things that directly contradict known history.

~~~
bzb3
The performance of the Java version of Minecraft is so terrible that the
entire game had to be rewritten to be played on consoles.

Minecraft was not popular because of Java, Minecraft was popular despite Java.

~~~
the_af
That's highly debatable, not a point of fact.

And the rest of the apps from the article? Are they also successful "despite
Java"? At which point are you willing to admit that maybe Java was suitable
for general purpose programming? Which amount of evidence would convince you?

~~~
bzb3
What's debatable, that the Java version of Minecraft had terrible performance
or that the console ports are not written in Java?

About your other question: I only mentioned Minecraft.

~~~
recursive
The point that's debatable is the point you led with, that Minecraft "had" to
be re-written because of poor performance.

Not that it was.

------
maltelandwehr
Today I learned that almost every IDE I have ever used is written in Java.

~~~
smabie
And now you understand why none of them work very well!

~~~
mikeyjk
I laughed, but PHP Storm and IDEA are very good tools imo.

Netbeans was quite good when I used it as well, although clunkier.

They can be very memory hungry though (of course).

------
ce4
The list generates some mixed feelings - #16 for example, where the
inventor/maintainer got driven away by Oracle's acquisition of Sun and forked
Jenkins from Hudson.

~~~
jillesvangurp
It's obviously and understandably a bit biased. There are a few omissions:

No mention of anything mobile even though there are a few billion phones out
there running Android with a huge app ecosystem of Java and Kotlin based
stuff. Of course, that's a non Oracle flavor of Java as Sun sort of lost the
plot on the J2ME front (another omission). J2ME was of course more successful
than applets ever were until Android happened.

Listing Eclipse and Netbeans (1 bullet) before Intellij (arguably more popular
than those two combined) is also a bit weird. In any case, Intellij has
largely switched to Kotlin, which is of course a language Jetbrains, the
creator of that IDE helped create to replace Java. So nice that they still get
a mention. But really, that whole ecosystem is now powered by Kotlin more than
Java.

Spring/Spring-boot is another painful one for Oracle because it largely
sidelined J2EE related products and standardization. Tomcat and Jetty sort of
survive as low level components you can optionally use to run that. The Spring
ecosystem is shifting to Kotlin rapidly as well. As is Android, of course.

So, it's understandable why Oracle prefers to not talk about those because
these are all examples of where Java was successful but Oracle/Sun wasn't.

~~~
pjmlp
I look forward to JetBrains replacing the JVM and its standard library, and
GraalVM in the process, given that Kotlin is so good.

------
yashap
Not really “apps”, but Java features prominently in the backends of many major
tech companies. Off the top of my head, I believe it’s the main server-side
language at Amazon, and one of many prominent server-side languages at Google,
Netflix, Apple and Uber.

~~~
suyash
What do you mean by "apps" then? Ofcourse any modern app will have mix of
technologies, I think it's fair to call it "app" \- perhaps an Enterprise Java
App or Backend Java App to be exact.

~~~
yashap
When I think of an application, I think of something used reasonably directly
by an end-user. From the linked article, things like IntelliJ IDEA, the
Maestro Mars Rover controller, Minecraft, Hadoop, etc. Admittedly, this is
just my personal definition, "app" is a pretty loose term.

For, say, the "Google Sheets web app", I'd say the entire piece of technology,
frontend and all backend services, combine together to provide an application.
But if the Google Sheets web frontend depends on, say, 20 different backend
services, I wouldn't say that any one of those services is an app on its own.
Each service makes up a part of the backend of one-to-many apps. And, from
what I know of Google's tech stack, different services might be written in
different languages - primarily Java, C++, Python or Go.

------
lukashrb
I like to add clojure it is written in Java, so I guess it counts.

But seriously what do you like about Java and why did you choose to work with
it? What problem does it solve for you? I'm curious! (don't comment when you
don't like it)

~~~
suyash
Established best practices of good software engineering, vast selection of
libraries for pretty much anything, high performance code, cross platform
availability, scalability. Pretty much anything you need to build a solid
backend exists here and not to mention the large Java dev community.

------
listenallyall
H2 database is pretty awesome. Such a pleasure to use vs SQLite and even vs
some large-scale RDBMSs.

~~~
codr7
Second that, I used H2 as the basis for a time reporting/invoicing system that
has been runnin without issues for 7 years now.

As far as SQL databases go, definitely my best experience, it just works.

------
diroussel
I suspect the greatest java apps are the ones that can't be written about. The
ones that run in a data center, that are a tremenous advantage in the market
to the companies that run them. These are so important to the app owners, that
they don't want others to know about them.

------
tyingq
I'd have to give Tomcat the #1 spot for killing off the worst parts of J2EE.

~~~
dreamcompiler
OMG. I've set up Confluence servers and Tomcat was the most nightmarish part
of that experience. The idea that Tomcat was an actual _improvement_ on
something sends shudders up my spine.

~~~
tyingq
You would have had to lived through a full blown J2EE app on
Websphere/Weblogic/JBoss to appreciate it.

~~~
ralphc
OMG yes. So many times all you needed was what Tomcat delivered, but had to go
through the convoluted and slow config of WebSphere. WebLogic was better but
that's damning with faint praise.

------
throwaway889900
No mention of Runescape, Classic, 2, and OSRS? I suppose "applets" covers it
but I think it needs its own mention.

~~~
shpongled
That is exactly what comes to mind for me when I think of "Java games".
Absolute classics

------
cerberusss
I'm not surprised that Vuze (or its clone/successor BiglyBT) is not there. But
it's one of the oldest desktop torrent clients, and is still being developed.

------
zulu314
I find it a little weird to mix applications and libraries in the same list.
But if libraries are considered, I would definitely nominate Hibernate: the
most powerful ORM out there accross all languages, and it's been a must grab
for any of my projects for almost 2 decades.

~~~
Keyframe
I haven't been much of an ORM userm but what makes it so special? Anything
comparable in Javascript or Python land?

------
LockAndLol
They might not like being associated with it, but JDownloader is amazing Java
software. It's fast, looks good, integrates with all desktop environments I've
used and still works impeccably.

I wish Java had a solution for web+platform UIs. Webapps that then run in
Electron is by far the most annoying thing I've had to deal with as a user.

------
mark_l_watson
I was surprised how much I enjoyed reading that, in a memory lane sort of way.

I haven’t used Java in a long while and I haven’t updated my book “Practical
Artificial Intelligence Programming With Java” in many years. I decided to
rewrite rather than stop distributing the book. I started the rewrite about
three weeks ago. First step was tossing out about 1/3 of the material,
stressing machine learning, adding probabilistic programming, and updating the
semantic web material.

After taking a whole day getting my head back into coding in Java, I am
actually enjoying it. I still like Common Lisp and Haskell a lot more.

------
dxxvi
After reading this, I think I need to learn Eclipse Collection and Micronaut.

~~~
anhldbk
There's a competition between Micronaut vs Quarkus also. Pls have a look

~~~
blandflakes
Helidon follows behind, but yes I agree that Micronaut and Quarkus are
probably front-runners for this space.

------
rayalez
I'm planning to get a Masters degree in CS, and it bothers me that the program
I chose uses Java as the primary language. They have an awesome theoretical
curriculum, but it looks like I'll have to use Java to complete all the
practical tasks.

I'm a Node/React web developer, I want to build a SaaS startup, and I'm not
really interested in writing Java apps, I doubt I'll ever want to use it for
something.

Do you guys know if Java would be really painful to learn? It's hard to get
motivated about learning a thing I'll probably never use in practice.

~~~
rando231
You will probably learn many languages in your career. Most of the
understanding you'll gain will apply across languages, so I wouldn't worry
about it being a waste of time.

Learning Java should force you to understand object oriented design, as it is
hard to do anything well in Java without it (though some try). While there are
signs that OO's domination is nearing an end, there are reams of code out
there that require a good understanding of it.

------
captn3m0
>Some credit Minecraft’s early success to the fact that players could play in
a web browser via Java applets rather than having to download and install the
game.

I never knew this was possible

~~~
tangent128
It was possible with the early, finite-world-creative-only "Minecraft
Classic", but as long as I remember (I started playing mid-Alpha, a few months
before the Nether was added) the game was played through the launcher.

------
tolger
I say this as a Java developer, but I hate UIs written in Java. Native UIs are
always superior. IntelliJ comes to mind. I used it for many years, and it
always felt "different". There were weird inconsistencies in rendering, focus
and behavior that were annoying. Same with NetBeans.

On the other hand, I think server side Java is still great.

------
flybyair2048
It's great to see our team's tool, Deep Space Trajectory Explorer, come in at
#2! DSTE is a custom software tool that's being used by NASA Johnson Space
Center to design/visualize complex orbits for upcoming missions to send
astronauts to the Moon in 2024+!

------
ascotan
Jenkins the greatest Java app ever written .... hmm

------
renw0rp
Wasn't Google docs written using GWT?

~~~
cromwellian
Originally no, but it was written with Closure Compiler which is a Java app.

These days Google Docs, Gmail, Spreadsheets, Hangouts, etc are hybrid apps
that contain a core written in Java and was transpiled with GWT but now use
J2CL.

------
edgarvaldes
I use Pentaho Data Integration every other week, it's quite nice for ETL.

------
black_puppydog
For reference, this is what that page shows when opened with uBlock Origin +
uMatrix: [https://imgur.com/a/yd9OAPB](https://imgur.com/a/yd9OAPB)

This might be confirmation bias, but I actually think it conveys pretty much
what it should. :)

------
GoblinSlayer
Also Azureus, featuring legendary laggy java gui.

------
jordache
No mention of Android? lol butt hurt

~~~
capableweb
I guess it´s because Android is not mainly consisting of Java code, unlike for
example Minecraft. Correct me if I´m wrong, but isn´t Android made with mostly
C and C++?

~~~
jcfrei
Kernel (Linux) and android runtime (previously dalvik vm) plus some native
libraries are C(++). The rest of the stack running in the user space is Java
though (with support for native code).

~~~
zamalek
They are slowly moving to Dart, but the lions share is still Java. My guess is
that they are trying to get away from the reach of Oracle lawyers.

~~~
pjmlp
Tell that to the Android team busy replicating Flutter in Kotlin.

~~~
zamalek
Pardon my faux pax. The point was that the move is away from Java, whether
Dart or Kotlin.

~~~
pjmlp
Waiting for them to rewrite Android Studio in Kotlin and the complete Android
infrastructure that depends on OpenJDK for the emulator and AOSP builds.

~~~
randompwd
[https://www.jetbrains.org/intellij/sdk/docs/intro/intellij_p...](https://www.jetbrains.org/intellij/sdk/docs/intro/intellij_platform.html)

> The IntelliJ Platform is a JVM application, written mostly in Java and
> Kotlin

Pretty sure Kotlin was birthed to address issues they ran into while
developing IntelliJ

Android Studio is built on Intellij.

~~~
pjmlp
Still depends on JVM and Java, if Kotlin is so good they can certainly reboot
their eco-system using Kotlin/Native.

------
johnklos
So not impressed. Still waiting for, "write once, run anywhere" to actually
work.

~~~
fian
I worked on a Java desktop app, that had a highly complex UI written in Swing,
for ~14 years. We only officially targeted Windows as a platform. For a few
years I switched to a Linux development machine. The only code change required
was for our third party license dongle - to reference the correct native
library needed for machine fingerprinting. We also ran it on another
developers Mac just to see if we could - again we only had to comment out the
licensing code and it works flawlessly.

So from that experience I would say Java definitely lived up to Write Once Run
Everywhere. FWIW we used the Nimbus Look and Feel. Other LAFs may not have had
as much polish applied.

