SlideShare a Scribd company logo
Nowości w Javie 8 okiem programisty
Marcin Stachniuk
mstachniuk@gmail.com
http://mstachniuk.blogspot.com
7 marca 2015
Marcin Stachniuk Nowości w Javie 8 okiem programisty 1/25
O mnie
Marcin Stachniuk
Chorąży na chamberconf.pl
Kontakt: mstachniuk@gmail.com
Blog: mstachniuk.blogspot.com
Twitter: @MarcinStachniuk
Recenzent: practicalunittesting.com
Marcin Stachniuk Nowości w Javie 8 okiem programisty 2/25
Agenda
1 Wyrażenia Lambda
2 Strumienie danych
3 Domyślne metody w interfejsach
4 Statyczne metody w interfejsach
5 Permanent Generation
Marcin Stachniuk Nowości w Javie 8 okiem programisty 3/25
Agenda
1 Wyrażenia Lambda
2 Strumienie danych
3 Domyślne metody w interfejsach
4 Statyczne metody w interfejsach
5 Permanent Generation
Marcin Stachniuk Nowości w Javie 8 okiem programisty 4/25
Czym jest Lambda?
Wyrażenia Lambda (λ) to w uproszczeniu implementacja
anonimowej, wewnętrznej klasy zawierająca dokładnie jedną
abstrakcyjną metodę.
Marcin Stachniuk Nowości w Javie 8 okiem programisty 5/25
Czym jest Lambda?
Przykład, czyli zamiast tego kodu:
1: List<Integer> numbers = Arrays.asList(1, 5, 6, 7, 2, 4, 3);
2:
3: numbers.sort(new Comparator<Integer>() {
4: @Override
5: public int compare(Integer n1, Integer n2) {
6: return n2 - n1;
7: }
8: });
możemy napisać tak:
1: numbers.sort((n1, n2) -> n2 - n1);
lub tak:
1: numbers.sort(Comparator.reverseOrder());
Marcin Stachniuk Nowości w Javie 8 okiem programisty 6/25
Czym jest Lambda?
Jak samemu napisać metodę przyjmującą Lambdę jako argument?
1: public class SomeClass {
2:
3: public void setListener(Listener listener) {
4: }
5:
6: @FunctionalInterface // this is optional
7: interface Listener {
8: void executeSomeAction(String event);
9: }
10: }
1: SomeClass someClass = new SomeClass();
2: someClass.setListener(event -> System.out.println(event));
Marcin Stachniuk Nowości w Javie 8 okiem programisty 7/25
Agenda
1 Wyrażenia Lambda
2 Strumienie danych
3 Domyślne metody w interfejsach
4 Statyczne metody w interfejsach
5 Permanent Generation
Marcin Stachniuk Nowości w Javie 8 okiem programisty 8/25
Czym jest Stream?
koncepcyjnie to stała struktura danych, w której elementy
mogą być obliczone na żądanie
lepszy iterator
Marcin Stachniuk Nowości w Javie 8 okiem programisty 9/25
Czym jest Stream?
koncepcyjnie to stała struktura danych, w której elementy
mogą być obliczone na żądanie
lepszy iterator
Marcin Stachniuk Nowości w Javie 8 okiem programisty 9/25
Czym jest Stream?
Przykładowy problem
Znajdź w zbiorze imion pierwsze żeńskie, dłuższe niż 5 znaków,
krótsze niż 8, zaczynające się na „C” i zwróć je poprawnie napisane
Marcin Stachniuk Nowości w Javie 8 okiem programisty 10/25
Rozwiązanie
1: public String findNameByComplicatedCondition(List<String> names) {
2: return names.stream()
3: .filter(name -> name.endsWith("a"))
4: .filter(name -> name.length() > 5)
5: .filter(name -> name.length() < 8)
6: .filter(name -> name.startsWith("c") name.startsWith("C"))
7: .findFirst()
8: .map(String::toLowerCase)
9: .map(name -> ("" + name.charAt(0)).toUpperCase()
10: + name.substring(1, name.length()))
11: .get();
12: }
Marcin Stachniuk Nowości w Javie 8 okiem programisty 11/25
Co zyskujemy stosując strumienie?
przekazując jako argumenty metod funkcje, a nie wyniki ich
działania, implementacja decyduje kiedy (i czy w ogóle je
wywołać)
dostajemy Lazy Evaluation za darmo
skupiamy się na esencji tego co chcemy przekazać, a nie na
kodzie do napisania wokoło
mieszamy kompozycję obiektów i kompozycję funkcji
unikamy zmiany stanu
ułatwia wielowątkowość
Marcin Stachniuk Nowości w Javie 8 okiem programisty 12/25
Co zyskujemy stosując strumienie?
przekazując jako argumenty metod funkcje, a nie wyniki ich
działania, implementacja decyduje kiedy (i czy w ogóle je
wywołać)
dostajemy Lazy Evaluation za darmo
skupiamy się na esencji tego co chcemy przekazać, a nie na
kodzie do napisania wokoło
mieszamy kompozycję obiektów i kompozycję funkcji
unikamy zmiany stanu
ułatwia wielowątkowość
Marcin Stachniuk Nowości w Javie 8 okiem programisty 12/25
Co zyskujemy stosując strumienie?
przekazując jako argumenty metod funkcje, a nie wyniki ich
działania, implementacja decyduje kiedy (i czy w ogóle je
wywołać)
dostajemy Lazy Evaluation za darmo
skupiamy się na esencji tego co chcemy przekazać, a nie na
kodzie do napisania wokoło
mieszamy kompozycję obiektów i kompozycję funkcji
unikamy zmiany stanu
ułatwia wielowątkowość
Marcin Stachniuk Nowości w Javie 8 okiem programisty 12/25
Co zyskujemy stosując strumienie?
przekazując jako argumenty metod funkcje, a nie wyniki ich
działania, implementacja decyduje kiedy (i czy w ogóle je
wywołać)
dostajemy Lazy Evaluation za darmo
skupiamy się na esencji tego co chcemy przekazać, a nie na
kodzie do napisania wokoło
mieszamy kompozycję obiektów i kompozycję funkcji
unikamy zmiany stanu
ułatwia wielowątkowość
Marcin Stachniuk Nowości w Javie 8 okiem programisty 12/25
Co zyskujemy stosując strumienie?
przekazując jako argumenty metod funkcje, a nie wyniki ich
działania, implementacja decyduje kiedy (i czy w ogóle je
wywołać)
dostajemy Lazy Evaluation za darmo
skupiamy się na esencji tego co chcemy przekazać, a nie na
kodzie do napisania wokoło
mieszamy kompozycję obiektów i kompozycję funkcji
unikamy zmiany stanu
ułatwia wielowątkowość
Marcin Stachniuk Nowości w Javie 8 okiem programisty 12/25
Co zyskujemy stosując strumienie?
przekazując jako argumenty metod funkcje, a nie wyniki ich
działania, implementacja decyduje kiedy (i czy w ogóle je
wywołać)
dostajemy Lazy Evaluation za darmo
skupiamy się na esencji tego co chcemy przekazać, a nie na
kodzie do napisania wokoło
mieszamy kompozycję obiektów i kompozycję funkcji
unikamy zmiany stanu
ułatwia wielowątkowość
Marcin Stachniuk Nowości w Javie 8 okiem programisty 12/25
Agenda
1 Wyrażenia Lambda
2 Strumienie danych
3 Domyślne metody w interfejsach
4 Statyczne metody w interfejsach
5 Permanent Generation
Marcin Stachniuk Nowości w Javie 8 okiem programisty 13/25
Domyślne metody w interfejsach
1: public interface Person {
2:
3: String getSurname();
4: String getLastName();
5:
6: default String getFullName() {
7: return getSurname() + " " + getLastName();
8: }
9: }
Marcin Stachniuk Nowości w Javie 8 okiem programisty 14/25
Po co nam domyślne metody w interfejsach?
rozszerzanie opublikowanych już interfejsów
aby uniknąć modyfikacji wielu klas
aby można było zaimplementować Lambdy
Marcin Stachniuk Nowości w Javie 8 okiem programisty 15/25
Po co nam domyślne metody w interfejsach?
rozszerzanie opublikowanych już interfejsów
aby uniknąć modyfikacji wielu klas
aby można było zaimplementować Lambdy
Marcin Stachniuk Nowości w Javie 8 okiem programisty 15/25
Po co nam domyślne metody w interfejsach?
rozszerzanie opublikowanych już interfejsów
aby uniknąć modyfikacji wielu klas
aby można było zaimplementować Lambdy
Marcin Stachniuk Nowości w Javie 8 okiem programisty 15/25
Przykłady domyślnych metody w JDK
List
default void sort(Comparator<? super E> c)
default void replaceAll(UnaryOperator<E> operator)
default Spliterator<E> spliterator()
Collection
default Stream<E> stream()
default Stream<E> parallelStream()
default boolean removeIf(Predicate<? super E> filter)
default Spliterator<E> spliterator()
Iterable
default void forEach(Consumer<? super T> action)
Marcin Stachniuk Nowości w Javie 8 okiem programisty 16/25
Agenda
1 Wyrażenia Lambda
2 Strumienie danych
3 Domyślne metody w interfejsach
4 Statyczne metody w interfejsach
5 Permanent Generation
Marcin Stachniuk Nowości w Javie 8 okiem programisty 17/25
Statyczne metody w interfejsach
1: public interface Person {
2:
3: static int getId() {
4: return 42;
5: }
6: }
1: System.out.println(Person.getId());
Marcin Stachniuk Nowości w Javie 8 okiem programisty 18/25
Po co nam statyczne metody w interfejsach?
aby funkcje narzędziowe tam pakować
aby było o co pytać na rozmowach kwalifikacyjnych ;-)
Marcin Stachniuk Nowości w Javie 8 okiem programisty 19/25
Po co nam statyczne metody w interfejsach?
aby funkcje narzędziowe tam pakować
aby było o co pytać na rozmowach kwalifikacyjnych ;-)
Marcin Stachniuk Nowości w Javie 8 okiem programisty 19/25
Agenda
1 Wyrażenia Lambda
2 Strumienie danych
3 Domyślne metody w interfejsach
4 Statyczne metody w interfejsach
5 Permanent Generation
Marcin Stachniuk Nowości w Javie 8 okiem programisty 20/25
Czym był Permanent Generation (PermGen Space)?
miejsce w pamięci, gdzie lądowały załadowane klasy wraz z
metodami
przed JDK 7 lądowały tam również teksty
Marcin Stachniuk Nowości w Javie 8 okiem programisty 21/25
Czym był Permanent Generation (PermGen Space)?
miejsce w pamięci, gdzie lądowały załadowane klasy wraz z
metodami
przed JDK 7 lądowały tam również teksty
Marcin Stachniuk Nowości w Javie 8 okiem programisty 21/25
Co z PermGen w Javie 8?
został usunięty
żegnaj: OutOfMemoryError: PermGen
Marcin Stachniuk Nowości w Javie 8 okiem programisty 22/25
Co z PermGen w Javie 8?
został usunięty
żegnaj: OutOfMemoryError: PermGen
Marcin Stachniuk Nowości w Javie 8 okiem programisty 22/25
Co w zamian PermGen?
w zamian ładowane klasy lądują w obszarze Metaspace
obszar ten jest w obszarze natywnym pamięci
podlega odśmiecaniu
podlega dynamicznemu powiększaniu w razie konieczności
Marcin Stachniuk Nowości w Javie 8 okiem programisty 23/25
Co w zamian PermGen?
w zamian ładowane klasy lądują w obszarze Metaspace
obszar ten jest w obszarze natywnym pamięci
podlega odśmiecaniu
podlega dynamicznemu powiększaniu w razie konieczności
Marcin Stachniuk Nowości w Javie 8 okiem programisty 23/25
Co w zamian PermGen?
w zamian ładowane klasy lądują w obszarze Metaspace
obszar ten jest w obszarze natywnym pamięci
podlega odśmiecaniu
podlega dynamicznemu powiększaniu w razie konieczności
Marcin Stachniuk Nowości w Javie 8 okiem programisty 23/25
Co w zamian PermGen?
w zamian ładowane klasy lądują w obszarze Metaspace
obszar ten jest w obszarze natywnym pamięci
podlega odśmiecaniu
podlega dynamicznemu powiększaniu w razie konieczności
Marcin Stachniuk Nowości w Javie 8 okiem programisty 23/25
Pytania
?
Marcin Stachniuk Nowości w Javie 8 okiem programisty 24/25
Nowości w Javie 8 okiem programisty
Marcin Stachniuk
mstachniuk@gmail.com
http://mstachniuk.blogspot.com
Dziękuję!
7 marca 2015
Marcin Stachniuk Nowości w Javie 8 okiem programisty 25/25

More Related Content

PDF
Programowanie Komponentowe: #1 Wprowadzenie
PDF
Programowanie Komponentowe: #3 Podstawy programowania komponentów
PDF
Programowanie Komponentowe: #2 Metody opisu komponentów
PDF
Programowanie Komponentowe: #5 Wprowadzenie do środowiska .NET
PDF
Programowanie Komponentowe: #E Podsumowanie
PPTX
JavaStart - kurs Java Podstawy
ODP
Alternatywne podejście do baz danych - MongoDb
PDF
Building RESTful API
Programowanie Komponentowe: #1 Wprowadzenie
Programowanie Komponentowe: #3 Podstawy programowania komponentów
Programowanie Komponentowe: #2 Metody opisu komponentów
Programowanie Komponentowe: #5 Wprowadzenie do środowiska .NET
Programowanie Komponentowe: #E Podsumowanie
JavaStart - kurs Java Podstawy
Alternatywne podejście do baz danych - MongoDb
Building RESTful API

Similar to Nowości w Javie 8 okiem programisty (20)

PDF
Toruń JUG - Wprowadzenie do wybranych zagadnień JDK 8
PDF
Lambdy strumienie
PDF
Java. Potrzaski
PPTX
C# - Typy Referecyjne i typy wartościowe i wiele innych rzeczy
PDF
PGS Software SA - Confitura 2015 - relacja
PDF
Tworzenie i utrzymywanie czystego kodu
PPTX
[PL] Jak programować aby nie zwariować
PDF
Java 2. Techniki zaawansowane
PDF
Efektywne programowanie w języku Java
PPT
3b.ppt
PDF
PDF
Scala
PDF
PDF
How to be Awesome at a Java Developer Job Interview (Confitura 2012, Polish)
PPTX
[PL] Jak programować aby nie zwariować?
PDF
Java 2. Techniki zaawansowane. Wydanie II
PDF
Java 2. Podstawy
PDF
Praktyczny kurs Java
PDF
Java. Kompendium programisty
PDF
Struktury danych i techniki obiektowe na przykładzie Javy 5.0
Toruń JUG - Wprowadzenie do wybranych zagadnień JDK 8
Lambdy strumienie
Java. Potrzaski
C# - Typy Referecyjne i typy wartościowe i wiele innych rzeczy
PGS Software SA - Confitura 2015 - relacja
Tworzenie i utrzymywanie czystego kodu
[PL] Jak programować aby nie zwariować
Java 2. Techniki zaawansowane
Efektywne programowanie w języku Java
3b.ppt
Scala
How to be Awesome at a Java Developer Job Interview (Confitura 2012, Polish)
[PL] Jak programować aby nie zwariować?
Java 2. Techniki zaawansowane. Wydanie II
Java 2. Podstawy
Praktyczny kurs Java
Java. Kompendium programisty
Struktury danych i techniki obiektowe na przykładzie Javy 5.0
Ad

More from MarcinStachniuk (20)

PDF
GraphQL - Piękne API w Twojej Aplikacji - KrakowGraphAcademy
PDF
Wroclaw GraphQL - GraphQL in Java
PDF
[DevCrowd] GraphQL - gdy API RESTowe to za mało
PDF
GraphQL - gdy API RESTowe to za mało
PDF
BruJUG Brussels GraphQL when RESR API is to less - lessons learned
PDF
[WroclawJUG] Continuous Delivery in OSS using Shipkit
PDF
Continuous Delivery in OSS using Shipkit.org
PDF
GraphQL - when REST API is to less - lessons learned
PDF
GraphQL - when REST API is to less - lessons learned
PDF
GraphQL - when REST API is to less - lessons learned
PDF
GraphQL - when REST API is to less - lessons learned
PDF
GraphQL - when REST API is to less - lessons learned
PDF
GraphQL - when REST API is to less - lessons learned
PDF
GraphQL - when REST API is not enough - lessons learned
PDF
Java Web Start – jak żyć z tą dziwną technologią
PDF
Zarządzanie zmianami w schemacie relacyjnych baz danych
PDF
Inicjatywa NoSQL na przykładzie db4o
PDF
Automatic mechanism data migration between relational and object database
PDF
Zastosowanie obiektowych baz danych na przykładzie db4o
PDF
Wprowadzenie do J2ME
GraphQL - Piękne API w Twojej Aplikacji - KrakowGraphAcademy
Wroclaw GraphQL - GraphQL in Java
[DevCrowd] GraphQL - gdy API RESTowe to za mało
GraphQL - gdy API RESTowe to za mało
BruJUG Brussels GraphQL when RESR API is to less - lessons learned
[WroclawJUG] Continuous Delivery in OSS using Shipkit
Continuous Delivery in OSS using Shipkit.org
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is not enough - lessons learned
Java Web Start – jak żyć z tą dziwną technologią
Zarządzanie zmianami w schemacie relacyjnych baz danych
Inicjatywa NoSQL na przykładzie db4o
Automatic mechanism data migration between relational and object database
Zastosowanie obiektowych baz danych na przykładzie db4o
Wprowadzenie do J2ME
Ad

Nowości w Javie 8 okiem programisty

  • 1. Nowości w Javie 8 okiem programisty Marcin Stachniuk mstachniuk@gmail.com http://mstachniuk.blogspot.com 7 marca 2015 Marcin Stachniuk Nowości w Javie 8 okiem programisty 1/25
  • 2. O mnie Marcin Stachniuk Chorąży na chamberconf.pl Kontakt: mstachniuk@gmail.com Blog: mstachniuk.blogspot.com Twitter: @MarcinStachniuk Recenzent: practicalunittesting.com Marcin Stachniuk Nowości w Javie 8 okiem programisty 2/25
  • 3. Agenda 1 Wyrażenia Lambda 2 Strumienie danych 3 Domyślne metody w interfejsach 4 Statyczne metody w interfejsach 5 Permanent Generation Marcin Stachniuk Nowości w Javie 8 okiem programisty 3/25
  • 4. Agenda 1 Wyrażenia Lambda 2 Strumienie danych 3 Domyślne metody w interfejsach 4 Statyczne metody w interfejsach 5 Permanent Generation Marcin Stachniuk Nowości w Javie 8 okiem programisty 4/25
  • 5. Czym jest Lambda? Wyrażenia Lambda (λ) to w uproszczeniu implementacja anonimowej, wewnętrznej klasy zawierająca dokładnie jedną abstrakcyjną metodę. Marcin Stachniuk Nowości w Javie 8 okiem programisty 5/25
  • 6. Czym jest Lambda? Przykład, czyli zamiast tego kodu: 1: List<Integer> numbers = Arrays.asList(1, 5, 6, 7, 2, 4, 3); 2: 3: numbers.sort(new Comparator<Integer>() { 4: @Override 5: public int compare(Integer n1, Integer n2) { 6: return n2 - n1; 7: } 8: }); możemy napisać tak: 1: numbers.sort((n1, n2) -> n2 - n1); lub tak: 1: numbers.sort(Comparator.reverseOrder()); Marcin Stachniuk Nowości w Javie 8 okiem programisty 6/25
  • 7. Czym jest Lambda? Jak samemu napisać metodę przyjmującą Lambdę jako argument? 1: public class SomeClass { 2: 3: public void setListener(Listener listener) { 4: } 5: 6: @FunctionalInterface // this is optional 7: interface Listener { 8: void executeSomeAction(String event); 9: } 10: } 1: SomeClass someClass = new SomeClass(); 2: someClass.setListener(event -> System.out.println(event)); Marcin Stachniuk Nowości w Javie 8 okiem programisty 7/25
  • 8. Agenda 1 Wyrażenia Lambda 2 Strumienie danych 3 Domyślne metody w interfejsach 4 Statyczne metody w interfejsach 5 Permanent Generation Marcin Stachniuk Nowości w Javie 8 okiem programisty 8/25
  • 9. Czym jest Stream? koncepcyjnie to stała struktura danych, w której elementy mogą być obliczone na żądanie lepszy iterator Marcin Stachniuk Nowości w Javie 8 okiem programisty 9/25
  • 10. Czym jest Stream? koncepcyjnie to stała struktura danych, w której elementy mogą być obliczone na żądanie lepszy iterator Marcin Stachniuk Nowości w Javie 8 okiem programisty 9/25
  • 11. Czym jest Stream? Przykładowy problem Znajdź w zbiorze imion pierwsze żeńskie, dłuższe niż 5 znaków, krótsze niż 8, zaczynające się na „C” i zwróć je poprawnie napisane Marcin Stachniuk Nowości w Javie 8 okiem programisty 10/25
  • 12. Rozwiązanie 1: public String findNameByComplicatedCondition(List<String> names) { 2: return names.stream() 3: .filter(name -> name.endsWith("a")) 4: .filter(name -> name.length() > 5) 5: .filter(name -> name.length() < 8) 6: .filter(name -> name.startsWith("c") name.startsWith("C")) 7: .findFirst() 8: .map(String::toLowerCase) 9: .map(name -> ("" + name.charAt(0)).toUpperCase() 10: + name.substring(1, name.length())) 11: .get(); 12: } Marcin Stachniuk Nowości w Javie 8 okiem programisty 11/25
  • 13. Co zyskujemy stosując strumienie? przekazując jako argumenty metod funkcje, a nie wyniki ich działania, implementacja decyduje kiedy (i czy w ogóle je wywołać) dostajemy Lazy Evaluation za darmo skupiamy się na esencji tego co chcemy przekazać, a nie na kodzie do napisania wokoło mieszamy kompozycję obiektów i kompozycję funkcji unikamy zmiany stanu ułatwia wielowątkowość Marcin Stachniuk Nowości w Javie 8 okiem programisty 12/25
  • 14. Co zyskujemy stosując strumienie? przekazując jako argumenty metod funkcje, a nie wyniki ich działania, implementacja decyduje kiedy (i czy w ogóle je wywołać) dostajemy Lazy Evaluation za darmo skupiamy się na esencji tego co chcemy przekazać, a nie na kodzie do napisania wokoło mieszamy kompozycję obiektów i kompozycję funkcji unikamy zmiany stanu ułatwia wielowątkowość Marcin Stachniuk Nowości w Javie 8 okiem programisty 12/25
  • 15. Co zyskujemy stosując strumienie? przekazując jako argumenty metod funkcje, a nie wyniki ich działania, implementacja decyduje kiedy (i czy w ogóle je wywołać) dostajemy Lazy Evaluation za darmo skupiamy się na esencji tego co chcemy przekazać, a nie na kodzie do napisania wokoło mieszamy kompozycję obiektów i kompozycję funkcji unikamy zmiany stanu ułatwia wielowątkowość Marcin Stachniuk Nowości w Javie 8 okiem programisty 12/25
  • 16. Co zyskujemy stosując strumienie? przekazując jako argumenty metod funkcje, a nie wyniki ich działania, implementacja decyduje kiedy (i czy w ogóle je wywołać) dostajemy Lazy Evaluation za darmo skupiamy się na esencji tego co chcemy przekazać, a nie na kodzie do napisania wokoło mieszamy kompozycję obiektów i kompozycję funkcji unikamy zmiany stanu ułatwia wielowątkowość Marcin Stachniuk Nowości w Javie 8 okiem programisty 12/25
  • 17. Co zyskujemy stosując strumienie? przekazując jako argumenty metod funkcje, a nie wyniki ich działania, implementacja decyduje kiedy (i czy w ogóle je wywołać) dostajemy Lazy Evaluation za darmo skupiamy się na esencji tego co chcemy przekazać, a nie na kodzie do napisania wokoło mieszamy kompozycję obiektów i kompozycję funkcji unikamy zmiany stanu ułatwia wielowątkowość Marcin Stachniuk Nowości w Javie 8 okiem programisty 12/25
  • 18. Co zyskujemy stosując strumienie? przekazując jako argumenty metod funkcje, a nie wyniki ich działania, implementacja decyduje kiedy (i czy w ogóle je wywołać) dostajemy Lazy Evaluation za darmo skupiamy się na esencji tego co chcemy przekazać, a nie na kodzie do napisania wokoło mieszamy kompozycję obiektów i kompozycję funkcji unikamy zmiany stanu ułatwia wielowątkowość Marcin Stachniuk Nowości w Javie 8 okiem programisty 12/25
  • 19. Agenda 1 Wyrażenia Lambda 2 Strumienie danych 3 Domyślne metody w interfejsach 4 Statyczne metody w interfejsach 5 Permanent Generation Marcin Stachniuk Nowości w Javie 8 okiem programisty 13/25
  • 20. Domyślne metody w interfejsach 1: public interface Person { 2: 3: String getSurname(); 4: String getLastName(); 5: 6: default String getFullName() { 7: return getSurname() + " " + getLastName(); 8: } 9: } Marcin Stachniuk Nowości w Javie 8 okiem programisty 14/25
  • 21. Po co nam domyślne metody w interfejsach? rozszerzanie opublikowanych już interfejsów aby uniknąć modyfikacji wielu klas aby można było zaimplementować Lambdy Marcin Stachniuk Nowości w Javie 8 okiem programisty 15/25
  • 22. Po co nam domyślne metody w interfejsach? rozszerzanie opublikowanych już interfejsów aby uniknąć modyfikacji wielu klas aby można było zaimplementować Lambdy Marcin Stachniuk Nowości w Javie 8 okiem programisty 15/25
  • 23. Po co nam domyślne metody w interfejsach? rozszerzanie opublikowanych już interfejsów aby uniknąć modyfikacji wielu klas aby można było zaimplementować Lambdy Marcin Stachniuk Nowości w Javie 8 okiem programisty 15/25
  • 24. Przykłady domyślnych metody w JDK List default void sort(Comparator<? super E> c) default void replaceAll(UnaryOperator<E> operator) default Spliterator<E> spliterator() Collection default Stream<E> stream() default Stream<E> parallelStream() default boolean removeIf(Predicate<? super E> filter) default Spliterator<E> spliterator() Iterable default void forEach(Consumer<? super T> action) Marcin Stachniuk Nowości w Javie 8 okiem programisty 16/25
  • 25. Agenda 1 Wyrażenia Lambda 2 Strumienie danych 3 Domyślne metody w interfejsach 4 Statyczne metody w interfejsach 5 Permanent Generation Marcin Stachniuk Nowości w Javie 8 okiem programisty 17/25
  • 26. Statyczne metody w interfejsach 1: public interface Person { 2: 3: static int getId() { 4: return 42; 5: } 6: } 1: System.out.println(Person.getId()); Marcin Stachniuk Nowości w Javie 8 okiem programisty 18/25
  • 27. Po co nam statyczne metody w interfejsach? aby funkcje narzędziowe tam pakować aby było o co pytać na rozmowach kwalifikacyjnych ;-) Marcin Stachniuk Nowości w Javie 8 okiem programisty 19/25
  • 28. Po co nam statyczne metody w interfejsach? aby funkcje narzędziowe tam pakować aby było o co pytać na rozmowach kwalifikacyjnych ;-) Marcin Stachniuk Nowości w Javie 8 okiem programisty 19/25
  • 29. Agenda 1 Wyrażenia Lambda 2 Strumienie danych 3 Domyślne metody w interfejsach 4 Statyczne metody w interfejsach 5 Permanent Generation Marcin Stachniuk Nowości w Javie 8 okiem programisty 20/25
  • 30. Czym był Permanent Generation (PermGen Space)? miejsce w pamięci, gdzie lądowały załadowane klasy wraz z metodami przed JDK 7 lądowały tam również teksty Marcin Stachniuk Nowości w Javie 8 okiem programisty 21/25
  • 31. Czym był Permanent Generation (PermGen Space)? miejsce w pamięci, gdzie lądowały załadowane klasy wraz z metodami przed JDK 7 lądowały tam również teksty Marcin Stachniuk Nowości w Javie 8 okiem programisty 21/25
  • 32. Co z PermGen w Javie 8? został usunięty żegnaj: OutOfMemoryError: PermGen Marcin Stachniuk Nowości w Javie 8 okiem programisty 22/25
  • 33. Co z PermGen w Javie 8? został usunięty żegnaj: OutOfMemoryError: PermGen Marcin Stachniuk Nowości w Javie 8 okiem programisty 22/25
  • 34. Co w zamian PermGen? w zamian ładowane klasy lądują w obszarze Metaspace obszar ten jest w obszarze natywnym pamięci podlega odśmiecaniu podlega dynamicznemu powiększaniu w razie konieczności Marcin Stachniuk Nowości w Javie 8 okiem programisty 23/25
  • 35. Co w zamian PermGen? w zamian ładowane klasy lądują w obszarze Metaspace obszar ten jest w obszarze natywnym pamięci podlega odśmiecaniu podlega dynamicznemu powiększaniu w razie konieczności Marcin Stachniuk Nowości w Javie 8 okiem programisty 23/25
  • 36. Co w zamian PermGen? w zamian ładowane klasy lądują w obszarze Metaspace obszar ten jest w obszarze natywnym pamięci podlega odśmiecaniu podlega dynamicznemu powiększaniu w razie konieczności Marcin Stachniuk Nowości w Javie 8 okiem programisty 23/25
  • 37. Co w zamian PermGen? w zamian ładowane klasy lądują w obszarze Metaspace obszar ten jest w obszarze natywnym pamięci podlega odśmiecaniu podlega dynamicznemu powiększaniu w razie konieczności Marcin Stachniuk Nowości w Javie 8 okiem programisty 23/25
  • 38. Pytania ? Marcin Stachniuk Nowości w Javie 8 okiem programisty 24/25
  • 39. Nowości w Javie 8 okiem programisty Marcin Stachniuk mstachniuk@gmail.com http://mstachniuk.blogspot.com Dziękuję! 7 marca 2015 Marcin Stachniuk Nowości w Javie 8 okiem programisty 25/25