Detalhes internos da nova JVM do Java 8 @mariofts

43
JVM do Java 8 de dentro pra fora Mario Amaral @mario_fts github.com/mariofts

Transcript of Detalhes internos da nova JVM do Java 8 @mariofts

Page 1: Detalhes internos da nova JVM do Java 8   @mariofts

JVM do Java 8de dentro pra fora

Mario Amaral

@mario_ftsgithub.com/mariofts

Page 2: Detalhes internos da nova JVM do Java 8   @mariofts

Quem sou eu?

Mário AmaralInstrutor e DesenvolvedorCaelum StellaVraptor

Page 3: Detalhes internos da nova JVM do Java 8   @mariofts

JVM do Java 8de dentro pra fora

Modularização da JVMNova Engine de JsMudanças na MemóriaO que ficou de fora...

Page 4: Detalhes internos da nova JVM do Java 8   @mariofts

Modularização da JVM

Page 5: Detalhes internos da nova JVM do Java 8   @mariofts

Tamanho da JVM

~140 MB

Page 6: Detalhes internos da nova JVM do Java 8   @mariofts

Dispositivosmenores

Arduino BeagleBoard Raspberry Pi

Page 7: Detalhes internos da nova JVM do Java 8   @mariofts

Compact Profiles4 profiles default

Page 8: Detalhes internos da nova JVM do Java 8   @mariofts

Compact 1CoreDate & TimeCollections...

Page 9: Detalhes internos da nova JVM do Java 8   @mariofts

Compact 2Compact 1JDBCJax-P

Page 10: Detalhes internos da nova JVM do Java 8   @mariofts

Compact 3Compact 3SecurityJMX

Page 11: Detalhes internos da nova JVM do Java 8   @mariofts

FUll SECompact 3SwingJax-WSResto...

Page 12: Detalhes internos da nova JVM do Java 8   @mariofts

10 MBcompact1

17 MBcompact2

24 MBcompact3

140 MBFull jre

Page 13: Detalhes internos da nova JVM do Java 8   @mariofts

Nova VM deJavaScript

Page 14: Detalhes internos da nova JVM do Java 8   @mariofts

PERA...Dá pra rodar javascript de

dentro da JVM?

SIM

Page 15: Detalhes internos da nova JVM do Java 8   @mariofts
Page 16: Detalhes internos da nova JVM do Java 8   @mariofts

RhinoMozillaJava 6Compila js para bytecode

Page 17: Detalhes internos da nova JVM do Java 8   @mariofts

Na verdade...Várias linguagens

Page 18: Detalhes internos da nova JVM do Java 8   @mariofts
Page 19: Detalhes internos da nova JVM do Java 8   @mariofts
Page 20: Detalhes internos da nova JVM do Java 8   @mariofts

Java 7invokedynamic

Page 21: Detalhes internos da nova JVM do Java 8   @mariofts

NashornOracleJava 8Compila js para bytecodeUsa novas features

Page 22: Detalhes internos da nova JVM do Java 8   @mariofts

hello.js

var hello = function() { print("Hello Nashorn!");};

hello();

no terminal...

$ jjs hello.jsHello Nashorn!$

Page 23: Detalhes internos da nova JVM do Java 8   @mariofts

No java....

ScriptEngineManager manager = new ScriptEngineManager();

ScriptEngine engine = manager.getEngineByName("nashorn");

engine.eval("hello.js");

Page 24: Detalhes internos da nova JVM do Java 8   @mariofts

Mudançasna Memória

Page 25: Detalhes internos da nova JVM do Java 8   @mariofts

Memória do Java é modular

Page 26: Detalhes internos da nova JVM do Java 8   @mariofts

PermGenObjetos "permanentes"Metadados de ClassesRef. estáticasPool de Strings

Page 27: Detalhes internos da nova JVM do Java 8   @mariofts

O Problema...Nem tudo é permanente...

OutOfMemoryError: PermGenSpace

Page 28: Detalhes internos da nova JVM do Java 8   @mariofts

MetaSpaceMemória Nativa

Dinâmico

Page 29: Detalhes internos da nova JVM do Java 8   @mariofts

Nunca maisOutOfMemoryError: PermGen Space

Page 30: Detalhes internos da nova JVM do Java 8   @mariofts

Mas.. 

Page 31: Detalhes internos da nova JVM do Java 8   @mariofts

Mas..OutOfMemoryError: Metadata Space

Page 32: Detalhes internos da nova JVM do Java 8   @mariofts

Tamanho do MetaSpace éconfigurável

-XX:MetaspaceSize-XX:MaxMetaspaceSize

Page 33: Detalhes internos da nova JVM do Java 8   @mariofts

E o futuro?

Page 34: Detalhes internos da nova JVM do Java 8   @mariofts

JigSaw

Page 35: Detalhes internos da nova JVM do Java 8   @mariofts
Page 36: Detalhes internos da nova JVM do Java 8   @mariofts
Page 37: Detalhes internos da nova JVM do Java 8   @mariofts
Page 38: Detalhes internos da nova JVM do Java 8   @mariofts

ModularizaçãoFim do Jar Hell

Page 39: Detalhes internos da nova JVM do Java 8   @mariofts
Page 40: Detalhes internos da nova JVM do Java 8   @mariofts

jdepsComando para mostrardependência entre jars

Page 41: Detalhes internos da nova JVM do Java 8   @mariofts

jdeps -cp * vraptor-4.0.1-SNAPSHOT.jar

vraptor-4.0.0.Final.jar -> xstream-1.4.7.jarvraptor-4.0.0.Final.jar -> javassist-3.18.1-GA.jarvraptor-4.0.0.Final.jar -> iogi-1.0.0.jarvraptor-4.0.0.Final.jar -> commons-io-2.2.jarvraptor-4.0.0.Final.jar -> paranamer-2.6.jarvraptor-4.0.0.Final.jar -> jstl-1.2.jarvraptor-4.0.0.Final.jar -> javax.annotation-api-1.2.jarvraptor-4.0.0.Final.jar -> mirror-1.6.1.jarvraptor-4.0.0.Final.jar -> gson-2.2.4.jarvraptor-4.0.0.Final.jar -> slf4j-api-1.7.5.jarvraptor-4.0.0.Final.jar -> validation-api-1.1.0.Final.jarvraptor-4.0.0.Final.jar -> javax.interceptor-api-1.2.jarvraptor-4.0.0.Final.jar -> weld-core-impl-2.1.2.Final.jarvraptor-4.0.0.Final.jar -> javax.ejb-api-3.2.jarvraptor-4.0.0.Final.jar -> guava-15.0.jarvraptor-4.0.0.Final.jar -> jdk1.8.0_05.jdk/Contents/Home/jre/lib/rt.jarvraptor-4.0.0.Final.jar -> javax.inject-1.jarvraptor-4.0.0.Final.jar -> javax.servlet-api-3.1.0.jarvraptor-4.0.0.Final.jar -> commons-fileupload-1.3.1.jarvraptor-4.0.0.Final.jar -> cdi-api-1.1.jar

Page 43: Detalhes internos da nova JVM do Java 8   @mariofts

JVM do Java 8de dentro pra fora

Mario Amaral

@mario_ftsgithub.com/mariofts