2. Ben kimim?
Java* Trainer and Author.
JCP Expert, Istanbul JUG lead and Adopt a JSR
member.
Duke's Choice Award 2015 winner (AsciidocFX).
@javadayistanbul organizer
3. Konular
Jigsaw Related Changes
● JEP 200 - The Module JDK
● JEP 201 - Modular Source Code
● JEP 220 - Modular Run-Time Images
● JEP 260 - Encapsulate Most Internal APIs
● JEP 261 - Module System
● JEP 282 - The Java Linker
The Process API Updates
The Stream API Updates http://openjdk.java.net/projects/jdk9/
4. Jigsaw projesinin hedefleri
Monolitik yapıdan kurtulmak
Java çalışma ortamını esnek yapmak
Daha sağlıklı bir modüler mimari kurmak
Platformun performansını artırmak
Kullanılmaması gerekli API’leri
10. Modül nedir ?
Birbiri ile alakalı Java paketlerinin bir isim ile gruplanmış halidir.
Örneğin: java.sql, javax.sql ve javax.transaction.xa paketleri bir küme haline
getirilerek java.sql modülü oluşturulmuştur.
11. Erişim sınırlayıcılar (< Java 9)
Dil bileşenleri (class, method, field) arası erişilebilirliği tanımlarlar
public
private
protected
package
12. Erişim sınırlayıcılar (>= Java 9)
Dil bileşenleri (module, class, method, field) arası erişilebilirliği tanımlarlar
public ama sadece tanımlı modüle
public ama tüm modüllere
public ama sadece kendi modülüne
private
protected
package
32. jmod
jmod biçimindeki modüler arşiv dosyaları üzerinde işlemler sunar.
cd $JAVA_HOME
jmod list java.httpclient.jmod (Sınıfları listeler)
jmod describe java.httpclient.jmod (Modüler bağı listeler)
33. Yeni Parametreler
--module-path, -modulepath
Modüllerin hangi dizinde olduğu seçilir
--add-modules, -addmods
Hangi modüllerin kök modül olduğunu seçer
--limit-modules
Gerekli olmayan modüllerin süzülmesi içindir
-listmods
34. Java 9 Compact Profiles
Amacı sık tercih edilen Java API’lerini gruplamaktır.
38. Mevcut uygulamanızın Java 9’a taşınması
Eğer N bir Java versiyonu ise;
Uygulamanız standart paketleri kullandıysa;
● N versiyonda çalışan N + 1 versiyonda da çalışır.
Uygulamanız JDK özel paketleri kullandıysa;
● N versiyonda çalışan N + 1 versiyonda çalışmayabilir.
● Eğer çalışmazsa;
https://wiki.openjdk.java.net/display/JDK8/Java+Depen
dency+Analysis+Tool
Meşhur sun.misc.Unsafe
39. jdeps ile bağımlılık analizi
jdeps bir modül veya jar içindeki bağımlılık ilişkisini çıktılar
jdeps hello.jar
jdeps -jdkinternals hello.jar
Eğer var ise uygulamanızın kullandığı JDK içi kullanımları listeler
40. Mevcut uygulamanızın Java 9’da çalışması
$ jdeps -jdkinternals AsciidocFX-1.4.7.jar
AsciidocFX-1.4.7.jar -> JDK removed internal API
AsciidocFX-1.4.7.jar -> javafx.graphics
com.kodcu.comp.ViewPanel -> com.sun.javafx.*.ContextMenuContent JDK internal API (JDK removed internal API)
com.kodcu.comp.ViewPanel -> com.sun.javafx.*.ContextMenuContent$MenuItemContainer JDK internal API (JDK
removed internal API)
com.kodcu.comp.AppController -> com.sun.javafx.*.StageHelper JDK internal API (javafx.graphics)
Warning: JDK internal APIs are unsupported and private to JDK implementation that are subject to be removed or
changed incompatibly and could break your application.
Please modify your code to eliminate dependency on any JDK internal APIs.
For the most recent update on JDK internal API replacements, please check:
https://wiki.openjdk.java.net/display/JDK8/Java+Dependency+Analysis+Tool
41. Process API Güncellemeleri
Process API, bir işletim sistemi process’ini yönetmeyi sağlar. Artık daha fazla ek
bilgi sunuyor!
● Process’e ait PID öğrenme
● Process’i hangi işletim sistemi kullanıcısının çalıştırdığı
● Process’in çalıştırıldığı komut ve parameteler
● Process’in çalışma başladığı ve geçen süre
43. ProcessHandle
Process API, yeni özelliklerini ProcessHandle üzerinden sunuyor.
ProcessHandle processHandle = …
long pid = processHandle.getPid();
ProcessHandle.Info info = processHandle.info();
Optional<String> command = info.command();
Optional<String[]> arguments = info.arguments();
Optional<Instant> startInstant = info.startInstant();
Optional<Duration> totalCpuDuration = info.totalCpuDuration();
Optional<String> user = info.user();
44. ProcessHandle nasıl elde edilir?
Process process= …
ProcessHandle handle1= process.toHandle();
ProcessHandle handle2= ProcessHandle.current();
Optional<ProcessHandle> handle3 = ProcessHandle.of(7865);
Stream<ProcessHandle> handle4= ProcessHandle.allProcesses();
45. Görev
Yeni Process API kullanarak bir Görev Yöneticisi aracı yazınız.
Görev yöneticisi, listeleme ve istenilen işletim process’ini durdurmaya imkan
vermelidir.
47. Stream API ile iterasyon
Stream.iterate(1, t -> t <= 10, t -> t + 1)
.forEach(System.out::println);
args[0] => başlangı değeri
args[1] => şart
args[2] => yeni değer üreten fonksiyon
48. Stream API ile infinite stream
Stream.iterate(1, t -> t + 1)
.forEach(System.out::println);
args[0] => başlangı değeri
args[2] => yeni değer üreten fonksiyon
49. Stream#takeWhile
Bir stream’de başlangıç noktasından belirlenen noktaya kadar elemanlardan yeni
bir stream üretir.
Stream<Integer> oneToTen = Stream.iterate(1, t -> t <= 10, t -> t + 1);
oneToHundred
.takeWhile(t -> t <= 4)
.forEach(System.out::println); ??
50. Stream#dropWhile
Bir stream’de belirlenen bir noktadan stream son noktasına kadar elemanlardan
yeni bir stream üretir.
Stream<Integer> oneToTen = Stream.iterate(1, t -> t <= 10, t -> t + 1);
oneToHundred
.dropWhile(t -> t <= 4)
.forEach(System.out::println); ??