cs25510: why use java?1 why use java? chris loftus [email protected]

18
CS25510: Why use Java? 1 Why use Java? Chris Loftus [email protected]

Post on 18-Dec-2015

223 views

Category:

Documents


1 download

TRANSCRIPT

CS25510: Why use Java? 1

Why use Java?

Chris Loftus [email protected]

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?

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),...

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

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

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