Análisis de los algoritmos

kraneok

Hola que tal gente. Vengo con una cuestión algo complicada, quizás.
Me gustaría saber si es posible, de alguna forma, ya sea por documentación oficial o por otra vía, si es posible estudiar en profundidad como trabaja, por ejemplo la JVM. Sobre todo en aspectos de estructuras iterativas, como while, for, "foreach", etc.

Básicamente sería como trabaja por abajo la JVM.

Muchas gracias de antemano.

Fyn4r

mmm, quizá con algún profiler

Lecherito

Profiler?

Lo que tiene que hacer es ir a la página de oracle a descargarse la especificación de la JVM (de hecho puedes implementar y crear tu propia JVM, hay ya unas cuantas que te permiten hacer variedad de cosas adicionales).

https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf

1
Markitos_182

http://hg.openjdk.java.net/

kraneok

Muchas gracias a todos, seguro que con eso me basta. La verdad que no sabía como buscarlo dichos documentos xd.

MTX_Anubis

Tienes algo en mente o es simplemente por saber el bytecode que genera cuando compilas?

1 respuesta
kraneok

#6 Básicamente para hacer un estudio para ver el beneficio o el perjuicio que tiene el uso por ejemplo de: un for en vez de un foreach, un while en vez de un for y dadle un contexto de uso correcto. Lo que intento buscar es por ejemplo, cuando un bucle consume mas RAM o tiempo de CPU que otro, etc.

1 respuesta
Soltrac

#7 Estás llevando demasiado al límite eso..

Cuando algo va lento es que está mal programado, no vas a ganar nada por cambiar un for por un while. Sobre todo porque el compilador optimiza esas mierdas y las acaba poniendo como le da la gana.

Dicho ya de paso, no tiene nada que ver esto q has dicho con "Análisis de algoritmos" que es el título q has escogido.

1 respuesta
kraneok

#8 Bueno, realmente no se muy bien que es lo que hay en la JVM. Por lo que no sé si a mas bajo nivel, en la JVM, un for es un bucle en C++ o que es.
El tema de verlo es simple curiosidad, ni voy a aplicarlo en nada xd.

1 respuesta
Soltrac

#9 No entiendo....java no compila a c++....compila a un código intermedio igual q hace .NET, un código de pilas tipo ensamblador.

1 respuesta
kraneok

#10 No me estás entendiendo. Ya se que compila a bytecode. La cuestión es, que ese for por debajo, en esamblador, en C? en C++.

1 respuesta
Soltrac

#11 De donde sacas q por debajo del bytecode hay c++? Es que no te estoy entendiendo nada xD.

1 respuesta
kraneok

#12 XDD. Yo me estoy explicando mal seguramente.
A ver yo entiendo lo siguiente. Tenemos las clases .java. Se compilan con el javac creo. Esto pasa a bytecode que es el código que la JVM entiende, y la JVM lo interprta. Hasta aquí bien?.

Ahora, yo quiero ver como hace el lenguaje, en este caso java, internamente un for, o un while, o etc..

1 respuesta
Soltrac

#13 Es decir...quieres ver como es el bytecode de un for por ejemplo no? Si es así, supongo q existirán bytecode decompilers, googlea q seguro q hay algo.

1 respuesta
kraneok

#14 Pues si, supongo que sera la JVM la que se encarga de interpretar eso. Pues ahí quiero llegar xd.

1 respuesta
jalamoNNN

http://set.ee/jbe/

creo que es lo que buscas

MTX_Anubis

#15 quieres ver el bytecode o las instrucciones de ASM? xD

El bytecode de un for y un while no creo que varíe mucho. A parte el compilador se encarga de optimizarlo también y cuando se traducen a instrucciones ASM también.

Con cualquier ide puedes ver el bytecode de los .class

Usuarios habituales

  • MTX_Anubis
  • jalamoNNN
  • kraneok
  • Soltrac
  • Markitos_182
  • Lecherito
  • Fyn4r