What`s new in Java 7


Published on

New features in:

1. Java programming language
2. Java I/O
3. Concurrency
4. Swing
5. Networking
6. Security
7. Collections
8. RIA
9. Java 2D
10. JDBC 4.1
11. JVM
12. java.lang package
13. Java XML
14. I18N

Published in: Technology, News & Politics
1 Like
  • Be the first to comment

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

What`s new in Java 7

  1. 1. Whats new in JAVA Georgian Micsa
  2. 2. About me Georgian Micsa - Software engineer with 5+ years of experience, mainly Java but also .NET and JavaScript - Interested in OOP, OOD and agile software development methodologies - Currently working as a senior Java developer @ Cegeka - georgian.micsa@gmail.com - http://ro.linkedin.com/in/georgianmicsa 2
  3. 3. Agenda Java timeline Java 7 new features Future Java 8 References 3
  4. 4. Java timeline 1.0 – January 23, 1996 1.1 – February 19, 1997 Inner classes, JavaBeans, JDBC, RMI, reflection 1.2 – December 8, 1998 Strictfp, Swing, JIT compiler, Java IDL, Collections 1.3 – May 8, 2000 HotSpot JVM, JavaSound, JNDI, JPDA, proxies 1.4 – February 6, 2002 Assert, regex, IPv6, NIO, logger, ImageIO, JAXP, JCE, Java Web Start 5 – September 30, 2004 Generics, annotations, auto/unboxing, enum, varargs, foreach loop, static imports, skinnable look and feel called Synth, java.util.concurrent, Scanner class 6 – December 11, 2006 Scripting language support, performance improvements for Swing, JAX-WS, JDBC 4.0, StAX, SwingWorker, table sorting and filtering, double-buffering, JVM improvements, Java Quick Starter, Java2D uses Direct3D on Windows, Nimbus L&F 4
  5. 5. New features in Java 7 1. Java programming language 2. Java I/O 3. Concurrency 4. Swing 5. Networking 6. Security 7. Collections 8. RIA 9. Java 2D 10. JDBC 4.1 11. JVM 12. java.lang package 13. Java XML 14. I18N 5
  6. 6. 1. Java programming language Binary Literals: // An 8-bit byte value: byte aByte = (byte) 0b00100001; // A 16-bit short value: short aShort = (short) 0b1010000101000101; // Some 32-bit int values: int anInt1 = 0b10100001010001011010000101000101; int anInt2 = 0b101; int anInt3 = 0B101; // The B can be upper or lower case. // A 64-bit long value. Note the "L" suffix: long aLong = 0b1000000000000000000001L; System.out.println(aLong); 6
  7. 7. 1. Java programming language Underscores in Numeric Literals: long creditCardNumber = 1234_5678_9012_3456L; long socialSecurityNumber = 999_99_9999L; float pi = 3.14_15F; long hexBytes = 0xFF_EC_DE_5E; long hexWords = 0xCAFE_BABE; long maxLong = 0x7fff_ffff_ffff_ffffL; byte nybbles = 0b0010_0101; long bytes = 0b11010010_01101001_10010100_10010010; System.out.println(creditCardNumber); 7
  8. 8. 1. Java programming language Strings in Switch Statements: String myString = "tiger"; switch (myString) { case "crocodile": System.out.println("Watch out! It`s a reptile!"); break; case "tiger": case "lion": System.out.println("Watch out! It`s a cat!"); break; default: System.out.println("Sorry...Animal not identified"); } 8
  9. 9. 1. Java programming language Type Inference for Generic Instance Creation: //before 7 Map<String, List<String>> myMap = new HashMap<String, List<String>>(); // DIAMOND operator //after 7 Map<String, List<String>> myMap2 = new HashMap<>(); 9
  10. 10. 1. Java programming languageAutomatic Resource Management (ARM):- Also known as try-with-resources statement- Resources must implement interface AutoClosable try (ZipFile zf = new ZipFile("test.zip"); FileInputStream fis = new FileInputStream("test.zip");) { for (Enumeration entries = zf.entries(); entries.hasMoreElements();) { String zipEntryName = ((java.util.zip.ZipEntry) entries.nextElement()).getName(); System.out.println(zipEntryName); } } 10
  11. 11. 1. Java programming language Handling more than one type of exception: // before 7 catch (IOException ex) { logger.log(ex); throw ex; catch (SQLException ex) { logger.log(ex); throw ex; } // after 7 catch (IOException|SQLException ex) { logger.log(ex); throw ex; } 11
  12. 12. 2. Java I/O - Completely refactored I/O with better performance - Packages java.nio.file and java.nio.file.attribute: comprehensive support for file I/O and for accessing the default file system - The Path class: Path p1 = Paths.get("/tmp/foo"); Path p3 = Paths.get(URI.create("file:///Users/joe/FileTest.java")); Path p5 = Paths.get(System.getProperty("user.home"), "logs", "foo.log"); - Checking files: Files.isRegularFile(path); isReadable(path); isExecutable(path); isDirectory(path); isHidden(path); size(path); getOwner(); etc. - Delete file or directory: Files.delete(path); - Copy file or dir: Files.copy(source, target, REPLACE_EXISTING); - Move/rename file or dir: Files.move(source, target, REPLACE_EXISTING); - Read file: fileArray = Files.readAllBytes(path); - Create file: pathFile.newOutputStream(CREATE, APPEND); Files.createFile(path); - Random access: interface SeekableByteChannel - The FileSystems class: FileSystems.getDefault().getFileStores() - Links: Files.createSymbolicLink(newLink, target); Files.createLink(newLink, existingFile); - Walking the file tree: the FileVisitor interface - Finding files: FileSystems.getDefault().getPathMatcher("glob:*.{java,class}"); - Coexistence with legacy code: Path input = file.toPath(); - Custom File System Providers: ex. JAR file system provider 12
  13. 13. 2. Java I/O Directory Watch Service: WatchService watcher = FileSystems.getDefault().newWatchService(); WatchKey key = dir.register(watcher, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY); for (;;) { //wait for key to be signaled try { key = watcher.take(); } catch (InterruptedException x) { return; } for (WatchEvent<?> event : key.pollEvents()) { WatchEvent.Kind<?> kind = event.kind(); //This key is registered only for ENTRY_CREATE events, //but an OVERFLOW event can occur regardless if events are //lost or discarded. if (kind == StandardWatchEventKinds.OVERFLOW) { continue; } //The filename is the context of the event. WatchEvent<Path> ev = (WatchEvent<Path>) event; Path filename = ev.context(); …. 13
  14. 14. 2. Java I/O Non-blocking I/O or asynchronous I/O: A. Return Future representing pending result: AsynchronousSocketChannel ch = ... Future<Integer> result = ch.read(buf); int nread = result.get(); B. CompletionHandler invoked when I/O completes: interface CompletionHandler<V,A> { void completed(V result, A attachment); void failed(Throwable exc, A attachment); } ch.read(buf, conn, handler); - New classes: AsynchronousSocketChannel, AsynchronousServerSocketChannel, AsynchronousDatagramChannel, AsynchronousFileChannel - Async operations: READ/WRITE, CONNECT, ACCEPT, RECEIVE/SEND, 14
  15. 15. 3. Concurrency Fork-join framework: - parallel programming - based on the ForkJoinPool class (Executor) - work-stealing technique for the workers - divide and conquer problems: RecursiveTask and RecursiveAction classes class ForkSum extends RecursiveTask<Long> { @Override protected Long compute() { if (toIndex - fromIndex <= DIRECT_COMPUTE_SIZE) { return computeDirectly(); } int split = (fromIndex + toIndex) / 2; ForkSum f1 = new ForkSum(array, fromIndex, split); f1.fork(); ForkSum f2 = new ForkSum(array, split + 1, toIndex); f2.fork(); return f2.join() + f1.join(); } //MAIN: ForkSum forkSum = new ForkSum(computeArray, 0, N - 1); ForkJoinPool pool = new ForkJoinPool(); // uses number of cores Long result = pool.invoke(forkSum); 15
  16. 16. 3. Concurrency- The ThreadLocalRandom class eliminates contention among threads using pseudo-random numbers- For concurrent access (fork-join framework), using ThreadLocalRandom instead of Math.random() results in less contention and, ultimately, better performance.int r = ThreadLocalRandom.current().nextInt(4, 77);- The Phaser class is a new synchronization barrier, similar to CyclicBarrier- More flexible usage- Number of parties registered to synchronize on a phaser may vary over time: register(), bulkRegister(), arriveAndDeregister();- Better synchronization: arriveAndAwaitAdvance(), arrive(), arriveAndDeregister(),awaitAdvance(int phase)- Termination: isTerminated(), forceTermination()- Monitoring: getRegisteredParties(), getArrivedParties(), getPhase(), getUnarrivedParties()- Tiering: Build phasers in tree structure to reduce contention. 16
  17. 17. 4. Swing- The JLayer class has been added, which is a flexible and powerful decorator for Swing components- You can draw effects, blurring, animating a busy indicator, validate textfields, respond to events etc. JFrame f = new JFrame(); JPanel panel = createPanel(); LayerUI<JPanel> layerUI = new WallpaperLayerUI(); JLayer<JPanel> jlayer = new JLayer<JPanel>(panel, layerUI); f.add (jlayer); class WallpaperLayerUI extends LayerUI<JComponent> { public void paint(Graphics g, JComponent c) { ... } }- The Nimbus Look and Feel has been moved from the com.sun.java.swing packageto the javax.swing package- Mixing Heavyweight and Lightweight Components is easier to accomplish- Windows with transparency and non-rectangular shape are supported // Set the window to 55% opaque (45% translucent). w.setOpacity(0.55f); // Shaped windows w.setShape(new Ellipse2D.Double(0,0,getWidth(),getHeight()));- An HSV tab has been added to the JColorChooser class 17
  18. 18. 5. Networking - The URLClassLoader.close() method has been added - Invalidates the loader - It also closes any JAR files - this allows the application to delete or replace these files - The Sockets Direct Protocol (SDP) provides access to high performance network connections - Introduced in 1999 by the InfiniBand Trade Association, InfiniBand (IB) was created to address the need for high performance computing - Remote Direct Memory Access (RDMA): - enables moving data directly from the memory of one computer to another computer - bypassing the operating system of both computers - resulting in significant performance gains - SDP supports stream connections over InfiniBand fabric - No API changes required in JDK - The implementation of SDP is transparent and supported by the classic networking and new I/O - You only have to create a configuration file. Example: # Use SDP when binding to bind * # Use SDP when connecting to all application services on 192.0.2.* connect 1024-* 18
  19. 19. 6. Security- Support for Elliptic Curve Cryptography (ECC)- A new native provider has been added that provides several ECC-based algorithms (ECDSA/ECDH): - DSA Signatures using ECC - Key agreement: Diffie-Hellman key exchange using ECC- Weak cryptographic algorithms can now be disabled, for example MD2- Various enhancements related to SSL/TLS have been added to Java Secure Socket Extension 19
  20. 20. 7. Collections - The TransferQueue interface has been added - A refinement of the BlockingQueue interface: - producers may wait for consumers to receive elements - transfer(E e) - tryTransfer(E e) - tryTransfer(E e, long timeout, TimeUnit unit) - getWaitingConsumerCount() - hasWaitingConsumer() - The class LinkedTransferQueue implements the TransferQueue interface 20
  21. 21. 8. RIA- The window of a dragged applet can be decorated with a default or custom title- Enhancements have been made to the syntax of JNLP files: - The os attribute in the information and resources elements can now contain specific versions of Windows - Applications can use the install attribute in the shortcut element - Java Web Start applications can be deployed without specifying the codebase attribute- A JNLP file can be embedded into an HTML page:<script src="http://www.java.com/js/deployJava.js"></script><script> var attributes = {} ; <!-- Base64 encoded string truncated below for readability --> var parameters = {jnlp_href: dynamictree-applet.jnlp, jnlp_embedded: PCEtLSAKLyoKICogQ29weX ... HA+Cg== }; deployJava.runApplet(attributes, parameters, 1.6);</script>- You can check the status variable of the applet while it is loading to determineif the applet is ready to handle requests from JavaScript code 21
  22. 22. 9. Java 2D- A new XRender-based Java 2D rendering pipeline is supported for modern X11-based desktops, offering improved graphics performance: -Dsun.java2d.xrender=true- The JDK now enumerates and displays installed OpenType/CFF fonts through methods such as GraphicsEnvironment.getAvailableFontFamilyNames 22
  23. 23. 10. JDBC 4.1- The ability to use a try-with-resources statement to automatically close resources of type Connection, ResultSet, and Statement: try (Statement stmt = con.createStatement()) { // ... }- RowSet 1.1: The introduction of the RowSetFactory interface and the RowSetProvider class- Enable you to create all types of row sets supported by your JDBC driver- JdbcRowSet: - enhanced ResultSet object - it maintains a connection to its data source - it has a set of properties and a listener notification mechanism - it makes a ResultSet object scrollable and updatable- The RowSetFactory interface: - createCachedRowSet - createFilteredRowSet - createJdbcRowSet - createJoinRowSet - createWebRowSet 23
  24. 24. 11. JVMJVM Support for Non-Java Languages- Dynamically typed language => type checking at runtime- New JVM instruction that simplifies the implementation of dynamically typed programming languages on the JVM: invokedynamic- Allows the language implementer to define custom linkage behavior- Define bootstrap method that links the invokedynamic call site to the “real” methodGarbage-First Collector- Server-style garbage collector that replaces the Concurrent Mark-Sweep Collector (CMS)- Targeted for multi-processors with large memories, decrease pause times and increase throughput- Marking and evacuation is performed on parallel on multi-processors- G1 partitions the Heap in equal size regions and compacts them- G1 first collects and compacts the regions full of reclaimable objects- More predictable garbage collection pauses than CMS- User can set the desired pause targetsJava HotSpot Virtual Machine Performance Enhancements- Tiered Compilation => speed up the server VM: -server -XX:+TieredCompilation- Compressed Oops – managed pointers for objects offsets and not byte offsets- Escape analysis - compiler may eliminate certain object allocations - compiler may eliminate synchronization blocks (lock elision)- NUMA Collector enhancements for the parallel GC 24
  25. 25. java.lang, XML & I18N12. java.lang package- Potential deadlocks were eliminated for multithreaded, non-hierarchically delegating custom class loaders13. Java XML- Java API for XML Processing (JAXP) 1.4.5,- Java Architecture for XML Binding (JAXB) 2.2.3,- Java API for XML Web Services (JAX-WS) 2.2.414. I18N- Support for Unicode 6.0.0: - over 2000 additional characters, as well as support for properties and data files - by default in Java 1 char = 16 bits => only 65536 characters - supplementary characters are defined as a pair of char values, from 0x10000 to 0x10FFFF- Extensible Support for ISO 4217 Currency Codes: currency.properties- Category Locale Support: 2 types of category: Locale.Category FORMAT and DISPLAY- Unicode 6.0 Support in Regular Expressions API 25
  26. 26. Future Java 8 - Modularization of the JDK under Project Jigsaw - Parts of project Coin that are not included in Java 7 - Language-level support for lambda expressions (officially, lambda expressions; unofficially, closures) under Project Lambda: Collection collection = ... ; collection.sortBy(#{ Foo f -> f.getLastName() }); collection.remove(#{ Foo f -> f.isBlue() }); - Annotations on Java Types: Map<@NonNull String, @NonEmpty List<@Readonly Document>> files; - New Date and Time API 26
  27. 27. References Java Timeline: http://www.oracle.com/technetwork/java/javase/overview/javahistory-timeline- 198369.html Java 7: http://download.oracle.com/javase/7/docs/ NIO 2: http://openjdk.java.net/projects/nio/presentations/TS-5686.pdf http://openjdk.java.net/projects/nio/presentations/TS-4222.pdf http://openjdk.java.net/projects/nio/presentations/TS-5052.pdf SWING: http://download.oracle.com/javase/tutorial/uiswing/misc/jlayer.html Networking: http://download.oracle.com/javase/tutorial/sdp/sockets/index.html JVM: http://download.oracle.com/javase/7/docs/technotes/guides/vm/multiple-language- support.html http://download.oracle.com/javase/7/docs/technotes/guides/vm/performance- enhancements-7.html Java 8: http://jcp.org/en/jsr/detail?id=337 27