Executives at Sun Microsystems on Tuesday offered a glimpse of its Java roadmap through 2006, when its “Mustang” revision is scheduled to debut. eWEEK has a Java special too. Elsewhere, Hewlett-Packard and Dell Computer will be shipping the latest version of Java with their PCs and laptops running Windows and Linux, said Rich Green, vice president of developer platforms at Sun Microsystems. Also, there will be no macros for the Java language, it seems.
Seems like you live exclusively in Microsoft’s box. Fine use .net. I build software, which I would like to run on a variety of operating systems, so .net isn’t an option.
Jesus! Nothing is perfect.
Java between 1.1 and 1.4 didnt add anything to the language itself. 1.4 added a few things. 1.5 will add more. Why would you expect a program written for 1.5 features to run on an older VM? That makes absolutely no sense. And it was easier for MS to “get it right the first time” when having Java’s growth to look at as an example. That being said they will be adding features to the next version of C# and it will be interesting to see if those will be useable on an older version of the .NET runtime. Java is not inherently slow. You’re talking out of your ass about that. The fact that you might not know how to write a Java program that isn’t slow isn’t the fault of the language. .NET isn’t faster than Java and its not a superior technology. They’re pretty much the same damn thing for all intents and purposes.
I agree with Sun’s decision, to break backwards compatibiltiy (though it will still be compatible to an extent) I also agree with your look and feel point, though that is not such an issue and SWING could be changed to do what you want without too much overhead.
Anyway, i woul djsut use Qt for java, native look and feel and integration on all platforms plus its a hell of a lot faster and evn easier to write and maintain.
Still Sun’s plans look very bright for java.
“every version adds news features and breaks backwards compatibility with previous versions”
In my experience, this is NOT true. What happens is that code written for MS’s poluted Java implementation sometimes doesn’t work on a correct VM implementation (=all the others), exactly what MS wanted to happen.
“the simple solution is to use native GUI controls instead of making your own but Sun wasn’t smart enough to do that.”
Use SWT or wxWindows (http://www.wx4j.org/) then !
“I will consider java as on par with .NET but for now it is clearly inferior technology”
I don’t see why Java is inferior? Do .NET applications run on Linux, Mac, Solaris, BSD ?
why do i keep getting modded down? i guss what i am saying is too controversal, hence “flamebait”. whatever, i have an opinon that i would like to express. i will try to keep controversal things out and get rid of direct comparisons, so hopefully u will not mod this down
i just do not think that tiger will take off. the installed base of java is huge, and microsoft worms and security holes have proven that people will not upgrade. only now is sun adding an autoupdate feature, and even that is too buggy to be released by their own admission!
since u cannot use tiger features in older vm it is essentially a new language. u cannot develop for tiger until people have tiger, and people will not get tiger until there are applications that need tiger. it is self-defeating cycle, unfortunately.
I thought .net is the new industry standard, since it is much faster. In fact Java is emulated, since it is byte-code, where as .net programs are .exe which means they run at full speed.
u are wrong about .NET
.NET is faster due to Global Assembly Cache, NOT because they are named .EXE
.NET uses bytecode just like java, except .NET bytecode is MSIL, and u can compile any language to MSIL
just because it is called EXE doesn’t make it native code!
.net runs on many platforms thanks to MONO
http://www.gomono.com
this is mainly for linux, but java is not as portable as people claim, for example java does not work on freebsd, and microsoft is porting .NET to freebsd themselves. freebsd user can look forward to running .NET programs before they can run java
i hear u can run MONO on MacOSX too
each time u start java program it has to rerun through JIT compiler and this means programs take longer to execute. to say slow performance is fault of the programmer is not putting the blame where it belongs. sun’s solution was hotspot which is hybrid interpreter/jit compiler, but the bottom line is each time u start a java program it starts from scratch figuring out how to run that bytecode on your computer.
how to get rid of this slowness? cache the compiled code, which .NET does with global assembly cache
“I thought .net is the new industry standard”
– MS .Net isn’t a standard. Some parts of it are but its the equivalent of saying MS IE is a standard because HTML is.
“since it is much faster”
– Thats debatable, on windows (but problably true), but how fast is it again in OS X and *nix systems?
“.net programs are .exe which means they run at full speed”
– .Net programs use MS’s version of bytecode. If it was native code then it wouldn’t be portable.
Last but not least: Global Assembly Cache has NOTHING to do with performance or speed and only needs to be applyed to .Net. Look it up on google.
u do not understand global assembly cache.
assemblies in the global assembly cache are stored in native code. u can have ur whole application stored there either the first time u run it or at install time if u want it. by storing native code instead of bytecode the programs run faster.
how about u look up something that says otherwise instead of asking me to use google. sheesh.
I use an iSeries box and it supports Java (no Mono or .Net). It’s a server and the VM was optimized as such.
1) Java programs are installed using the standard J2EE containers.
2) During install, the Java code is ran through an optimizing compiler to convert it into a native appliaction. This native application is stored for later use; this is also why the iSeries has one of the highest benchmarks for running Java applications.
Note that these implemations changes are due to IBM changes to the base Sun Java VM; this can be done because Sun licenses the Java system to whoever wants implement it on their system.
Apple’s Java VM has the ability to code between Java applications keeping the load times and memory usage down. Note that Apple has returned these changes to Sun and it looks like they’ll be include in Tiger.
Microsoft is not licensing .NET. They have no plans on every porting it to systems besides Windows. Currently, MSFT is losing market share in the Server enviroments and it looks like they may start losing market share in the Desktop environment. I don’t see why anyone would want to develope for .NET.
When Microsoft licensed the Java code from Sun, they modified the VM to run very well on Windows machines; but while doing this, they also made applications developed on this VM incompatable with the Java standard VM. This was a direct violation for the Licensing aggreement and caused the big court battle between Sun and MSFT.
With Sun & Java, any company can license the code and implement a VM that works better then the standard on their system. All Sun is asking in return is that the Custom VM must be compatable with the Standard VM. Java is a write once, run anywhere system.
” java is not as portable as people claim, for example java does not work on freebsd, and microsoft is porting .NET to freebsd themselves”
Java has always worked on freeBSD. I run freeBSD servers with Java. The freeBSD community even licensed rights to distribute the FreeBSD Native Java SDK from Sun.
Were you refering to the CLR that Corel ported FreeBSD?
Hello.
Why do you people care so much?
First is Linux vs Windows, Mac OS vs everything, KDE vs Gnome, AMD vs Intel, C# vs Java… Why can’t everybody use what they like, what they need and know, instead of bashing other people for the products used…?
Is it in fact possible for a new product in computers nowadays that doesn’t borrow something from the market? It’s Darwin’s law, for god’s sake…
But ok, it’s late here, I just got tired to read every time exactly the same things all over again… See ya…
In the meantime, I really think Seinfeld and MASH shows are the best sitcoms ever… 🙂
The port of the Rotor is meaningless. Rotor isn’t the real .NET CLR, its an experimental one. It not production quality.
Don’t forget that .Net can’t be ported anywhere.
So, a slow implementation of .Net means you have to do a 3 month rewrite. With Java, I can port to ISeries, and solve a performance problem in a week. Then I can recode for speed if necessary.
Plus, the money saved on L vs. W.
I can’t see why any coorperation would want to Restrict themselves to a Windows only .Net solution.
Of course, if your VB programmers can’t grasp Java,
then you have a problem. But they will also be unable to grasp VB.Net if they can’t understand Java.
Oh well…
I think Sun built Swing because MS wasn’t responding to bug fix requests to it’s underlying controls. So, instead of waiting 3 years for MS, Sun built a GUI set of classes that didn’t need any MS OS support.
You can spin anything any way you want.
FYI, you can also compile any language to Java Bytecode. Python is a good example, http://www.jython.org/
Swing was made because AWT doesn’t work. Each platform has it’s own set of assumptions about the user and how it will interact with the widgets. Basically trying to shoehorn in all platforms into one. It doesn’t work.
Swing is the cross platform solution because it basically creates its own platform and you then build on top of that. You still have to debug on all platforms (mac, unix, etc) but it’s easier because many small diferences are abstracted away by the Swing platform. Slow as it may be, swing is much better then having to re-write your code for every platform you want to support.
I wasn’t aware that java 1.5 was going to get a printf. It’s about time.
Swing was made because AWT doesn’t work. Each platform has it’s own set of assumptions about the user and how it will interact with the widgets. Basically trying to shoehorn in all platforms into one. It doesn’t work.
On the contrary, I think SWT has done an excellent job of this, at least for the major platforms. I would prefer the widgets not be packed just right if native widgets are used, to having a discontiguous application which only mimics the native UI.
Swing is an enormous problem for applications like Input Method Editors (especially non-MS ones) as well as a variety of accessability applications which are designed to work directly with the Win32 API, due to the way it is circumvented by Swing.
For anyone trolling about Java’s speed, run this and say again how slow you think Java Swing is: http://www.jgoodies.com/freeware/index.html
It can even autodetect accessibility settings. Now, there are still a couple problems which I’ve been in contact with JGoodies’ author about, where it doesn’t mimic Win32 perfectly, and he’s working with the Swing team to iron them out.
http://www.gomono.com
This is some bar in glasgow:)
I’m guessing your talking about the mono project, which ain’t ready for prime time.
http://www.go-mono.com
Now, I’m not saying .net sux or anything. The thing is, I’m working on an server, which is an open source project. I would like that server to run on a variety of OS’s (i.e., windows, mac, linux, solaris etc…)
Can I do this with .net now?
Finally, I would love more developers to join the project. Frankly, there aren’t an overabundance of open source .net developers with pricey MS tools in the pool.
.Net programmers should crack a book on the current release of Java before spouting off.
.Net compiles code.
Java HotSpot Profiles running code, optimizes and compiles it in real time. The advantage is “Context”. A compiler can’t tell what the hot sections of the code are with a couple of pass thru’s. It can guess, but not well. I’ve seen the code Microsoft generates, it leaves something to be desired. Java’s optimizer KNOWS where the Hot code is, and heavily optimizes that code. I’ve seen it double the performance of my code.
( You may have to wait 20 minutes for it to have an effect,
but when it’s done you Know It. )
That’s my experience anyway.
For everyone that thinks java is slow:
http://www.puppygames.net/ Try the AlienFlux demo, using either the windows version or the Java version.
there are algorithms which may work faster on .net vm, there are some which may work faster on java vm better. but, the difference, which is resulting from the differences in their vm framework, is not much.
the swing is surely a bit slower than swt, and there is a reason for it. it does not use native widgets directly. but in this way, it has the advantage of being the most logical solution for ensuring the same GUI behaviour on different platforms. besides, when there is a new platform to support, porting or implementing native GUI framework to the new platform take much longer. for instance, it took many months to implement swt on mac osx, but swing programs were working during this time. in all the cases, i find both of them useful.
both .net bytecode and java bytecode can be compiled into native executable before running. but this mainly affects the start-up time of the applications nowadays. the reason is that jit compilers are optimized enough to run nearly as fast as the native applications. .net offers automatic translation to native platform before running. it is certainly possible to create such a JVM with java too, but i don’t think it is very important really. the reason is that program sharing VM is already available for Mac, and sun will include it probably with tiger. that minimizes startup time. the program execution speed is nearly same anyway. but if you like, there are many java to native compilers such as excelsior-jet for windows, or gjc.
i think mono crowd is also trying to compile java programs into .net bytecodes, including swing and swt. in this way, mono crowd will benefit from huge amount of ready to use IDEs, libraries, programs designed for java. good for them, since they don’t have much support really, but i think it will benefit java more, since in this way, if you use java to write your program, you can run it on all the platforms supporting java, and you can also run it with mono. –; )
Just to add to that, one of the *major* benefits of HotSpot is that it can totally eliminate the overhead of virtual functions. This is something that can *only* be done at runtime, when the code is profiled and the VM can know what virtual functions can be de-virtualized.
Just to add to that, one of the *major* benefits of HotSpot is that it can totally eliminate the overhead of virtual functions. This is something that can *only* be done at runtime, when the code is profiled and the VM can know what virtual functions can be de-virtualized.
Yes, we’ve heard it all a million times: the Java zealots claiming that Java is faster than C++ because invoking a virtual method in C++ still requires a lookup in the vptr table.
The funniest thing I ever saw to this effect was a demonstration to such an effect, in which an “object oriented” FFT implementation was used, in which a number of (trivial) virtual methods were called inside a nested loop.
The first thing to keep in mind is that everything *but* virtual method calls are going to be faster in C++ than they are in Java (especially if Profile Guided Optimization is used)
The second is that the virtual method problem, especially in the case of signal processing code like an FFT, can be solved by declaring your methods final, implementing in C rather than C++, or if you are dealing with performance problems where inheritance is used you can replace virtual methods with templates.
I think every C++ programmer learns in the first few days of class that virtual methods are slow because they require a vptr lookup, and that virtual methods should only be used when the code inside is non-trivial (and will consume substantially more time than actually invoking the virtual method)
As for the rest of Java’s supposed run-time optimizations, these can also occur in compiled code using Profile Guided Optimization, currently implemented in ICC and coming soon to GCC.
Don’t get me wrong, I think it’s great that you can leave all methods virtual in Java. The cost is, unfortunately, running all programs in a bloated run-time which means they’ll be inaccessable or useless to people on lower-end hardware.
Well, that is a problem, do you target your compiler to run base on a single processor, build the language to scale well to 72 processors or more.
Maybe Sun was wrong, maybe we should target Celerons, or Atari 800’s.
A Hotspot profiler doesn’t Bloat the code. It doesn’t optimize code that isn’t executed. Smaller memory footprints should result. A profiling compiler will Bloat everything, but somethings more than others. And a profile only occurs once, where as hotspot analysis occurs all day long.
I agree with Bascule on this one. Runtime optimizations mean running some sort of runtime (i.e. the VM). Current implemtations of the VM are bloated. Seeing as Sun has had years to solve the problem (and they haven’t), I’m beginning to doubt whether they are able to do it.
The first thing to keep in mind is that everything *but* virtual method calls are going to be faster in C++ than they are in Java (especially if Profile Guided Optimization is used)
True. But how many C++ programmers favor composition/traits over inheritance? How many have read Modern C++ Design? Not the majority.
The second is that the virtual method problem, especially in the case of signal processing code like an FFT, can be solved by declaring your methods final, implementing in C rather than C++, or if you are dealing with performance problems where inheritance is used you can replace virtual methods with templates.
I agree. But due to Java’s insistence on the OO paradigm, and its over use of inheritance, function de-virtualization is a *necessary* optimization. If you’re going to make all your methods static and final, you might as well be coding C. Java’s (future) implementation of templates won’t bring any speed increase at all.
But because most CS graduates are taught Java, they will think Java, and that is why most of them will be (ab)using inheritance.
I used to use a lot of Java. Lately, I’ve been really annoyed by the steps that Sun has taken with Java (i.e. removing VM sharing from Tiger). I’m seriously looking to moving back to C++.