detalhes internos da nova jvm do java 8 @mariofts
Post on 14-Feb-2017
375 Views
Preview:
TRANSCRIPT
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
ReferênciasOracle: what's newCompact profiles overviewMais sobre compact profilesPost sobre o NashornPermgem vs. Metaspace
JVM do Java 8de dentro pra fora
Mario Amaral
@mario_ftsgithub.com/mariofts
top related