Hola gente.
Estoy aprendiendo Java, y todo me parece buenísimo,
pero tengo dudas acerca de la eficiencia del compilador de Java.
Tengo la idea o creencia de que si hago un mismo programa en C++ y en Java,
entonces el programa C++ va a correr más rápido.
¿Es cierto esto?
¿Qué diferencias hay en la eficiencia?
También me llama la atención el mecanismo de ''objetos basura'' de Java,
del cual el programador no tiene control alguno.
Me pregunto si esto repercute en la eficiencia del programa,
ya que al haber memoria aún no liberada,
el JVM ocupa tiempo administrando los recursos de memoria antiguos y nuevos.
De todos modos, las diferencias generales a lo mejor no sean tan graves...
salvo el tema del manejo de datos String.
En C++ tenemos la posibilidad de manejar una cadena de caracteres,
cambiando caracteres individuales si nos place,
y en caso de trabajar asiduamente con Strings,
uno puede manejar cadenas y subcadenas de forma eficiente,
compartiendo trozos de memoria entre distintas cadenas de caracteres por ejemplo, o cambiando un solo caracter si hace falta, entre otras cosas.
Pero en Java estamos obligados a crear un nuevo dato String por cada cambio que hagamos, incluso si este cambio es pequeño, digamos de un solo caracter.
Cuando uno trabaja asiduamente con cadenas de caracteres, esto representa un inconveniente, porque el programa comienza a llenar la memoria rápidamente,
además de que el hecho de estar copiando cadenas completas todo el tiempo es más lento que la manipulación directa de ciertos bytes individuales de la cadena.
Entiendo que esto contribuye a la fiabilidad del sistema, pero lo que estoy discutiendo acá es el tema de la eficiencia.
Si tengo pensado trabajar asiduamente con cadenas de caracteres,
¿es Java tan ineficiente como lo veo yo a simple vista?
¿Es mejor usar otro lenguaje para este tipo de tarea?
¿O existen alternativas en Java que permiten un código eficiente en el trabajo con Strings?
Saludos