studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones java file stream resources

java - para - manual de programacion android pdf



¿Cerrar los recursos es siempre importante? (3)

Muchas veces me encontré con la afirmación de que la aplicación siempre debe cerrar explícitamente todos los recursos que abrió.

Mi enfoque de programación es bastante pragmático y no me gusta seguir ciegamente ninguna convención de la que no veo claramente beneficios. De ahí mi pregunta.

Supongamos que:

  1. Tengo una pequeña aplicación
  2. Abre algunos recursos (por ejemplo, archivos, conexiones de bases de datos, transmisiones remotas) y lo procesa
  3. Funciona unos minutos y luego sale
  4. Digamos que está en Java (si el idioma es relevante)

¿Realmente tengo que preocuparme de cerrar todos los recursos que abrí? Supongo que todos los recursos que abrí se cerrarán / liberarán cuando la aplicación / máquina virtual salga. ¿Estoy en lo cierto?

Si eso es cierto, ¿hay alguna razón convincente para preocuparse por cerrar los recursos en una aplicación tan pequeña y corta?

ACTUALIZAR:

La pregunta es puramente hipotética, pero el argumento para no preocuparme por eso es que tal vez estoy simplemente pirateando un guión rápido y no quiero escribir ningún código innecesario que no esté directamente relacionado con el problema en cuestión: cerrar recursos, hacer todo esto verboso try-catch-finally, manejando excepciones que no me importan, etc.

El objetivo de la pregunta es si hay consecuencias prácticas de no hacerlo.


Supongo que todos los recursos que abrí se cerrarán / liberarán cuando la aplicación / máquina virtual salga.

Lo que sucede con un recurso que no fue liberado regualmente está fuera de tu control. Puede no hacer daño, o puede hacer algo. También es altamente dependiente de la plataforma, por lo que probar en solo uno no ayudará.

¿Por qué debería importarme cerrar estos recursos en una aplicación tan pequeña y corta?

El tamaño de la aplicación no debería importar. Primero, las aplicaciones generalmente crecen; segundo, si no practicas hacerlo de la manera correcta, no sabrás cómo hacerlo cuando sea importante.


Respuesta corta - Sí. Por un lado, es una práctica de codificación TERRIBLE como lo es en todas las demás áreas de la vida para no limpiarse después de ti. Por otro lado, no se puede predecir si el sistema operativo reconocerá que el entorno java ya no necesita los recursos y que podría terminar bloqueando archivos / etc que no pueden liberarse sin un reinicio forzado.

¡Siempre limpie los recursos que abre!

Actualización relacionada con la actualización de la pregunta original: se necesitan 5 segundos para agregar un bloque try / catch para cerrar todos los recursos abiertos y evitar que tenga que pasar 5 minutos reiniciando su computadora. Hacerlo bien siempre ahorra tiempo al final. Mi papá siempre me dijo que la verdadera persona perezosa hace las cosas bien la primera vez para que no tengan que volver y volver a hacerlo. Solo digo que no seas flojo y hazlo bien. Los 5 segundos que lleva escribir un bloque catch nunca ralentizarán significativamente el proceso de escritura ... los 5 segundos que ahorras al no escribirlo podrían ralentizar enormemente tu depuración.


Si no cierra los recursos, esto puede llevar a que los servidores de aplicaciones se reinicien con frecuencia cuando se produce el agotamiento de los recursos. Porque los sistemas operativos y las aplicaciones de servidor generalmente tienen un límite superior para los recursos.

De acuerdo con los documentos

La aplicación Java típica manipula varios tipos de recursos, como archivos, flujos de datos, tomas de corriente y conexiones de bases de datos. Esos recursos deben manejarse con sumo cuidado, ya que adquieren recursos del sistema para sus operaciones. Por lo tanto, debe asegurarse de que se liberen incluso en caso de errores

De hecho, la administración incorrecta de recursos es una fuente común de fallas en las aplicaciones de producción, con los inconvenientes habituales de conexiones de bases de datos y descriptores de archivos abiertos después de que se haya producido una excepción en el código. Esto ocasiona que los servidores de aplicaciones se reinicien frecuentemente cuando ocurre un agotamiento de recursos. , porque los sistemas operativos y las aplicaciones de servidor generalmente tienen un límite superior para los recursos.

try-with-resources Declaración presentada en java 7 para los programadores que odian las declaraciones cercanas.