java es mas rapido?? !!!!!!!!!

que tal solo vengo aqui a publicarles mi asombro... sucede que adquiri un cpu un tanto antigua es un PIII a 400 mhz 196 en ram

bueno el caso es que jugando programe un código en c que hace una suma de numeros del 1 a 65536 y le programe que hiciera esas sumas n veces, aqui esta mi codigo..

#include <iostream>
#include <cstdlib>
using namespace std;

int main(int argc,char** argv)
{
    if(argc==1)
    {
        cout<<"Especifique El Numero De Iteraciones"<<endl;
        return 0;
    }

    int n = atoi(argv[1]);

    for(int i=0;i<n;i++)
    {
       
        for(unsigned int j=1;j<65536;j++)
        {
            j++;
            //cout<<j<<endl;
        }

    }
    return 0;
}

bueno cual es mi asombro que programe casi el mismo programa en java aqui esta

public class prueba
{

    public static void main(String[]args)
    {
        try
            {
                int n=Integer.parseInt(args[0]);
               
                for(int i=0;i<n;i++)
                    {
                        for(int j=1;j<65536;j++)
                            {
                                j++;
                                //System.out.println(j);
                               
                            }
                    }
            }

        catch(Exception e)
            {
                System.out.println("Especifique El Numero De Iteraciones");
            }
    }
       
}

en teoria son iguales..

y resulta que probando le puse a los dos programas que hicieran 100000 iteraciones, que haga la suma de 1 a 65536 cien mil veces
y pues mi asombro fue que el de java termino en 20 segundos y el de c en 1 minuto 30 seg.

el sistema que tengo en esa pc es un debian 5 sin interfaz grafico ni nada solo consola..
para compilar c utilice g++
y para java openjdk 6

alguno de ustedes podrian hacer algunas pruebas tengo mucha curiosidad de saber por que sucede que es mas rapido un programa interpretado que el compilado..

o sera que el openjdk esta sumamente optimizado?

pd: para mods no se si este post va aqui :)

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

JIT

La discusión de toda la vida. La gente sigue sin entender que Java NO es interpretado desde que le metieron el compilador JIT, que convierte el bytecode a lenguaje máquina conforme se ejecuta la aplicación. La primera vez que se va a ejecutar un método de una clase, se compila esa clase a lenguaje máquina, en tiempo de ejecución, y se ejecuta ya de manera nativa.

Es como si hubieras compilado el programa en C pero con -O3 (o algo asi es la bandera para optimizar el código).

Pequeña aclaración, lo que

Pequeña aclaración, lo que escribiste no es C, sino C++, son dos lenguajes diferentes ( aunque se parecen muchisimo )

Java si es intepretado, solo que sucede que su interprete es tán fregón, que en convierte a codigo nativo, pero terminada la ejecución del programa, ese código se va y debe de volverse a crear la siguiente vez ( Algo similar hizo Google en Google Chrome con JavaScript ).

Lo que te hace falta , como dice ezamudio, es ponerle las banderas de optimización en la compilación del C++ y notarás la diferencia.

Para C++ la bandera es -O3
Para java puedes usar la bandera "-server" que hace una optimización muy similar.

Yo tuve la misma impresión hace algún tiempo: http://stackoverflow.com/questions/2260157/why-java-is-running-faster-th...

Imagen de luxspes

Depende: Argument by lab toy

Esto es un típico ejemplo de "argument by lab toy", aquellos que apoyan a Java (o C#), gustan de ejemplos como este para demostrar que Java es tan, o mas rápido que C o C++. Y si, es verdad, pero el problema es solo aplica para pequeños ejemplos como el tuyo (o para partes de una aplicación que cuyo rendimiento depende del procesador), la degradación del rendimiento en cuanto a Java (o C# o cualquier otro lenguaje que uso GarbageCollector) viene cuando construyes una aplicación compleja (como Netbeans o Eclipse) y resulta que es mas lenta y consume mucho mas memoria que una aplicación equivalente en C o C++ (razon por la cual no existe nada como OpenOffice pero codificado en Java o en C#). Por supuesto, esta ineficiencia en el manejo de memoria tiene sus beneficios, ya que automáticamente evita una gran cantidad de errores de corrupción de memoria, muy comunes en lenguajes como C o C++, haciendo la depuración de programas mucho mas facil (siempre que uno recuerde leer el StackTrace).

De ahi la eterna controversia de si Java es o no mas rápido que C... y la eterna respuesta: depende, de que depende? de según como se mire todo depende...

Imagen de hectordc

Java siempre sera mas lento

Java siempre será más lento, el motivo es que debe hacer un paso más, al ir a su máquina virtual Saludos

No siempre será más lento.

Se me ocurren dos escenarios:

1.- Hay situaciones en las que la información que recopila en tiempo de ejecución le permitirá a la JVM hacer optimizaciones de C++ no puede, por que no conocía lo que pasaba en tiempo de compilación.

2.- Un programa mal escrito en C++ puede ser más lento que uno en Java.

En términos generals, si es más lento, en términos absolutos no siempre.

Imagen de genitalico

q tal gracias a todos por las

q tal gracias a todos por las respuestas.. me ausente un poco.. pero si ya esta masq aclarada mi duda y con respecto a OscarRyz lo de C y C++ esq io siempre le digo C cuando no escribo codigo usando clases xD.. yac m hizo uan costumbre mala eso..

y de echo este ejemplo ps es de lo mas sencillo es una rareza pero no m acordaba ya le clave las banderas .. y ahora gano C++ en algunas veces jaja...

bueno creoq ya qedo mi duda mas q resuelta jaja

gracias a todos.. saludos y feliz añoo

Imagen de hectordc

De Acuerdo

Un programa mal escrito en cualquier lenguaje, consume recursos innecesarios. Pero si el performance en C++ y java es igual, siempre será más lento java.
Un saludo

jaja ahora si. Así si..

jaja ahora si. Así si.. excepto si ... .ahhhh no es cierto.

Si, C++ está pegado al fierro lo cual lo hace super rápido. Si se necesita más velocidad aún se puede pasar directamente al ensamblador.

En Google usan mucho C++ para el buscador mismo, pues necesitan más rapidez en las vueltas cerradas ( tight loops )