Detalhes internos da nova JVM do Java 8 @mariofts

Post on 14-Feb-2017

375 views 0 download

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

JVM do Java 8de dentro pra fora

Mario Amaral

@mario_ftsgithub.com/mariofts

Quem sou eu?

Mário AmaralInstrutor e DesenvolvedorCaelum StellaVraptor

JVM do Java 8de dentro pra fora

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

Modularização da JVM

Tamanho da JVM

~140 MB

Dispositivosmenores

Arduino BeagleBoard Raspberry Pi

Compact Profiles4 profiles default

Compact 1CoreDate & TimeCollections...

Compact 2Compact 1JDBCJax-P

Compact 3Compact 3SecurityJMX

FUll SECompact 3SwingJax-WSResto...

10 MBcompact1

17 MBcompact2

24 MBcompact3

140 MBFull jre

Nova VM deJavaScript

PERA...Dá pra rodar javascript de

dentro da JVM?

SIM

RhinoMozillaJava 6Compila js para bytecode

Na verdade...Várias linguagens

Java 7invokedynamic

NashornOracleJava 8Compila js para bytecodeUsa novas features

hello.js

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

hello();

no terminal...

$ jjs hello.jsHello Nashorn!$

No java....

ScriptEngineManager manager = new ScriptEngineManager();

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

engine.eval("hello.js");

Mudançasna Memória

Memória do Java é modular

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

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

OutOfMemoryError: PermGenSpace

MetaSpaceMemória Nativa

Dinâmico

Nunca maisOutOfMemoryError: PermGen Space

Mas.. 

Mas..OutOfMemoryError: Metadata Space

Tamanho do MetaSpace éconfigurável

-XX:MetaspaceSize-XX:MaxMetaspaceSize

E o futuro?

JigSaw

ModularizaçãoFim do Jar Hell

jdepsComando para mostrardependência entre jars

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

JVM do Java 8de dentro pra fora

Mario Amaral

@mario_ftsgithub.com/mariofts