ºÝºÝߣ

ºÝºÝߣShare a Scribd company logo
Java
History & Trends
Kaunas JUG
Dainius Me?anskas ¡¤ kaunas.jug@gmail.com ¡¤ http://plus.google.com/+KaunasJUG
Dainius Me?anskas
¡ñ 16 years of Java
¡ñ Java SE/EE
¡ñ e-Learning ¡¤ Insurance ¡¤ Telecommunications ¡¤
e-Commerce
¡ñ KTU DMC ¡¤ Exigen Group ¡¤ NoMagic Europe ¡¤
Modnique Baltic
Java Birth
Java father
James Arthur Gosling
¡ñ 1991 ¨C ¡°Green Project¡±; ¡°Duke¡±
¡ñ *7
¡ñ Applet
¡ñ 1993 ¨C Mosaic
¡ñ 1994 ¨C HotJava ? (WebRunner)
*7¶Ù±ð±¹¾±³¦±ð¡¤±á´Ç³Ù´³²¹±¹²¹?
Press Announcement, 1995
JDK 1.0
¡ñ 1994 ¨C ¡°Invented¡± (Oak)
¡ñ 1995 ¨C JDK Alpha and Beta
¡ñ 1996, Jan 23 ¨C JDK 1.0 (1.0.2)
¡ñ 1 year ¡¤ 38 licensees, 6,000 devs at JavaOne
¡ñ 2 year ¡¤ 100 licensees, 10,000 devs at JavaOne
Language Goals & Objectives
¡ñ Garbage collection
¡ñ Run on wide range of devices
¡ñ Security Model
¡ñ Networking ¡¤ Run Remote Code
¡ñ Threading ¡ñ Object Oriented
What was so Exciting...
¡ñ JVM ¡¤ Byte Code ¡¤ WORA
¡ñ Simpler syntax (than C++)
¡ñ Implicit Pointers to Objects
¡ñ Auto memory allocation (GC)
¡ñ Threads ¡¤ Exceptions
¡­ and what wasn¡¯t!
¡ñ Interpreted Language
¡ñ Not Efficient Memory Model
(Double-Checked Locking is Broken)
¡ñ Slow Startup and Execution
Criticism
¡ñ Stat. /dynamic.
scoped functions
¡ñ Inlined functions
¡ñ Pointers to functions
¡ñ Long-living closures
¡ñ Preprocessing
¡ñ Macros system
¡ñ Multiple inheritance
¡ñ Operator override
¡ñ printf()
¡ñ unsigned primitives
¡ñ Unicode Strings
Java Processor (Chip)
¡ñ picoJava
¡ñ Dozen of other
implementations
JDK 1.1 ¡¤ (Feb 19, 1997)
¡ñ JavaBeans
¡ñ Improved AWT
¡ñ JDBC, RMI, Reflection
¡ñ Inner classes
¡ñ JIT, for Windows only (by Symantec)
J2SE 1.2 ¡¤ Playground ¡¤ (Dec 8, 1998)
¡ñ J2SE, J2EE, J2ME
¡ñ 3x ¡¤ 1520 classes in 59
packages
¡ñ Sun's JIT compiler
¡ñ Collections framework
¡ñ Integrated Swing API
¡ñ strictfp keyword
¡ñ Java plug-in
¡ñ Java IDL/for
CORBA
Java EE
? 1999 ¡¤ J2EE 1.2
? 2001 ¡¤ J2EE 1.3
? 2003 ¡¤ J2EE 1.4
? 2006 ¡¤ Java EE 5
? 2009 ¡¤ Java EE 6
? 2013 ¡¤ Java EE 7
Java ME
¡ñ CLDC 1.0, 1.1
¡ñ MIDP 1.0, 2.0, 3.0
¡ñ IMP 1.0, 2.0
J2SE 1.3 ¡¤ Kestrel ¡¤ (May 8, 2000)
¡ñ HotSpot JVM
¡ñ Synthetic (Dynamic) proxy classes
¡ñ JNDI included
¡ñ Debugger Architecture (JPDA)
¡ñ RMI + CORBA ¡ñ JavaSound
J2SE 1.4 ¡¤ Merlin ¡¤ (Feb 6, 2002)
¡ñ JCP ¡¤ JSR 59
¡ñ assert keyword
¡ñ Exception Chaining
¡ñ RegEx
¡ñ NIO ¡¤ IPv6 ¡¤ Logging
¡ñ Image API
¡ñ JAXP
¡ñ JCE ¡¤ JSSE ¡¤ JAAS
¡ñ Java Web Start
¡ñ Preferences API
J2SE 5.0 ¡¤ Tiger ¡¤ (Sep 30, 2004)
¡ñ Generics
¡ñ @Annotations
¡ñ Autoboxing
¡ñ enum keyword
¡ñ Varargs
¡ñ for each loop
¡ñ Static imports
¡ñ Mem Model Fix
¡ñ RMI auto stubs
¡ñ java.util.concurrent
OpenJDK ¡¤ (Nov 13, 2006)
¡ñ Sun Microsystems made the
bulk of its implementation of
Java available under the GNU
General Public License (GPL)
Java SE 6 ¡¤ Mustang ¡¤ (Dec 11, 2006)
¡ñ Performance impr.
¡ñ JVM/GC impr.
¡ñ Scripting Language
Support
¡ñ Java Compiler API
¡ñ JAX-WS
¡ñ JDBC 4.0
¡ñ JAXB 2.0 ¡¤ StAX
¡ñ Pluggable annotations
(http://projectlombok.org/)
R.I.PSun(Jan27,2010)
Java SE 7 ¡¤ Dolphin ¡¤ (Jul 28, 2011)
¡ñ invokedynamic
¡ñ switch
¡ñ autocloseable
¡ñ <>
¡ñ 0b10_01
¡ñ catch()
¡ñ Concurrency ¡¤ File
I/O ¡¤ Timsort ¡¤ New
File I/O ¡¤ Crypto ¡¤ 2D ¡¤
Protocols SCTP SDP
¡¤ etc.
Java SE 8 ¡¤ (Expected Mar 18, 2014)
¡ñ Lambda (closures)
¡ñ Bulk Data Operations
for Collections
¡ñ Nashorn (JS engine)
¡ñ Unsigned Int/Long
¡ñ Date & Time API
¡ñ Repeating Annotations
¡ñ Remove PerGen
¡ñ Base64 ¡¤ HashMap ¡¤
JDBC 4.2 ¡¤ Crypto ¡¤ etc.
Java SE 9 ¡¤ (2016 ?)
¡ñ Better support for
multi-gigabyte heaps
¡ñ Self-tuning JVM
¡ñ Money and Currency API
¡ñ Modularization of the
JDK (Jigsaw)
Java SE 10 ¡¤ Speculation ¡¤ (2018 ??)
¡ñ Removing primitive
data types.
¡ñ 64-bit addressable
arrays to support
large data sets.
JVMs
¡ñ HotSpot
¡ñ JRockit
¡ñ IBM J9 JVM
JVMLanguages
JVMPopularity
JavaScript (+1)
Java (-1)
PHP
C# (+2)
Python (-1)
C++ (+1)
Ruby (-2)
C
Objective-C
CSS (new)
Perl
Shell (-2)
Scala (-1)
Haskell
R (1)
Matlab (+3)
Clojure (+5)
CoffeeScript (-1)
Visual Basic (+1)
Groovy (-2)
TOP 20
http://redmonk.com/sogrady/2014/01/22/language-rankings-1-14/
Avatar ¡¤ (avatar.java.net)
Java ¡¤ Source Code Example
public class CalculateCircleAreaExample {
public static void main(String[] args) {
int radius = 0;
System.out.println("Please enter radius of a circle");
try {
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
radius = Integer.parseInt(br.readLine());
} catch (Exception e) {
System.out.println("Error :" + e);
System.exit(0);
}
double area = Math.PI * radius * radius;
System.out.println("Area of a circle is " + area);
}
}
object reduceList {
val nums = List(2, -4, 5, 7)
def sum1(xs: List[Int]) = (0 :: xs) reduceLeft ((x, y) => x + y)
sum1(nums)
def sum(xs: List[Int]) = (0 :: xs) reduceLeft (_ + _)
sum(nums)
def product(xs: List[Int]) = (1 :: xs) reduceLeft (_ * _)
product(nums)
def concat[T](xs: List[T], ys: List[T]): List[T] = (xs foldRight ys)(_ ::
_)
}
Scala ¡¤ Source Code Example
Groovy ¡¤ Source Code Example
def sudoku(values) {
def i = values.indexOf(48);
if (i < 0)
print values
else
(('1'..'9') - (0..80).collect { j ->
g = { (int) it(i) == (int) it(j) };
g { it / 9 } | g { it % 9 } | g { it / 27 } &
g { it % 9 / 3 } ? values[j] : '0'
}).each {
sudoku(values[0..<i] + it + values[i + 1..-1])
}
}
Java Forever
Thank
You!

More Related Content

Kaunas JUG#1: Java History and Trends (Dainius Mezanskas)

  • 1. Java History & Trends Kaunas JUG Dainius Me?anskas ¡¤ kaunas.jug@gmail.com ¡¤ http://plus.google.com/+KaunasJUG
  • 2. Dainius Me?anskas ¡ñ 16 years of Java ¡ñ Java SE/EE ¡ñ e-Learning ¡¤ Insurance ¡¤ Telecommunications ¡¤ e-Commerce ¡ñ KTU DMC ¡¤ Exigen Group ¡¤ NoMagic Europe ¡¤ Modnique Baltic
  • 3. Java Birth Java father James Arthur Gosling ¡ñ 1991 ¨C ¡°Green Project¡±; ¡°Duke¡± ¡ñ *7 ¡ñ Applet ¡ñ 1993 ¨C Mosaic ¡ñ 1994 ¨C HotJava ? (WebRunner)
  • 6. JDK 1.0 ¡ñ 1994 ¨C ¡°Invented¡± (Oak) ¡ñ 1995 ¨C JDK Alpha and Beta ¡ñ 1996, Jan 23 ¨C JDK 1.0 (1.0.2) ¡ñ 1 year ¡¤ 38 licensees, 6,000 devs at JavaOne ¡ñ 2 year ¡¤ 100 licensees, 10,000 devs at JavaOne
  • 7. Language Goals & Objectives ¡ñ Garbage collection ¡ñ Run on wide range of devices ¡ñ Security Model ¡ñ Networking ¡¤ Run Remote Code ¡ñ Threading ¡ñ Object Oriented
  • 8. What was so Exciting... ¡ñ JVM ¡¤ Byte Code ¡¤ WORA ¡ñ Simpler syntax (than C++) ¡ñ Implicit Pointers to Objects ¡ñ Auto memory allocation (GC) ¡ñ Threads ¡¤ Exceptions
  • 9. ¡­ and what wasn¡¯t! ¡ñ Interpreted Language ¡ñ Not Efficient Memory Model (Double-Checked Locking is Broken) ¡ñ Slow Startup and Execution
  • 10. Criticism ¡ñ Stat. /dynamic. scoped functions ¡ñ Inlined functions ¡ñ Pointers to functions ¡ñ Long-living closures ¡ñ Preprocessing ¡ñ Macros system ¡ñ Multiple inheritance ¡ñ Operator override ¡ñ printf() ¡ñ unsigned primitives ¡ñ Unicode Strings
  • 11. Java Processor (Chip) ¡ñ picoJava ¡ñ Dozen of other implementations
  • 12. JDK 1.1 ¡¤ (Feb 19, 1997) ¡ñ JavaBeans ¡ñ Improved AWT ¡ñ JDBC, RMI, Reflection ¡ñ Inner classes ¡ñ JIT, for Windows only (by Symantec)
  • 13. J2SE 1.2 ¡¤ Playground ¡¤ (Dec 8, 1998) ¡ñ J2SE, J2EE, J2ME ¡ñ 3x ¡¤ 1520 classes in 59 packages ¡ñ Sun's JIT compiler ¡ñ Collections framework ¡ñ Integrated Swing API ¡ñ strictfp keyword ¡ñ Java plug-in ¡ñ Java IDL/for CORBA
  • 14. Java EE ? 1999 ¡¤ J2EE 1.2 ? 2001 ¡¤ J2EE 1.3 ? 2003 ¡¤ J2EE 1.4 ? 2006 ¡¤ Java EE 5 ? 2009 ¡¤ Java EE 6 ? 2013 ¡¤ Java EE 7
  • 15. Java ME ¡ñ CLDC 1.0, 1.1 ¡ñ MIDP 1.0, 2.0, 3.0 ¡ñ IMP 1.0, 2.0
  • 16. J2SE 1.3 ¡¤ Kestrel ¡¤ (May 8, 2000) ¡ñ HotSpot JVM ¡ñ Synthetic (Dynamic) proxy classes ¡ñ JNDI included ¡ñ Debugger Architecture (JPDA) ¡ñ RMI + CORBA ¡ñ JavaSound
  • 17. J2SE 1.4 ¡¤ Merlin ¡¤ (Feb 6, 2002) ¡ñ JCP ¡¤ JSR 59 ¡ñ assert keyword ¡ñ Exception Chaining ¡ñ RegEx ¡ñ NIO ¡¤ IPv6 ¡¤ Logging ¡ñ Image API ¡ñ JAXP ¡ñ JCE ¡¤ JSSE ¡¤ JAAS ¡ñ Java Web Start ¡ñ Preferences API
  • 18. J2SE 5.0 ¡¤ Tiger ¡¤ (Sep 30, 2004) ¡ñ Generics ¡ñ @Annotations ¡ñ Autoboxing ¡ñ enum keyword ¡ñ Varargs ¡ñ for each loop ¡ñ Static imports ¡ñ Mem Model Fix ¡ñ RMI auto stubs ¡ñ java.util.concurrent
  • 19. OpenJDK ¡¤ (Nov 13, 2006) ¡ñ Sun Microsystems made the bulk of its implementation of Java available under the GNU General Public License (GPL)
  • 20. Java SE 6 ¡¤ Mustang ¡¤ (Dec 11, 2006) ¡ñ Performance impr. ¡ñ JVM/GC impr. ¡ñ Scripting Language Support ¡ñ Java Compiler API ¡ñ JAX-WS ¡ñ JDBC 4.0 ¡ñ JAXB 2.0 ¡¤ StAX ¡ñ Pluggable annotations (http://projectlombok.org/)
  • 22. Java SE 7 ¡¤ Dolphin ¡¤ (Jul 28, 2011) ¡ñ invokedynamic ¡ñ switch ¡ñ autocloseable ¡ñ <> ¡ñ 0b10_01 ¡ñ catch() ¡ñ Concurrency ¡¤ File I/O ¡¤ Timsort ¡¤ New File I/O ¡¤ Crypto ¡¤ 2D ¡¤ Protocols SCTP SDP ¡¤ etc.
  • 23. Java SE 8 ¡¤ (Expected Mar 18, 2014) ¡ñ Lambda (closures) ¡ñ Bulk Data Operations for Collections ¡ñ Nashorn (JS engine) ¡ñ Unsigned Int/Long ¡ñ Date & Time API ¡ñ Repeating Annotations ¡ñ Remove PerGen ¡ñ Base64 ¡¤ HashMap ¡¤ JDBC 4.2 ¡¤ Crypto ¡¤ etc.
  • 24. Java SE 9 ¡¤ (2016 ?) ¡ñ Better support for multi-gigabyte heaps ¡ñ Self-tuning JVM ¡ñ Money and Currency API ¡ñ Modularization of the JDK (Jigsaw)
  • 25. Java SE 10 ¡¤ Speculation ¡¤ (2018 ??) ¡ñ Removing primitive data types. ¡ñ 64-bit addressable arrays to support large data sets.
  • 28. JVMPopularity JavaScript (+1) Java (-1) PHP C# (+2) Python (-1) C++ (+1) Ruby (-2) C Objective-C CSS (new) Perl Shell (-2) Scala (-1) Haskell R (1) Matlab (+3) Clojure (+5) CoffeeScript (-1) Visual Basic (+1) Groovy (-2) TOP 20 http://redmonk.com/sogrady/2014/01/22/language-rankings-1-14/
  • 30. Java ¡¤ Source Code Example public class CalculateCircleAreaExample { public static void main(String[] args) { int radius = 0; System.out.println("Please enter radius of a circle"); try { BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); radius = Integer.parseInt(br.readLine()); } catch (Exception e) { System.out.println("Error :" + e); System.exit(0); } double area = Math.PI * radius * radius; System.out.println("Area of a circle is " + area); } }
  • 31. object reduceList { val nums = List(2, -4, 5, 7) def sum1(xs: List[Int]) = (0 :: xs) reduceLeft ((x, y) => x + y) sum1(nums) def sum(xs: List[Int]) = (0 :: xs) reduceLeft (_ + _) sum(nums) def product(xs: List[Int]) = (1 :: xs) reduceLeft (_ * _) product(nums) def concat[T](xs: List[T], ys: List[T]): List[T] = (xs foldRight ys)(_ :: _) } Scala ¡¤ Source Code Example
  • 32. Groovy ¡¤ Source Code Example def sudoku(values) { def i = values.indexOf(48); if (i < 0) print values else (('1'..'9') - (0..80).collect { j -> g = { (int) it(i) == (int) it(j) }; g { it / 9 } | g { it % 9 } | g { it / 27 } & g { it % 9 / 3 } ? values[j] : '0' }).each { sudoku(values[0..<i] + it + values[i + 1..-1]) } }