¿Qué diferencia de rendimiento en el mundo real hace el uso de Java vs C ++ en un servidor?

A menos que esté implementando algoritmos hardcore que funcionen en datos en memoria, está perdiendo tiempo escribiendo código en C ++. La mayoría de los desafíos al escribir un servicio web giran en torno al acceso a datos en patrones eficientes y predecibles que son susceptibles de almacenamiento en caché e incluso distribución con respecto a consultas por segundo. Por ejemplo, un sistema para volcar la publicación de un usuario en una base de datos no se beneficiaría de C ++; Si está llegando a los límites de la velocidad del lenguaje, entonces seguramente terminará con una acumulación de escrituras de base de datos de crecimiento monotónico. Por otro lado, un motor de búsqueda necesitaría realizar muchas operaciones de cadena muy rápidamente en estructuras de datos en memoria. Ese es un servicio que probablemente escribiría en C ++ y se conectaría a través de RPC.

En mi experiencia, generalmente es mucho más rápido escribir y depurar grandes bases de código java que escribir y depurar grandes bases de C ++, de ahí el comentario sobre la pérdida de tiempo.

La recolección de basura puede ser un problema en el software del servidor. Por ejemplo, si su servidor necesita mucha memoria (digamos 10GB +) cuando presiona Full GC, esto provocará serias ralentizaciones. Tendrá que ajustar GC dependiendo de cómo su aplicación realmente use esa memoria para evitar llegar a la colección completa.

En cuanto al rendimiento sin procesar, depende de lo que haga su servidor. Si se trata de un servidor de cálculo numérico, lo necesitará. OTOH para juegos, web, y c. alcanzará IO o límites de socket mucho más rápido que la CPU. Nuestros servidores Java, por ejemplo, usan aproximadamente el 1-2% de la CPU en un sistema de 16 núcleos, podemos aumentarlo a tal vez el 10-20% antes de alcanzar los límites de E / S de la red.

En cuanto a las operaciones de socket de bajo nivel, son básicamente las mismas que usará en C ++. Por ejemplo, NIO en Java usa epoll en Linux, que es exactamente lo que usarías.

Por supuesto, puede obtener más de la aplicación C usando libev (ent2). Pero si su servidor tiene una lógica empresarial compleja, podría ser un proceso bastante tedioso escribirlo en C o C ++. La pérdida de memoria es una cosa. Enhebrar es en general difícil de corregir. No hay detección fácil de puntos muertos disponibles (lo que ayuda MUCHO en Java). Desbordamientos y otros problemas de seguridad.

No puedo decirte qué tecnología elegir. Realmente depende de muchas cosas.

Java tiene un poco más de sobrecarga de memoria, pero generalmente no es suficiente para importar en una configuración de servidor.

Java tiene bibliotecas y soporte de programación de servidores mucho mejores, así como una sintaxis de “falla temprana” que permite una productividad de programador mucho mejor.

La velocidad de ejecución es un lavado. Puede obtener un mal rendimiento ya sea escribiendo un código incorrecto. Puede obtener un rendimiento equivalentemente bueno al escribir un buen código.

Java tiene la ventaja de tener herramientas de perfilado realmente buenas. Tiene la desventaja de la disponibilidad de pilas altas de código de otras personas que, si las usa, pueden no ser adecuadas para su entorno particular o casos de uso.

More Interesting

¿Por qué las supercomputadoras usan grupos de servidores estándar en lugar de grupos de mainframes?

Cómo usar el comando sudo su -l: estoy conectado como [correo electrónico protegido] en un servidor y quiero cambiar a user2. Cuando escribo [ [correo electrónico protegido] ] sudo su -l user2, me pide una contraseña y dice que no tengo acceso para hacer sudo

¿Debo pasar de mi servidor dedicado administrado a un VPS no administrado?

¿Cuál es el costo de un servidor?

¿Es un servidor un dispositivo o un código de software?

¿Sería OpenStack una opción razonable para un conjunto de servidores de prueba internos?

¿Cómo configuro un servidor de almacenamiento local como controlador de versión para Unity Engine Collaboration? Quiero que el proyecto se guarde dentro del servidor de almacenamiento local para evitar que cualquier parte sea robada o reutilizada.

¿Cuál es la mejor herramienta para monitorear un conjunto de servidores de Windows (memoria, CPU, E / S)?

¿Cuál es la mejor manera de configurar un servidor privado compatible con HIPAA?

¿Dónde está el servidor principal de Google?

¿Cuáles son las diferentes ventajas y desventajas de usar un servidor de alojamiento compartido, VPS, un servidor de alojamiento dedicado y un servidor en la nube?

¿Qué significa si su servidor está bajo el ataque DDoS con 45 Gbps?

¿Hay alguna forma de configurar un servidor de correo localmente en una PC para un desarrollo web?

¿Cómo se conectan los servidores a internet?

¿Cuál es la forma más efectiva de aprender a administrar mi propio servidor?