I’ve worked for a company called Smurfit Kappa and one of the companies they supply to, P&G Gillette, uses a forecasting system developed in Java for the Web, in other words, a Java applet. It’s bloody slow, and that’s my experience. Just for scrolling, I have to wait about 5-10 seconds just for the screen to update on MODERN hardware. Technically, it is a virtual machine running on a web server, so obviously it’s going to be slow, but you shouldn’t have to put up with that in this day and age, and people should not be developing applications in technology that should have been replaced decades ago.
I can’t say much on the side of Python, because I have no experience with it.
Also, when I say business critical solutions, I’m talking about software in a world where customer’s are impatient. When you’re a big company with a backlog of requests/queries that need to be dealt with, the slower the software the slower customer queries will be handled. Now, as I’ve said, if you don’t care about performance all that much you can probably get away with a garbage collected language as long as you code sanely. That is, even if some of the memory management is taken from you, you can still create memory layout that performs best in your given circumstances.
However - and there is always a caveat when it comes to software - garbage collection for high performance software is simply no good. There is a reason why AAA games are developed in C++ and almost always will (unless Jonathon Blow’s language can convince them otherwise), because in video games with high performance graphics where you have to move memory as fast as possible into RAM, the GPU, the CPU etc. a garbage collector will get in the way of that process.
Also, Unity3D’s engine is developed mostly in C++, which obviously is not - overwhelmingly - going to be garbage collected. You can make good looking games in Unity3D but certainly not on the scale of a AAA game, although it is possible if you put in a decent effort, use your own assets and shaders, and replace the standard launcher most Unity3D games come with. Yes, games are developed in C# using Unity3D, and also guess what: most of them are trashware. There are very few Unity3D games that have stood out that I know of, but feel free to name some.
One other thing to note about garbage collector’s: some will track everything you declare, using “smart” pointers to follow them around until they are “no longer in use” so to speak and make them “dormant”. I mean, a garbage collector that has to use up more memory and more CPU in order that your memory is “managed” properly. And yet people are still convinced they will make your applications more efficient.
This is WAAAAAAY too off-topic and apologies for derailing this far, but some things just have to be said.
But, to repeat my point again: if you don’t care about memory - perhaps you’re still learning or you need a tool that will get things done fast for you - then by all means use a garbage-collected language. Doesn’t mean you should use it for serious software that you intend professionals to use.
I’m going to stop ranting now. Hope you enjoyed
Edit: Unless you are calling Managed code in C#, most of your C# is actually not garbage collected. Source And since most of the C# code in Unity3D are calls to the Unity3D engine developed in C++, most of the code you write in C# is unmanaged and therefore the Garbage Collector is hardly ever invoked unless you touch the CLR and the .NET APIs. The C# language, minus the CLR and .NET API calls, is not garbage collected. I suspect if you used purely the Mono Runtime and its API (which I don’t think uses .NET/CLR code for systems outside of Windows) you wouldn’t touch the garbage collector at all.
You can also mark your code unsafe
meaning you can start using pointers and managing memory yourself. C# is a rather nice language if you can put up with all the warnings the C# compiler throws at you for managing your own memory.