Survey
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
Why use Java?
Chris Loftus
cwl@aber.ac.uk
CS25510: Why use Java?
1
It’s easy to knock the top dog
• Maturity
• Lots of support
documentation
• Huge standard
libraries (3777
classes in Java 6)
• Big community
• Etc
• But is it a supertanker, and does
that matter?
CS25510: Why use Java?
2
CS25510: Why use Java?
3
My general view
• Don’t be dogmatic; use the right language
for the right job...
• Don’t slavishly follow the latest trends
– Dynamically typed script languages are also not
that “silver bullet”
• Sometimes there are several equally valid
choices...
CS25510: Why use Java?
4
Promises of Java: WORA
• An aim of Java in 96 was ability to program small
devices, e.g. set-top boxes...
• Write Once Run Anywhere is important
– There are JVMs for all computer platforms
– Symbian OS 47% of smart mobile phones (2008),
includes Java ME...
– Amazon Kindle, Blu-ray Disc, EA Mobile,
etc...(http://www.java.com/en/java_in_action)
– Large usage on server-side: e.g. eBay uses Java,
Infosys Technologies, parts of Amazon (Jboss,
servlets), parts of Google, Twitter (Scala on top of
JVM for backend),...
CS25510: Why use Java?
5
Promises of Java: WORA: Issues
• GUIs: Swing pure Java components give
WORA, but performance issues and
pluggable OS-specific LAFs not accurate...
• Initially Java 1.1 Green Threads, now native
used...
• Performance issues: cross platform means
use of interpreters and/or JIT
compilers...(more on this later)
• Not the only WORA kid on the block: those
script languages and Mono .NET IL...
6
Promises of Java: Network/Web
programming
• From the start: sockets, applets, HTTP
support, RMI (97), servlets (97), CORBA
support (98), JSP (99), JMS (2001), etc
• Web service support:
– JAX-WS etc for W3C SOAP/WSDL style...
– JAX-RS for REST style...
• Web programming support:
– Struts, JSF (with Ajax), Java EE 5, Spring,
Google Web Toolkit, JavaFX ...
7
Promises of Java: Network/Web
programming: Issues
• All programming platforms now support
networking
– However, Java maturity in this area
• Some platforms (e.g. Ruby-on-Rails) support web
development more succinctly...
• JavaFX is commonly believed to be too late as
compared with Adobe Flex/AIR and Silverlight...
• EJB and J2EE bloat-ware, the steep learning
curve, and the influence of affluence...
8
Promises of Java: Security
• Networking requires security:
–
–
–
–
Java sandbox for applets...
Java Security Model...
Java Cryptography Architecture/Extension...
Java Authorization and Authentication
Service...
– Support for web service security (e.g. messagelevel encryption, in-progress as part of JAXWS)
• More comprehensive support than most
platforms...
CS25510: Why use Java?
9
Promises of Java: Type-safe
• Strong typing that is statically checked (at compile time)
long v1 = 10.2;
Object e = new Employee();
Employee e1 = e;
•
•
•
•
•
Strong typing that is dynamically checked...
Array index bounds checking...
No pointer arithmetic...
Consistent handling of floating point types...
Garbage collection rather than dealloc (memory
management issue)...
• Removes a class of runtime faults but performance and
flexibility issues...
10
Criticisms: Performance
• Java’s had this poor performance tag for
some time, is it still justified?
• The HelloWorld comparison of Java and C
is a little misleading:
– A large JVM must be loaded and initialised...
– For short-lived programs this might be an
issue...
• What do the benchmarks show us?...
CS25510: Why use Java?
11
See “The Computer Language Benchmarks Game”
http://shootout.alioth.debian.org/
12
CS25510: Why use Java?
13
CS25510: Why use Java?
14
Why performance worse than
C/C++?
• Load-time bytecode verification, array
bounds checking, floating point simulation,
garbage collection…
• Loading the large JVM
– Big start-up hit…
– Big memory footprint…
• Initially bytecode interpretation, JIT (1998),
and then HotSpot (2000)
– Adaptive compiler: initially interpreted but
hotspots are compiled to native…
15
Criticisms: Java is simply not fun
• Lack of:
– Default parameter values, operator overloading,
closures, pure object orientation, string cases in
switch statements, meta-programming support,
convention over configuration...
• And:
– Boiler-plate code, checked exceptions...
CS25510: Why use Java?
16
HelloWorld in Java and Groovy
public class HelloJava {
public static void main(String [] args){
if (args.length > 0)
System.out.format("Hello %s", args[0]);
else
System.out.print("Hello");
}
}
if (args)
println "Hello ${args[0]}"
else
println "Hello"
CS25510: Why use Java?
17
Java is a super-tanker but I don’t
think it matters
• Criticised by many developers as not including
features discussed earlier, and slow to add new
features...
• But many big projects want API stability, large
mature reusable code libraries, proven technology,
type safety, good security, and sufficient
performance...
– eBay replaced C++ with Java in 2002, citing Java’s good
engineering support for their 1500+ developers
– However Amazon use C++ for compute intensive work
• And if you want to use those fun languages and
have many of Java’s benefits why not use Scala,
Groovy or Jruby?
18