JavaRush /Blog Java /Random-ES /Pausa para el café #60. Cómo funciona la recolección de b...

Pausa para el café #60. Cómo funciona la recolección de basura en Java (JVM). 15 preguntas importantes sobre Spring en una entrevista técnica

Publicado en el grupo Random-ES

Cómo funciona la recolección de basura en Java (JVM)

Fuente: ZonaD

Proceso de recolección de basura en Java.

La recolección de basura de Java asigna y libera memoria automáticamente, por lo que los desarrolladores no tienen que escribir un programa separado para administrar la memoria, que es uno de los principales beneficios de la programación en Java. Cada vez que se ejecuta un programa Java en la JVM, se crean objetos en el montón y representan una parte de la memoria asignada al programa. Con el tiempo, algunos elementos ya no serán necesarios. El recolector de basura encuentra estos objetos no utilizados y los elimina para liberar memoria. Pausa para el café #61.  Cómo funciona la recolección de basura en Java (JVM).  15 preguntas importantes sobre Spring en una entrevista técnica - 1El recolector de basura, después de evaluar el montón de memoria, determinará qué objetos están en uso y cuáles no, y eliminará los objetos no utilizados. Un objeto usado o referenciado significa que alguna parte de su programa aún mantiene un puntero a ese objeto. Si un objeto ya no está en uso o ya no se hace referencia a él, ninguna parte del programa ya hará referencia a él. Por lo tanto, la memoria utilizada por un objeto sin referencia se puede liberar realizando la recolección de basura. Pausa para el café #61.  Cómo funciona la recolección de basura en Java (JVM).  15 preguntas importantes sobre Spring en una entrevista técnica - 2La liberación de memoria se puede describir mediante tres procesos principales:
  1. Calificación.
  2. Eliminación normal.
  3. Remoción con compactación.
El marcado es el proceso de identificar partes de la memoria que el recolector de basura utiliza y las que no. El etiquetado suele ser el primer paso. La eliminación normal es el proceso de eliminar objetos a los que no se hace referencia, dejando los objetos referenciados y los punteros en el espacio libre. Eliminación de compactación : además de eliminar objetos sin referencia, compacta los objetos referenciados restantes, moviendo los objetos juntos para hacer que la nueva asignación de memoria sea mucho más fácil y rápida.

Memoria de montón JVM

Pausa para el café #61.  Cómo funciona la recolección de basura en Java (JVM).  15 preguntas importantes sobre Spring en una entrevista técnica - 3

Generación joven

Los objetos recién creados comienzan en Young Generation. También se le llama guardería porque aquí comienzan a vivir nuevos objetos. Young Generation se divide en Eden Space, donde comienzan todos los objetos nuevos, y dos Survivor Spaces, donde los objetos se sacan de Eden después de sobrevivir en un único ciclo de recolección de basura. Provocan una nueva recolección de basura cuando el recolector de basura de Young Generation recolecta los objetos. Eden Space Todos los objetos nuevos se crean primero en Eden Space. La recolección de basura menor se activará cuando alcance un umbral determinado por la JVM. Los objetos mencionados se mueven desde Eden Space al primer espacio guardado ('Eden' y 'desde' -> 'hacia'). Los objetos sin referencia se eliminan cuando se limpia Eden Space. Superviviente 0 (S0) y Superviviente 1 (S1) Ambos campos de superviviente (desde y hacia) comienzan en blanco. Cuando se vuelve a realizar la recolección de basura, todos los objetos a los que se hace referencia se mueven al espacio restante. Cuando finaliza la recolección de basura, se intercambian los lugares (nombres) del superviviente "de" y "hasta". Si durante la recolección de basura anterior, S1 estaba en la función "hacia", ahora S1 está lleno y pasa a ser "desde". En consecuencia, si S0 está vacío, se convertirá en "to".

Vieja generación

Después de una recolección de basura menor, cuando los objetos obsoletos alcanzan un cierto umbral de edad (el umbral predeterminado para las JVM modernas se establece en 15 ciclos de recolección de basura), junto con los objetos de larga duración, pasan de la generación joven a la anterior. A medida que sigan surgiendo recolectores de basura menores, los objetos continuarán moviéndose hacia el espacio de la Vieja Generación, este comenzará a llenarse y se producirá una recolección de basura importante. La recolección de basura básica ocurre cuando el recolector de basura de vieja generación recolecta los objetos. Pausa para el café #61.  Cómo funciona la recolección de basura en Java (JVM).  15 preguntas importantes sobre Spring en una entrevista técnica - 4

Generación Permanente

Los metadatos, como clases y métodos, se almacenan en Generación permanente. El recolector de basura puede eliminar las clases que ya no se utilizan. Durante una recolección de basura completa, se recolectan objetos no utilizados de todas las generaciones.Pausa para el café #61.  Cómo funciona la recolección de basura en Java (JVM).  15 preguntas importantes sobre Spring en una entrevista técnica - 5

Tipos de recolección de basura

Las recolecciones de basura que limpian varias partes dentro del montón a menudo se denominan recolecciones de basura menor, mayor y completa. Pero dado que los términos Menor, Mayor y Completo se usan ampliamente sin una definición adecuada, veremos la explicación de todos estos tipos de recolección de basura.

Recolección de basura menor

La recolección de basura del espacio Generación Joven se denomina Recolección de Basura Menor. Este tipo de compilación siempre se activa cuando la JVM no puede asignar espacio para un nuevo objeto, es decir, cuando Eden Space está lleno. Por lo tanto, cuanto mayor sea la tasa de selección, con mayor frecuencia se producirá la recolección de basura menor.

Recolección importante de basura

La importante recolección de basura limpia Tenured (espacio antiguo). Debido a que la Vieja Generación es más grande, la asamblea ocurre con menos frecuencia que la Generación Joven. Cuando los objetos desaparecen de la Vieja Generación, decimos que se ha producido una "recolección importante de basura". El coleccionista de Old Generation intentará predecir cuándo necesita comenzar a coleccionar para evitar fallas en la promoción de Young Generation. Los recolectores monitorean el umbral de llenado de la Vieja Generación y comienzan a recolectar cuando se excede ese umbral. Si este umbral no es suficiente para cumplir con los requisitos de la promoción, se lanza la "Recolección completa de basura".

Recolección completa de basura

Full Garbage Collection limpia todo, tanto espacios jóvenes como viejos. Mucha gente está confundida entre Major (solo generación ANTIGUA) y GC completo (Joven + ANTIGUO (Heap)). La recolección completa de basura incluye la promoción de todos los objetos vivos de la generación joven a la vieja después de ensamblar y compactar la generación anterior. La recogida completa de basura será una parada de Stop-the-World. Garantiza que no se asignen nuevos objetos y que los objetos no se vuelvan inaccesibles mientras el recopilador se está ejecutando.

15 preguntas importantes sobre Spring en una entrevista técnica

Fuente: Dev.to Spring Framework es un marco universal para la plataforma Java. Sus funciones principales pueden ser utilizadas por cualquier aplicación Java y existen extensiones para crear aplicaciones web basadas en Java EE. Aquí hay una lista de preguntas y respuestas de entrevistas relacionadas con la codificación Spring. Esperamos que te ayuden a prepararte para tu entrevista técnica en 2021.Pausa para el café #61.  Cómo funciona la recolección de basura en Java (JVM).  15 preguntas importantes sobre Spring en una entrevista técnica - 6

1. ¿Qué es la primavera?

Respuesta: Spring es un marco de código abierto para desarrollar aplicaciones Java. Las funciones principales de Spring Framework se pueden utilizar para desarrollar cualquier aplicación Java, y también hay extensiones disponibles para crear aplicaciones web basadas en la plataforma Java EE. El marco Spring tiene como objetivo hacer que J2EE sea más fácil de usar en el desarrollo y mejorar las prácticas de programación incorporando un modelo basado en POJO (Plain Old Java Object).

2. ¿Cuál es el alcance predeterminado de un bean en el marco Spring?

Respuesta: El alcance predeterminado de un bean es Singleton (patrón de diseño).

3. ¿Qué es el cableado Bean?

Responder: El cableado de beans es el acto de crear asociaciones entre componentes de la aplicación (beans) en un contenedor Spring.

4. ¿Qué es Spring Security?

Respuesta: Spring Security es un módulo independiente del marco Spring que se centra en proporcionar métodos de autenticación y autorización para aplicaciones Java. También corrige las vulnerabilidades de seguridad más comunes, como los ataques CSRF. Para utilizar Spring Security en aplicaciones web, puede comenzar con una anotación simple: @EnableWebSecurity.

5. ¿Qué contiene la definición de frijol?

Respuesta: Una definición de bean contiene información llamada metadatos de configuración que el contenedor necesita saber lo siguiente:
  • Cómo crear un frijol;
  • Detalles del ciclo de vida del frijol;
  • dependencias de frijol.

6. ¿Qué es Spring Boot?

Respuesta: Spring Boot es un proyecto que proporciona un conjunto de marcos preconfigurados para reducir la configuración estándar para que pueda poner en funcionamiento una aplicación Spring con un código mínimo.

7. ¿Qué es DispatcherServlet y para qué se utiliza?

Respuesta: DispatcherServlet es una implementación del patrón de diseño Front Controller que maneja todas las solicitudes web entrantes a una aplicación Spring MVC. El patrón Front Controller (Enterprise Application Design Pattern) es un patrón común en aplicaciones web cuyo trabajo es tomar la solicitud completa y enrutarla a varios componentes de la aplicación para su procesamiento real. En Spring, MVC DispatcherServlet se utiliza para encontrar el controlador correcto para manejar la solicitud. Esto se hace mediante el mapeo de controladores: por ejemplo, la anotación @RequestMapping.

8. ¿Se necesita spring-mvc.jar en el classpath o es parte de spring-core?

Respuesta: Spring-mvc.jar es parte de spring-core, lo que significa que si desea utilizar el marco Spring MVC en su proyecto Java, debe incluir spring-mvc.jar en el classpath de su aplicación. En una aplicación web Java, spring-mvc.jar generalmente se coloca en la carpeta /WEB-INF/lib.

9. ¿Cuáles son los beneficios de usar Spring?

Respuesta: A continuación se muestra una lista de algunos beneficios de usar Spring Framework:
  • Ligero : Spring es relativamente liviano en cuanto a tamaño y transparencia. La versión básica de Spring Framework pesa aproximadamente 2 MB.
  • Inversión de control (IOC) : el acoplamiento flojo se logra en Spring utilizando la técnica de inversión de control. Los objetos proporcionan sus dependencias en lugar de crear o buscar objetos dependientes.
  • Orientado a aspectos : Spring admite la programación orientada a aspectos y garantiza un desarrollo coherente al desacoplar la lógica empresarial de las aplicaciones de los servicios del sistema.
  • Contenedores : Spring Container crea objetos, los une, los configura y los administra desde su creación hasta su eliminación.
  • MVC Framework : Spring web framework es un framework web MVC bien diseñado que proporciona una alternativa a los frameworks web como Struts u otros frameworks web excesivamente diseñados o menos populares.
  • Gestión de transacciones : Spring tiene una interfaz de gestión de transacciones consistente que puede escalar a transacciones locales (por ejemplo, usando una única base de datos) o transacciones globales (por ejemplo, usando JTA).
  • Manejo de excepciones : Spring proporciona una API conveniente para convertir excepciones específicas de tecnología (como las generadas por JDBC, Hibernate o JDO) en excepciones consistentes y no verificadas.

10. ¿Qué son los frijoles primaverales?

Respuesta: Spring beans son instancias de objetos administrados por Spring Container. Son creados y conectados por la estructura y colocados en una “bolsa de objetos” (contenedor) de donde luego podrás recuperarlos. El cableado es lo que constituye la inyección de dependencia. Esto significa que puede simplemente decir: "Necesito esto" y el marco seguirá ciertas reglas para obtener ese objeto.

11. ¿Cuál es el propósito del módulo Core Container?

Respuesta: El contenedor del kernel proporciona la funcionalidad principal del marco Spring. El componente principal del contenedor principal es BeanFactory, una implementación del patrón Factory. BeanFactory utiliza el control de inversión para separar las dependencias de configuración y especificación de la aplicación del código de aplicación real.

12. ¿Qué es un contexto de aplicación?

Respuesta: A primera vista, el contexto de la aplicación es el mismo que el de la fábrica de frijoles. Ambos cargan definiciones de beans, agrupan los beans y los distribuyen a pedido. Pero también proporciona:
  • Una herramienta para la resolución de mensajes de texto, incluido el soporte para la internacionalización.
  • Una forma común de cargar recursos de archivos.
  • Eventos para beans que están registrados como oyentes.

13. ¿Cómo integrar Java Server Faces (JSF) con Spring?

Respuesta: JSF y Spring comparten algunas de las mismas características, especialmente en el área de servicios de inversión de control. Al declarar beans administrados JSF en el archivo de configuración faces-config.xml, permite que FacesServlet cree una instancia de ese bean al inicio. Sus páginas JSF tienen acceso a estos beans y todas sus propiedades. JSF y Spring se pueden integrar de dos maneras: DelegatingVariableResolver : Spring viene con un solucionador de variables JSF que le permite usar JSF y Spring juntos. DelegatingVariableResolver primero delega la búsqueda de valores al intérprete predeterminado de la implementación JSF subyacente y luego al "contexto empresarial" de Spring WebApplicationContext. Esto facilita la inyección de dependencias en beans administrados por JSF. FacesContextUtils : un VariableResolver personalizado funciona bien al asignar sus propiedades a beans en faces-config.xml. Pero si necesita capturar un bean, la clase FacesContextUtils lo hace fácil. Es similar a WebApplicationContextUtils excepto que acepta un parámetro FacesContext en lugar de un parámetro ServletContext.
ApplicationContext ctx = FacesContextUtils.getWebApplicationContext (FacesContext.getCurrentInstance ());

14. ¿Qué es el marco Spring MVC?

Respuesta: El marco Spring Web MVC proporciona una arquitectura de controlador de vista de modelo y componentes prediseñados que se pueden utilizar para desarrollar aplicaciones web flexibles y poco acopladas. El patrón MVC da como resultado la separación de diferentes aspectos de una aplicación (lógica de entrada, lógica de negocios y lógica de UI) al tiempo que permite un acoplamiento flexible entre estos elementos.

15. ¿Cómo funciona el manejo de eventos en Spring?

Respuesta: El procesamiento en ApplicationContext se proporciona a través de la clase ApplicationEvent y la interfaz ApplicationListener. Es decir, si un bean implementa ApplicationListener , cada vez que se publica un ApplicationEvent en ApplicationContext , ese bean se registra. ¡Gracias por leer y buena suerte con tu entrevista técnica!
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION