Posted by : Unknown
miércoles, 12 de noviembre de 2014
SDP04 - Ejercicio 05
Miércoles 12 de noviembre de 2014
PROPÓSITO
El propósito de este ejercicio es calcular con un programa en C para la medición del
desempeño.
En este ejercicio utilizamos tanto las implementaciones de C y Java del
programa que calcula la raíz cuadrada de un número usando dobles.
Resultados
C es más rápido que Java.
Los Puntos de Referencia
Contra toda lógica, la única área en la que Java puede ser
tan rápido como C ++ es un punto de referencia típica. Si usted necesita para
calcular número enésimo de Fibonacci o ejecutar Linpack, no hay ninguna razón
por qué Java no puede ser tan rápido como C ++. Mientras todo el cálculo se
queda en una clase y sólo utiliza los tipos de datos primitivos como int y
doble, el compilador Java es en igualdad de condiciones con el compilador de C
++.
En el mundo real
En el momento de empezar a usar objetos en su programa, Java
pierde el potencial de optimización. En esta sección se enumeran algunas de las
razones por qué.
1. Todos los objetos se asignan en el montón
Java sólo asigna los tipos de datos primitivos como int y
referencias dobles y objeto en la pila. Todos los objetos se asignan en el
montón.
Para objetos grandes que normalmente tienen la semántica de
identidad, esto no es una desventaja. Programadores de C ++ también asignar
estos objetos en el montón. Sin embargo, para objetos pequeños con semántica de
valor, esta es una importante causa de muerte rendimiento.
2. Muchos de los yesos
Con el advenimiento de las plantillas, los programadores
buena C ++ han sido capaces de evitar yesos casi completamente en programas de
alto nivel. Por desgracia, Java no tiene plantillas, por lo que el código de
Java es normalmente llena de moldes.
3. Aumento de la memoria Uso
Programas Java utilizan casi el doble de la memoria de
programas comparables C ++ para almacenar los datos. Hay tres razones para
ello:
Los programas que utilizan la recolección de basura
automática suelen utilizar aproximadamente un 50% más de memoria que los
programas que hacen la gestión de memoria manual.
Muchos de los objetos que se asignan en la pila en C ++ se
asignarán en el montón de Java.
Objetos Java serán más grandes, debido a todos los objetos
que tienen una tabla virtual además de soporte para primitivas de
sincronización.
Una huella de memoria más grande aumenta la probabilidad de
que las partes del programa se pueden intercambiar en el disco. Y el uso del
archivo de intercambio mata la velocidad como ninguna otra cosa.
4. La falta de control sobre los detalles
Java fue diseñado intencionalmente para ser un lenguaje
sencillo. Muchas de las características disponibles en C ++ que le dan el
control del programador sobre los detalles fueron despojados deliberadamente de
distancia.
Por ejemplo, en C ++ se puede implementar esquemas que
mejoren la localidad de referencia. O asignar y muchos objetos libres de una
vez. O jugar trucos punteros para hacer el acceso más rápido miembro. Etcétera
Ninguno de estos sistemas están disponibles en Java.
5. No hay optimizaciones de Alto Nivel
Los programadores lidiar con conceptos de alto nivel. A
diferencia de ellos, los compiladores se ocupan exclusivamente de los de bajo
nivel. Para un programador, una clase llamada Matrix representa un concepto de
alto nivel diferente de una clase denominada Vector. Para un compilador, esos
nombres son sólo las entradas en la tabla de símbolos. Lo que le importa son
las funciones que contienen esas clases, y las sentencias dentro de esas
funciones.
Conclusión
Java, con las características del lenguaje actual, nunca
será tan rápido como C ++. Esto más o menos significa que no es una buena
opción para el software de alto rendimiento y la arena COTS altamente
competitivo. Pero su pequeña curva de aprendizaje, su perdón y su gran
biblioteca estándar la convierten en una buena opción para algunos programas de
pequeño y mediano tamaño de la casa y hecha a la medida.