cs25510: why use java?1 why use java? chris loftus [email protected]
Post on 18-Dec-2015
223 views
TRANSCRIPT
It’s easy to knock the top dog
CS25510: Why use Java? 2
• Maturity• Lots of support
documentation• Huge standard
libraries (3777 classes in Java 6)
• Big community• Etc• But is it a super-
tanker, and does that matter?
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),...
5CS25510: Why use Java?
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. message-
level encryption, in-progress as part of JAX-WS)
• 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;
10
• 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...
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
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
if (args) println "Hello ${args[0]}"else println "Hello"
CS25510: Why use Java? 17
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"); }}
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