SlideShare uma empresa Scribd logo
1 de 39
Java 7 new features
Java User Group Latvia
www.jug.lv
Java 7
Project began in August 2006
JDK7 is done via Open JDK effort
Major release – JVM, language and library changes
Current status – milestone M10, build b115, planned
release Mid 2011
Initially planned features
Closures – Project Lambda
Small language changes – Project Coin
Modularity for Java platform – Project Jigsaw
Support for dynamically-typed languages
Core and IO library extensions
Swing and UI related changes
Support for updated standards - Unicode, localization,
security, cryptography, XML and JDBC
Two release plans
Plan A
All features, release in Mid 2012
Plan B
JDK 7 minus Lambda, Jigsaw and part of Coin,
release in Mid 2011
JDK 8, release in late 2012
Plan B selected
Plan A
All features, release in Mid 2012
Plan B
JDK 7 minus Lambda, Jigsaw and part of Coin,
release in Mid 2011
JDK 8, release in late 2012
Approved feature list
JSR 292: Support for Dynamically-Typed Languages
(“InvokeDynamic”)
Small Language Enhancements (Project Coin)
Concurrency and Collections Updates (including the Fork/Join
Framework)
Upgrade Class-Loader Architecture
Unicode 6.0
JSR 203: More New I/O APIs (“NIO 2”)
Updated cryptography
JDBC 4.1
Translucent & Shaped Windows
Heavyweight/Lightweight Component Mixing
Swing: Nimbus Look-and-Feel, JLayer Component
Update the XML Stack (JAXP, JAXB, & JAX-WS)
Language enhancements - Project Coin
Strings in switch statement
GregorianCalendar c = new GregorianCalendar();
int monthNameToDays(String s, int year) {
switch (s) {
case "April": case "June":
case "September": case "November":
return 30;
case "January": case "March":
case "May": case "July":
case "August": case "December":
return 31;
case "February":
return 28 + (c.isLeapYear(year) ? 1 : 0);
default:
return -1;
}
}
Improved Type Inference for Generic
Instance Creation
Map<Integer, List<String>> map =
new HashMap<Integer, List<String>>();
New “diamond” operator:
Map<Integer, List<String>> map = new HashMap<>();
List<?> l = new ArrayList<>();
Try-with-resources
void copy(String src, String dest) throws IOException {
InputStream in = new FileInputStream(src);
try {
OutputStream out = new FileOutputStream(dest);
try {
byte[] buf = new byte[8 * 1024];
int n;
while ((n = in.read(buf)) >= 0)
out.write(buf, 0, n);
} finally {
out.close();
}
} finally {
in.close();
}
}
Try-with-resources
void copy(String src, String dest) throws IOException {
try (InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dest)) {
byte[] buf = new byte[8192];
int n;
while ((n = in.read(buf)) >= 0)
out.write(buf, 0, n);
}
}
Try-with-resources
void copy(String src, String dest) {
try (InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dest)) {
byte[] buf = new byte[8192];
int n;
while ((n = in.read(buf)) >= 0)
out.write(buf, 0, n);
} catch (IOException e) {
e.printStackTrace();
}
}
Try-with-resources
package java.lang;
public interface AutoCloseable {
void close() throws Exception;
}
package java.io;
public interface Closeable extends AutoCloseable {
void close() throws IOException;
}
Multi-catch
try {
String.class.newInstance();
} catch (final IllegalAccessException |
InstantiationException e) {
e.printStackTrace();
throw e;
} catch (Exception e) {
// handle exception
}
Integer and binary literals
byte b = 0b00100101;
int phoneNumber = 123_456_7890;
long creditCardNumber = 1234_5678_9012_3456L;
int hexBytes = 0xFF_EC_DE_5E;
Simplified Varargs Method Invocation
List<String> a = new ArrayList<String>(),
b = new ArrayList<String>(),
c = new ArrayList<String>();
// Warning: [unchecked] unchecked generic array
// creation for varargs parameter of type
// List<String>[]
return Arrays.asList(a, b, c);
Language enhancements postponed
until Java 8
Language enhancements in Java 8
Collection literals and indexing
List<String> cities = ["Riga", "London", "Tokio"];
Set<String> countries = { "LV", "LT", "EE" };
Map<String, Double> atomicWeights = { "H" : 1.0079,
"He" : 4.0026, "Li" : 6.941 };
String city = cities[0];
Double weight = atomicWeights["H"];
Language enhancements in Java 8
Closures
#{ int x -> x + 1 }
#{ System.out.println("Hello, World!") }
list.forEach(#{ e -> System.out.println(e) });
Arrays.sort(array, #{ a, b -> a.compareToIgnoreCase(b) });
Language enhancements in Java 8
Method references
class Person {
public static int compareByAge(Person a, Person b) { ... }
}
Person[] people = ...
Arrays.sort(people, #Person.compareByAge);
Arrays.sort(people, #Person.compareByAge(Person, Person));
Arrays.sort(people, #comparatorHolder.comparePersonByAge);
JSR 292 – Support for Dynamically-
Typed languages
JSR 292 - Overview
Dynamic languages on the JVM
JSR 223 implemented in JDK6
JVM initially designed for statically-typed language
4 bytecode instructions available for method invocations
Invokestatic
Invokevirtual
Invokespecial
Invokeinterface
new bytecode instruction "invokedynamic“ and Method
Handles
java.dyn package
JSR 292 – Method Handles
Method handle is a lightweight pointer or reference to a
method
java.dyn.MethodHandle
Example
public void testMethodHandle() throws Throwable {
MethodHandle hndl = MethodHandles.lookup().findVirtual(
PrintStream.class, "println",
MethodType.methodType(void.class, String.class));
hndl.<void>invokeGeneric(System.out, "Hello, MethodHandle!");
}
JSR 292 Invokedynamic – how it works?
JVM encounters invokedynamic instruction
JVM invokes the bootstrap method
The Bootstrap method resolves the method handle
The Bootstrap method must be previously registered in
JVM
Future calls don't require the Bootstrap method
invocation
JSR 292 InvokeDynamic, Java example
public void testDynamic() throws Throwable {
InvokeDynamic.<void>greet("World");
}
static {
Linkage.registerBootstrapMethod("bootstrap");
}
public static void greet(String str) {
System.out.println("Hello, dynamic " + str);
}
private static CallSite bootstrap(Class caller, String name,
MethodType type) {
CallSite site = new CallSite(caller, name, MethodType.make(void.class));
site.setTarget(MethodHandles.lookup().findStatic(Test.class, name,
MethodType.make(void.class, String.class)));
return site;
}
NIO.2
NIO.2 – Paths
java.nio.file.Path – a replacement for java.io.File
File file = new File("index.html");
Path path = Paths.get("index.html");
Path path = new File("index.html").toPath();
All Path methods throw exceptions in case of errors
if (!file.delete()){
...
}
try {
path.delete();
} catch (IOException e) {
...
}
NIO.2 – FileSystem
Provides interface to file system
Default file system is local/platform file system
FileSystem local = FileSystems.getDefault();
Path p = local.getPath(“filename");
Path p2 = Paths.get(“filename”);
Jar and Zip file systems included
NIO.2 – DirectoryStream
DirectoryStream to iterate over the entries
Scales to large directories
Filter using glob, regex, or custom filter
try (DirectoryStream<Path> stream =
dir.newDirectoryStream("*.{c,h,cpp,hpp,java}")) {
for (Path entry : stream) {
...
}
}
NIO.2 - Files.walkFileTree
Walks a file tree rooted at a given starting file
Invoke FileVisitor method for each file/directory
interface FileVisitor<T> {
FileVisitResult preVisitDirectory(T dir);
FileVisitResult visitFile(T file, BasicFileAttributes attrs);
FileVisitResult visitFileFailed(T file, IOException exc);
FileVisitResult postVisitDirectory(T dir, IOException exc);
}
SimpleFileVisitor – a default implementation
NIO.2 - File change notifications
Current approach – polling the file system
WatchService – watch registered objects (Watchables) for changes
WatchService watcher =
path.getFileSystem().newWatchService();
path.register(watcher, ENTRY_CREATE, ENTRY_MODIFY);
for (;;) {
WatchKey watchKey = watcher.take();
for (WatchEvent event : watchKey.pollEvents()) {
System.out.println(event.kind() + " : “
+ event.context());
}
watchKey.reset();
}
Fork/Join framework
Fork/Join Framework
Multicore era approaching
Moore’s Law doesn’t work since ~2003
Current solution (java.util.concurrent) has its
limitations
Coarse grained parallelism
Inefficient CPU utilization
Solution: Fork/Join framework
Fork/Join – Divide and conquer
Result solve(Problem problem) {
if (problem.size < SEQUENTIAL_THRESHOLD)
return solveSequentially(problem);
else {
Result left, right;
INVOKE-IN-PARALLEL {
left = solve(extractLeftHalf(problem));
right = solve(extractRightHalf(problem));
}
return combine(left, right);
}
}
Fork/Join - architecture
ForkJoinExecutor, ForkJoinTask
Each worker thread has it’s own task queue (deque) –
no concurrency between treads for tasks
Work stealing algorithm – threads are never idle
Fork/Join - ParallelArray
ParallelArray<T>, ParallelLongArray etc.
Supports filtering, mapping, searching, sorting,
reducing etc.
ParallelArray example
ParallelArray<Order> orders = new ParallelArray<>(fjPool, data);
double maxAmount = orders
.withFilter(madeThisYear)
.withMapping(getAmount)
.max();
static final Ops.Predicate<Order> madeThisYear = new Ops.Predicate<>() {
public boolean op(Order o) {
return o.getYear() == thisYear;
}
};
static final Ops.ObjectToDouble<Order> getAmount = new
Ops.ObjectToDouble<>() {
public double op(Order o) {
return o.getAmount();
}
};
Try it yourself
Download JDK 7 early access
https://jdk7.dev.java.net/
Questions

Mais conteúdo relacionado

Mais procurados

Looking Ahead to Tcl 8.6
Looking Ahead to Tcl 8.6Looking Ahead to Tcl 8.6
Looking Ahead to Tcl 8.6ActiveState
 
An introduction into Spring Data
An introduction into Spring DataAn introduction into Spring Data
An introduction into Spring DataOliver Gierke
 
10 Lines or Less; Interesting Things You Can Do In Java With Minimal Code
10 Lines or Less; Interesting Things You Can Do In Java With Minimal Code10 Lines or Less; Interesting Things You Can Do In Java With Minimal Code
10 Lines or Less; Interesting Things You Can Do In Java With Minimal CodeKathy Brown
 
BP107: Ten Lines Or Less: Interesting Things You Can Do In Java With Minimal ...
BP107: Ten Lines Or Less: Interesting Things You Can Do In Java With Minimal ...BP107: Ten Lines Or Less: Interesting Things You Can Do In Java With Minimal ...
BP107: Ten Lines Or Less: Interesting Things You Can Do In Java With Minimal ...panagenda
 
Python mongo db-training-europython-2011
Python mongo db-training-europython-2011Python mongo db-training-europython-2011
Python mongo db-training-europython-2011Andreas Jung
 
Spring data presentation
Spring data presentationSpring data presentation
Spring data presentationOleksii Usyk
 
Session 23 - JDBC
Session 23 - JDBCSession 23 - JDBC
Session 23 - JDBCPawanMM
 
Session 22 - Java IO, Serialization
Session 22 - Java IO, SerializationSession 22 - Java IO, Serialization
Session 22 - Java IO, SerializationPawanMM
 
Advance Java Programs skeleton
Advance Java Programs skeletonAdvance Java Programs skeleton
Advance Java Programs skeletonIram Ramrajkar
 
Data access 2.0? Please welcome: Spring Data!
Data access 2.0? Please welcome: Spring Data!Data access 2.0? Please welcome: Spring Data!
Data access 2.0? Please welcome: Spring Data!Oliver Gierke
 
Lambda Chops - Recipes for Simpler, More Expressive Code
Lambda Chops - Recipes for Simpler, More Expressive CodeLambda Chops - Recipes for Simpler, More Expressive Code
Lambda Chops - Recipes for Simpler, More Expressive CodeIan Robertson
 
Session 24 - JDBC, Intro to Enterprise Java
Session 24 - JDBC, Intro to Enterprise JavaSession 24 - JDBC, Intro to Enterprise Java
Session 24 - JDBC, Intro to Enterprise JavaPawanMM
 
EuroPython 2015 - Big Data with Python and Hadoop
EuroPython 2015 - Big Data with Python and HadoopEuroPython 2015 - Big Data with Python and Hadoop
EuroPython 2015 - Big Data with Python and HadoopMax Tepkeev
 

Mais procurados (20)

Looking Ahead to Tcl 8.6
Looking Ahead to Tcl 8.6Looking Ahead to Tcl 8.6
Looking Ahead to Tcl 8.6
 
JAVA NIO
JAVA NIOJAVA NIO
JAVA NIO
 
An introduction into Spring Data
An introduction into Spring DataAn introduction into Spring Data
An introduction into Spring Data
 
Files and streams
Files and streamsFiles and streams
Files and streams
 
ROracle
ROracle ROracle
ROracle
 
10 Lines or Less; Interesting Things You Can Do In Java With Minimal Code
10 Lines or Less; Interesting Things You Can Do In Java With Minimal Code10 Lines or Less; Interesting Things You Can Do In Java With Minimal Code
10 Lines or Less; Interesting Things You Can Do In Java With Minimal Code
 
BP107: Ten Lines Or Less: Interesting Things You Can Do In Java With Minimal ...
BP107: Ten Lines Or Less: Interesting Things You Can Do In Java With Minimal ...BP107: Ten Lines Or Less: Interesting Things You Can Do In Java With Minimal ...
BP107: Ten Lines Or Less: Interesting Things You Can Do In Java With Minimal ...
 
Python mongo db-training-europython-2011
Python mongo db-training-europython-2011Python mongo db-training-europython-2011
Python mongo db-training-europython-2011
 
Spring data presentation
Spring data presentationSpring data presentation
Spring data presentation
 
Session 23 - JDBC
Session 23 - JDBCSession 23 - JDBC
Session 23 - JDBC
 
Adventures in TclOO
Adventures in TclOOAdventures in TclOO
Adventures in TclOO
 
Session 22 - Java IO, Serialization
Session 22 - Java IO, SerializationSession 22 - Java IO, Serialization
Session 22 - Java IO, Serialization
 
Advance Java Programs skeleton
Advance Java Programs skeletonAdvance Java Programs skeleton
Advance Java Programs skeleton
 
System Programming and Administration
System Programming and AdministrationSystem Programming and Administration
System Programming and Administration
 
Data access 2.0? Please welcome: Spring Data!
Data access 2.0? Please welcome: Spring Data!Data access 2.0? Please welcome: Spring Data!
Data access 2.0? Please welcome: Spring Data!
 
Lambda Chops - Recipes for Simpler, More Expressive Code
Lambda Chops - Recipes for Simpler, More Expressive CodeLambda Chops - Recipes for Simpler, More Expressive Code
Lambda Chops - Recipes for Simpler, More Expressive Code
 
Session 24 - JDBC, Intro to Enterprise Java
Session 24 - JDBC, Intro to Enterprise JavaSession 24 - JDBC, Intro to Enterprise Java
Session 24 - JDBC, Intro to Enterprise Java
 
4 sesame
4 sesame4 sesame
4 sesame
 
EuroPython 2015 - Big Data with Python and Hadoop
EuroPython 2015 - Big Data with Python and HadoopEuroPython 2015 - Big Data with Python and Hadoop
EuroPython 2015 - Big Data with Python and Hadoop
 
JDBC
JDBCJDBC
JDBC
 

Destaque

InvokeDynamic at #shikadriven 2012
InvokeDynamic at #shikadriven 2012InvokeDynamic at #shikadriven 2012
InvokeDynamic at #shikadriven 2012Go Tanaka
 
Welcome to the AWS Cloud - AWS Symposium 2014 - Washington D.C.
Welcome to the AWS Cloud - AWS Symposium 2014 - Washington D.C. Welcome to the AWS Cloud - AWS Symposium 2014 - Washington D.C.
Welcome to the AWS Cloud - AWS Symposium 2014 - Washington D.C. Amazon Web Services
 
Charles nutter star techconf 2011 - jvm languages
Charles nutter   star techconf 2011 - jvm languagesCharles nutter   star techconf 2011 - jvm languages
Charles nutter star techconf 2011 - jvm languagesStarTech Conference
 
Evolving Operations for BBC iPlayer
Evolving Operations for BBC iPlayerEvolving Operations for BBC iPlayer
Evolving Operations for BBC iPlayerAmazon Web Services
 
Large scale-olap-with-kobayashi
Large scale-olap-with-kobayashiLarge scale-olap-with-kobayashi
Large scale-olap-with-kobayashiBoundary
 
Java Closures
Java ClosuresJava Closures
Java ClosuresBen Evans
 

Destaque (8)

InvokeDynamic at #shikadriven 2012
InvokeDynamic at #shikadriven 2012InvokeDynamic at #shikadriven 2012
InvokeDynamic at #shikadriven 2012
 
Welcome to the AWS Cloud - AWS Symposium 2014 - Washington D.C.
Welcome to the AWS Cloud - AWS Symposium 2014 - Washington D.C. Welcome to the AWS Cloud - AWS Symposium 2014 - Washington D.C.
Welcome to the AWS Cloud - AWS Symposium 2014 - Washington D.C.
 
Charles nutter star techconf 2011 - jvm languages
Charles nutter   star techconf 2011 - jvm languagesCharles nutter   star techconf 2011 - jvm languages
Charles nutter star techconf 2011 - jvm languages
 
Evolving Operations for BBC iPlayer
Evolving Operations for BBC iPlayerEvolving Operations for BBC iPlayer
Evolving Operations for BBC iPlayer
 
Large scale-olap-with-kobayashi
Large scale-olap-with-kobayashiLarge scale-olap-with-kobayashi
Large scale-olap-with-kobayashi
 
Going Cloud First at the FT
Going Cloud First at the FTGoing Cloud First at the FT
Going Cloud First at the FT
 
Java Closures
Java ClosuresJava Closures
Java Closures
 
Rjb
RjbRjb
Rjb
 

Semelhante a Jug java7

JDK1.7 features
JDK1.7 featuresJDK1.7 features
JDK1.7 featuresindia_mani
 
Java 7, 8 & 9 - Moving the language forward
Java 7, 8 & 9 - Moving the language forwardJava 7, 8 & 9 - Moving the language forward
Java 7, 8 & 9 - Moving the language forwardMario Fusco
 
Scalable and Flexible Machine Learning With Scala @ LinkedIn
Scalable and Flexible Machine Learning With Scala @ LinkedInScalable and Flexible Machine Learning With Scala @ LinkedIn
Scalable and Flexible Machine Learning With Scala @ LinkedInVitaly Gordon
 
WhatsNewNIO2.pdf
WhatsNewNIO2.pdfWhatsNewNIO2.pdf
WhatsNewNIO2.pdfMohit Kumar
 
Java 7 Whats New(), Whats Next() from Oredev
Java 7 Whats New(), Whats Next() from OredevJava 7 Whats New(), Whats Next() from Oredev
Java 7 Whats New(), Whats Next() from OredevMattias Karlsson
 
5. Ввод-вывод, доступ к файловой системе
5. Ввод-вывод, доступ к файловой системе5. Ввод-вывод, доступ к файловой системе
5. Ввод-вывод, доступ к файловой системеDEVTYPE
 
New Features Of JDK 7
New Features Of JDK 7New Features Of JDK 7
New Features Of JDK 7Deniz Oguz
 
JRubyKaigi2010 Hadoop Papyrus
JRubyKaigi2010 Hadoop PapyrusJRubyKaigi2010 Hadoop Papyrus
JRubyKaigi2010 Hadoop PapyrusKoichi Fujikawa
 
Why is Java relevant? New features of Java8
Why is Java relevant? New features of Java8 Why is Java relevant? New features of Java8
Why is Java relevant? New features of Java8 xshyamx
 
Golang basics for Java developers - Part 1
Golang basics for Java developers - Part 1Golang basics for Java developers - Part 1
Golang basics for Java developers - Part 1Robert Stern
 
Twitter Author Prediction from Tweets using Bayesian Network
Twitter Author Prediction from Tweets using Bayesian NetworkTwitter Author Prediction from Tweets using Bayesian Network
Twitter Author Prediction from Tweets using Bayesian NetworkHendy Irawan
 
Java 7 Features and Enhancements
Java 7 Features and EnhancementsJava 7 Features and Enhancements
Java 7 Features and EnhancementsGagan Agrawal
 
Scala is java8.next()
Scala is java8.next()Scala is java8.next()
Scala is java8.next()daewon jeong
 
Terence Barr - jdk7+8 - 24mai2011
Terence Barr - jdk7+8 - 24mai2011Terence Barr - jdk7+8 - 24mai2011
Terence Barr - jdk7+8 - 24mai2011Agora Group
 
Softshake 2013: 10 reasons why java developers are jealous of Scala developers
Softshake 2013: 10 reasons why java developers are jealous of Scala developersSoftshake 2013: 10 reasons why java developers are jealous of Scala developers
Softshake 2013: 10 reasons why java developers are jealous of Scala developersMatthew Farwell
 

Semelhante a Jug java7 (20)

JDK1.7 features
JDK1.7 featuresJDK1.7 features
JDK1.7 features
 
Java 7, 8 & 9 - Moving the language forward
Java 7, 8 & 9 - Moving the language forwardJava 7, 8 & 9 - Moving the language forward
Java 7, 8 & 9 - Moving the language forward
 
Scalable and Flexible Machine Learning With Scala @ LinkedIn
Scalable and Flexible Machine Learning With Scala @ LinkedInScalable and Flexible Machine Learning With Scala @ LinkedIn
Scalable and Flexible Machine Learning With Scala @ LinkedIn
 
WhatsNewNIO2.pdf
WhatsNewNIO2.pdfWhatsNewNIO2.pdf
WhatsNewNIO2.pdf
 
Java 7 & 8 New Features
Java 7 & 8 New FeaturesJava 7 & 8 New Features
Java 7 & 8 New Features
 
Java 7 Whats New(), Whats Next() from Oredev
Java 7 Whats New(), Whats Next() from OredevJava 7 Whats New(), Whats Next() from Oredev
Java 7 Whats New(), Whats Next() from Oredev
 
5. Ввод-вывод, доступ к файловой системе
5. Ввод-вывод, доступ к файловой системе5. Ввод-вывод, доступ к файловой системе
5. Ввод-вывод, доступ к файловой системе
 
New Features Of JDK 7
New Features Of JDK 7New Features Of JDK 7
New Features Of JDK 7
 
JRubyKaigi2010 Hadoop Papyrus
JRubyKaigi2010 Hadoop PapyrusJRubyKaigi2010 Hadoop Papyrus
JRubyKaigi2010 Hadoop Papyrus
 
Java I/o streams
Java I/o streamsJava I/o streams
Java I/o streams
 
Java
JavaJava
Java
 
Power tools in Java
Power tools in JavaPower tools in Java
Power tools in Java
 
Why is Java relevant? New features of Java8
Why is Java relevant? New features of Java8 Why is Java relevant? New features of Java8
Why is Java relevant? New features of Java8
 
Golang basics for Java developers - Part 1
Golang basics for Java developers - Part 1Golang basics for Java developers - Part 1
Golang basics for Java developers - Part 1
 
Twitter Author Prediction from Tweets using Bayesian Network
Twitter Author Prediction from Tweets using Bayesian NetworkTwitter Author Prediction from Tweets using Bayesian Network
Twitter Author Prediction from Tweets using Bayesian Network
 
Java 7 Features and Enhancements
Java 7 Features and EnhancementsJava 7 Features and Enhancements
Java 7 Features and Enhancements
 
Scala is java8.next()
Scala is java8.next()Scala is java8.next()
Scala is java8.next()
 
Terence Barr - jdk7+8 - 24mai2011
Terence Barr - jdk7+8 - 24mai2011Terence Barr - jdk7+8 - 24mai2011
Terence Barr - jdk7+8 - 24mai2011
 
Apache Beam de A à Z
 Apache Beam de A à Z Apache Beam de A à Z
Apache Beam de A à Z
 
Softshake 2013: 10 reasons why java developers are jealous of Scala developers
Softshake 2013: 10 reasons why java developers are jealous of Scala developersSoftshake 2013: 10 reasons why java developers are jealous of Scala developers
Softshake 2013: 10 reasons why java developers are jealous of Scala developers
 

Mais de Dmitry Buzdin

How Payment Cards Really Work?
How Payment Cards Really Work?How Payment Cards Really Work?
How Payment Cards Really Work?Dmitry Buzdin
 
Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Dmitry Buzdin
 
How to grow your own Microservice?
How to grow your own Microservice?How to grow your own Microservice?
How to grow your own Microservice?Dmitry Buzdin
 
How to Build Your Own Test Automation Framework?
How to Build Your Own Test Automation Framework?How to Build Your Own Test Automation Framework?
How to Build Your Own Test Automation Framework?Dmitry Buzdin
 
Delivery Pipeline for Windows Machines
Delivery Pipeline for Windows MachinesDelivery Pipeline for Windows Machines
Delivery Pipeline for Windows MachinesDmitry Buzdin
 
Big Data Processing Using Hadoop Infrastructure
Big Data Processing Using Hadoop InfrastructureBig Data Processing Using Hadoop Infrastructure
Big Data Processing Using Hadoop InfrastructureDmitry Buzdin
 
Developing Useful APIs
Developing Useful APIsDeveloping Useful APIs
Developing Useful APIsDmitry Buzdin
 
Архитектура Ленты на Одноклассниках
Архитектура Ленты на ОдноклассникахАрхитектура Ленты на Одноклассниках
Архитектура Ленты на ОдноклассникахDmitry Buzdin
 
Riding Redis @ask.fm
Riding Redis @ask.fmRiding Redis @ask.fm
Riding Redis @ask.fmDmitry Buzdin
 
Rubylight JUG Contest Results Part II
Rubylight JUG Contest Results Part IIRubylight JUG Contest Results Part II
Rubylight JUG Contest Results Part IIDmitry Buzdin
 
Rubylight Pattern-Matching Solutions
Rubylight Pattern-Matching SolutionsRubylight Pattern-Matching Solutions
Rubylight Pattern-Matching SolutionsDmitry Buzdin
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with ClojureDmitry Buzdin
 
Poor Man's Functional Programming
Poor Man's Functional ProgrammingPoor Man's Functional Programming
Poor Man's Functional ProgrammingDmitry Buzdin
 
Rubylight programming contest
Rubylight programming contestRubylight programming contest
Rubylight programming contestDmitry Buzdin
 
Continuous Delivery
Continuous Delivery Continuous Delivery
Continuous Delivery Dmitry Buzdin
 
Introduction to DevOps
Introduction to DevOpsIntroduction to DevOps
Introduction to DevOpsDmitry Buzdin
 
Thread Dump Analysis
Thread Dump AnalysisThread Dump Analysis
Thread Dump AnalysisDmitry Buzdin
 

Mais de Dmitry Buzdin (20)

How Payment Cards Really Work?
How Payment Cards Really Work?How Payment Cards Really Work?
How Payment Cards Really Work?
 
Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?
 
How to grow your own Microservice?
How to grow your own Microservice?How to grow your own Microservice?
How to grow your own Microservice?
 
How to Build Your Own Test Automation Framework?
How to Build Your Own Test Automation Framework?How to Build Your Own Test Automation Framework?
How to Build Your Own Test Automation Framework?
 
Delivery Pipeline for Windows Machines
Delivery Pipeline for Windows MachinesDelivery Pipeline for Windows Machines
Delivery Pipeline for Windows Machines
 
Big Data Processing Using Hadoop Infrastructure
Big Data Processing Using Hadoop InfrastructureBig Data Processing Using Hadoop Infrastructure
Big Data Processing Using Hadoop Infrastructure
 
JOOQ and Flyway
JOOQ and FlywayJOOQ and Flyway
JOOQ and Flyway
 
Developing Useful APIs
Developing Useful APIsDeveloping Useful APIs
Developing Useful APIs
 
Whats New in Java 8
Whats New in Java 8Whats New in Java 8
Whats New in Java 8
 
Архитектура Ленты на Одноклассниках
Архитектура Ленты на ОдноклассникахАрхитектура Ленты на Одноклассниках
Архитектура Ленты на Одноклассниках
 
Dart Workshop
Dart WorkshopDart Workshop
Dart Workshop
 
Riding Redis @ask.fm
Riding Redis @ask.fmRiding Redis @ask.fm
Riding Redis @ask.fm
 
Rubylight JUG Contest Results Part II
Rubylight JUG Contest Results Part IIRubylight JUG Contest Results Part II
Rubylight JUG Contest Results Part II
 
Rubylight Pattern-Matching Solutions
Rubylight Pattern-Matching SolutionsRubylight Pattern-Matching Solutions
Rubylight Pattern-Matching Solutions
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with Clojure
 
Poor Man's Functional Programming
Poor Man's Functional ProgrammingPoor Man's Functional Programming
Poor Man's Functional Programming
 
Rubylight programming contest
Rubylight programming contestRubylight programming contest
Rubylight programming contest
 
Continuous Delivery
Continuous Delivery Continuous Delivery
Continuous Delivery
 
Introduction to DevOps
Introduction to DevOpsIntroduction to DevOps
Introduction to DevOps
 
Thread Dump Analysis
Thread Dump AnalysisThread Dump Analysis
Thread Dump Analysis
 

Último

Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 

Último (20)

Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 

Jug java7

  • 1. Java 7 new features Java User Group Latvia www.jug.lv
  • 2. Java 7 Project began in August 2006 JDK7 is done via Open JDK effort Major release – JVM, language and library changes Current status – milestone M10, build b115, planned release Mid 2011
  • 3. Initially planned features Closures – Project Lambda Small language changes – Project Coin Modularity for Java platform – Project Jigsaw Support for dynamically-typed languages Core and IO library extensions Swing and UI related changes Support for updated standards - Unicode, localization, security, cryptography, XML and JDBC
  • 4. Two release plans Plan A All features, release in Mid 2012 Plan B JDK 7 minus Lambda, Jigsaw and part of Coin, release in Mid 2011 JDK 8, release in late 2012
  • 5. Plan B selected Plan A All features, release in Mid 2012 Plan B JDK 7 minus Lambda, Jigsaw and part of Coin, release in Mid 2011 JDK 8, release in late 2012
  • 6. Approved feature list JSR 292: Support for Dynamically-Typed Languages (“InvokeDynamic”) Small Language Enhancements (Project Coin) Concurrency and Collections Updates (including the Fork/Join Framework) Upgrade Class-Loader Architecture Unicode 6.0 JSR 203: More New I/O APIs (“NIO 2”) Updated cryptography JDBC 4.1 Translucent & Shaped Windows Heavyweight/Lightweight Component Mixing Swing: Nimbus Look-and-Feel, JLayer Component Update the XML Stack (JAXP, JAXB, & JAX-WS)
  • 7. Language enhancements - Project Coin
  • 8. Strings in switch statement GregorianCalendar c = new GregorianCalendar(); int monthNameToDays(String s, int year) { switch (s) { case "April": case "June": case "September": case "November": return 30; case "January": case "March": case "May": case "July": case "August": case "December": return 31; case "February": return 28 + (c.isLeapYear(year) ? 1 : 0); default: return -1; } }
  • 9. Improved Type Inference for Generic Instance Creation Map<Integer, List<String>> map = new HashMap<Integer, List<String>>(); New “diamond” operator: Map<Integer, List<String>> map = new HashMap<>(); List<?> l = new ArrayList<>();
  • 10. Try-with-resources void copy(String src, String dest) throws IOException { InputStream in = new FileInputStream(src); try { OutputStream out = new FileOutputStream(dest); try { byte[] buf = new byte[8 * 1024]; int n; while ((n = in.read(buf)) >= 0) out.write(buf, 0, n); } finally { out.close(); } } finally { in.close(); } }
  • 11. Try-with-resources void copy(String src, String dest) throws IOException { try (InputStream in = new FileInputStream(src); OutputStream out = new FileOutputStream(dest)) { byte[] buf = new byte[8192]; int n; while ((n = in.read(buf)) >= 0) out.write(buf, 0, n); } }
  • 12. Try-with-resources void copy(String src, String dest) { try (InputStream in = new FileInputStream(src); OutputStream out = new FileOutputStream(dest)) { byte[] buf = new byte[8192]; int n; while ((n = in.read(buf)) >= 0) out.write(buf, 0, n); } catch (IOException e) { e.printStackTrace(); } }
  • 13. Try-with-resources package java.lang; public interface AutoCloseable { void close() throws Exception; } package java.io; public interface Closeable extends AutoCloseable { void close() throws IOException; }
  • 14. Multi-catch try { String.class.newInstance(); } catch (final IllegalAccessException | InstantiationException e) { e.printStackTrace(); throw e; } catch (Exception e) { // handle exception }
  • 15. Integer and binary literals byte b = 0b00100101; int phoneNumber = 123_456_7890; long creditCardNumber = 1234_5678_9012_3456L; int hexBytes = 0xFF_EC_DE_5E;
  • 16. Simplified Varargs Method Invocation List<String> a = new ArrayList<String>(), b = new ArrayList<String>(), c = new ArrayList<String>(); // Warning: [unchecked] unchecked generic array // creation for varargs parameter of type // List<String>[] return Arrays.asList(a, b, c);
  • 18. Language enhancements in Java 8 Collection literals and indexing List<String> cities = ["Riga", "London", "Tokio"]; Set<String> countries = { "LV", "LT", "EE" }; Map<String, Double> atomicWeights = { "H" : 1.0079, "He" : 4.0026, "Li" : 6.941 }; String city = cities[0]; Double weight = atomicWeights["H"];
  • 19. Language enhancements in Java 8 Closures #{ int x -> x + 1 } #{ System.out.println("Hello, World!") } list.forEach(#{ e -> System.out.println(e) }); Arrays.sort(array, #{ a, b -> a.compareToIgnoreCase(b) });
  • 20. Language enhancements in Java 8 Method references class Person { public static int compareByAge(Person a, Person b) { ... } } Person[] people = ... Arrays.sort(people, #Person.compareByAge); Arrays.sort(people, #Person.compareByAge(Person, Person)); Arrays.sort(people, #comparatorHolder.comparePersonByAge);
  • 21. JSR 292 – Support for Dynamically- Typed languages
  • 22. JSR 292 - Overview Dynamic languages on the JVM JSR 223 implemented in JDK6 JVM initially designed for statically-typed language 4 bytecode instructions available for method invocations Invokestatic Invokevirtual Invokespecial Invokeinterface new bytecode instruction "invokedynamic“ and Method Handles java.dyn package
  • 23. JSR 292 – Method Handles Method handle is a lightweight pointer or reference to a method java.dyn.MethodHandle Example public void testMethodHandle() throws Throwable { MethodHandle hndl = MethodHandles.lookup().findVirtual( PrintStream.class, "println", MethodType.methodType(void.class, String.class)); hndl.<void>invokeGeneric(System.out, "Hello, MethodHandle!"); }
  • 24. JSR 292 Invokedynamic – how it works? JVM encounters invokedynamic instruction JVM invokes the bootstrap method The Bootstrap method resolves the method handle The Bootstrap method must be previously registered in JVM Future calls don't require the Bootstrap method invocation
  • 25. JSR 292 InvokeDynamic, Java example public void testDynamic() throws Throwable { InvokeDynamic.<void>greet("World"); } static { Linkage.registerBootstrapMethod("bootstrap"); } public static void greet(String str) { System.out.println("Hello, dynamic " + str); } private static CallSite bootstrap(Class caller, String name, MethodType type) { CallSite site = new CallSite(caller, name, MethodType.make(void.class)); site.setTarget(MethodHandles.lookup().findStatic(Test.class, name, MethodType.make(void.class, String.class))); return site; }
  • 26. NIO.2
  • 27. NIO.2 – Paths java.nio.file.Path – a replacement for java.io.File File file = new File("index.html"); Path path = Paths.get("index.html"); Path path = new File("index.html").toPath(); All Path methods throw exceptions in case of errors if (!file.delete()){ ... } try { path.delete(); } catch (IOException e) { ... }
  • 28. NIO.2 – FileSystem Provides interface to file system Default file system is local/platform file system FileSystem local = FileSystems.getDefault(); Path p = local.getPath(“filename"); Path p2 = Paths.get(“filename”); Jar and Zip file systems included
  • 29. NIO.2 – DirectoryStream DirectoryStream to iterate over the entries Scales to large directories Filter using glob, regex, or custom filter try (DirectoryStream<Path> stream = dir.newDirectoryStream("*.{c,h,cpp,hpp,java}")) { for (Path entry : stream) { ... } }
  • 30. NIO.2 - Files.walkFileTree Walks a file tree rooted at a given starting file Invoke FileVisitor method for each file/directory interface FileVisitor<T> { FileVisitResult preVisitDirectory(T dir); FileVisitResult visitFile(T file, BasicFileAttributes attrs); FileVisitResult visitFileFailed(T file, IOException exc); FileVisitResult postVisitDirectory(T dir, IOException exc); } SimpleFileVisitor – a default implementation
  • 31. NIO.2 - File change notifications Current approach – polling the file system WatchService – watch registered objects (Watchables) for changes WatchService watcher = path.getFileSystem().newWatchService(); path.register(watcher, ENTRY_CREATE, ENTRY_MODIFY); for (;;) { WatchKey watchKey = watcher.take(); for (WatchEvent event : watchKey.pollEvents()) { System.out.println(event.kind() + " : “ + event.context()); } watchKey.reset(); }
  • 33. Fork/Join Framework Multicore era approaching Moore’s Law doesn’t work since ~2003 Current solution (java.util.concurrent) has its limitations Coarse grained parallelism Inefficient CPU utilization Solution: Fork/Join framework
  • 34. Fork/Join – Divide and conquer Result solve(Problem problem) { if (problem.size < SEQUENTIAL_THRESHOLD) return solveSequentially(problem); else { Result left, right; INVOKE-IN-PARALLEL { left = solve(extractLeftHalf(problem)); right = solve(extractRightHalf(problem)); } return combine(left, right); } }
  • 35. Fork/Join - architecture ForkJoinExecutor, ForkJoinTask Each worker thread has it’s own task queue (deque) – no concurrency between treads for tasks Work stealing algorithm – threads are never idle
  • 36. Fork/Join - ParallelArray ParallelArray<T>, ParallelLongArray etc. Supports filtering, mapping, searching, sorting, reducing etc.
  • 37. ParallelArray example ParallelArray<Order> orders = new ParallelArray<>(fjPool, data); double maxAmount = orders .withFilter(madeThisYear) .withMapping(getAmount) .max(); static final Ops.Predicate<Order> madeThisYear = new Ops.Predicate<>() { public boolean op(Order o) { return o.getYear() == thisYear; } }; static final Ops.ObjectToDouble<Order> getAmount = new Ops.ObjectToDouble<>() { public double op(Order o) { return o.getAmount(); } };
  • 38. Try it yourself Download JDK 7 early access https://jdk7.dev.java.net/