¿Qué cosas necesito saber sobre el modelo de memoria Java para una entrevista técnica?

Aquí hay algunas preguntas. Creo que estos son suficientes.

Q1. ¿Cuándo se cargan las variables estáticas en la memoria?

Resp. Se cargan en tiempo de ejecución cuando se carga la clase respectiva.

Q2 ¿Qué es un conjunto de cadenas?

Resp. El grupo de cadenas (grupo interno de cadenas) es un área de almacenamiento especial en el montón de Java. Cuando se crea una cadena y si la cadena ya existe en el grupo, se devolverá la referencia de la cadena existente, en lugar de crear un nuevo objeto y devolver su referencia.

Q3. ¿Cuántos objetos se crean con este código?

Cadena s = nueva Cadena (“abc”);

Resp. Aquí se crearán dos objetos. Un objeto crea memoria en el montón con el nuevo operador y el segundo en el grupo constante de la pila con “abc”.

Q4. ¿Cuáles son los diferentes segmentos de la memoria?

Resp.

1. Segmento de pila: contiene variables locales y variables de referencia (variables que contienen la dirección de un objeto en el montón)

2. Segmento de montón: contiene todos los objetos creados en tiempo de ejecución, solo los objetos más sus atributos de objeto (variables de instancia)

3. Segmento de código: el segmento donde reside el bytecodes Java compilado real cuando se carga

Q5. ¿Qué segmento de memoria carga el código Java?

Resp. Segmento de código.

Q6. ¿La recolección de basura garantiza que un programa no se quede sin memoria?

Resp. La recolección de basura no garantiza que un programa no se quede sin memoria. Es posible que los programas utilicen los recursos de memoria más rápido que la recolección de basura. También es posible que los programas creen objetos que no están sujetos a recolección de basura.

Q7. ¿Describe qué sucede cuando se crea un objeto en Java?

Resp.

1. La memoria se asigna desde el montón para contener todas las variables de instancia y los datos específicos de la implementación del objeto y sus superclases. Los datos específicos de implementación incluyen punteros a datos de clase y método.

2. Las variables de instancia de los objetos se inicializan a sus valores predeterminados.

3. Se invoca el constructor para la clase más derivada. Lo primero que hace un constructor es llamar al constructor para sus superclases. Este proceso continúa hasta que se llama al constructor de java.lang.Object,
como java.lang.Object es la clase base para todos los objetos en java.

4. Antes de ejecutar el cuerpo del constructor, se ejecutan todos los inicializadores de variables de instancia y los bloques de inicialización. Luego se ejecuta el cuerpo del constructor. Por lo tanto, el constructor de la clase base completa primero y el constructor de la clase más derivada completa el último.

Q8. Describa, en general, ¿cómo funciona el recolector de basura de Java?

Resp. El entorno de tiempo de ejecución Java elimina objetos cuando determina que ya no se usan. Este proceso se conoce como recolección de basura. El entorno de tiempo de ejecución Java admite un recolector de basura que libera periódicamente la memoria utilizada por los objetos que ya no son necesarios. El recolector de basura de Java es un recolector de basura de barrido de marcas que escanea las áreas de memoria dinámica de Java en busca de objetos, marcando aquellos a los que se hace referencia. Después de que se investigan todas las rutas posibles a los objetos, se sabe que los objetos que no están marcados (es decir, que no están referenciados) son basura y se recogen.

Q9. ¿Puedo importar el mismo paquete / clase dos veces? ¿JVM cargará el paquete dos veces en tiempo de ejecución?

Resp. Se puede importar el mismo paquete o la misma clase varias veces. Ni el compilador ni JVM se quejan de eso. Y la JVM cargará internamente la clase solo una vez, sin importar cuántas veces importe la misma clase.

Q10. ¿Diferentes tipos de memoria utilizados por JVM?

Resp. Clase, montón, pila, registro, pila de métodos nativos.

Q11. ¿Qué es un cargador de clases? ¿Cuáles son los diferentes cargadores de clases utilizados por JVM?

Resp. Parte de JVM que se usa para cargar clases e interfaces.

Bootstrap, Extension y System son los cargadores de clases utilizados por JVM.

Q12. Explicar java.lang.OutOfMemoryError?

Resp. Este error se produce cuando la máquina virtual Java no puede asignar un objeto porque no tiene memoria y el recolector de basura no puede poner a disposición más memoria.

Q13. ¿Es JVM, un compilador o un intérprete?

Resp. Es un intérprete.

Q14. ¿Diferencia entre loadClass y Class.forName?

Resp. loadClass solo carga la clase pero no inicializa el objeto, mientras que Class.forName inicializa el objeto después de cargarlo.

Q15. ¿Deberíamos anular el método de finalización?

Resp. Finalize es utilizado por Java para la recolección de basura. No debe hacerse, ya que deberíamos dejar la recolección de basura a Java.

Q16. ¿Qué tipo de memoria se usa para almacenar variables de miembros de objeto y variables locales de función?

Resp. Las variables locales se almacenan en la pila, mientras que las variables de objeto se almacenan en el montón.

Q17. ¿Por qué las variables miembro tienen valores predeterminados mientras que las variables locales no tienen ningún valor predeterminado?

Resp. Las variables miembro se cargan en el montón, por lo que se inicializan con valores predeterminados cuando se crea una instancia de una clase. En el caso de variables locales, se almacenan en la pila hasta que se utilizan.

Q18. ¿Por qué Java no usa punteros?

Resp. Los punteros son vulnerables y un ligero descuido en su uso puede ocasionar problemas de memoria y, por lo tanto, Java gestiona intrínsecamente su uso.

Q19. ¿Cuáles son los diversos tipos de cargadores de clase utilizados por JVM?

Resp.

Bootstrap – Carga clases internas JDK, paquetes java. *.

Extensiones: carga archivos jar desde el directorio de extensiones JDK, generalmente el directorio lib / ext del JRE

Sistema: carga clases desde el classpath del sistema.

Q20. ¿Cómo son cargadas las clases por JVM?

Resp. Los cargadores de clases son jerárquicos. La primera clase se carga especialmente con la ayuda del método estático main () declarado en su clase. Todas las clases cargadas posteriormente son cargadas por las clases, que ya están cargadas y en ejecución.

Q21. ¿Diferencia entre carga de clase estática vs. dinámica?

Resp.

carga estática: las clases se cargan estáticamente con el “nuevo” operador de Java.

carga dinámica de clases: la carga dinámica es una técnica para invocar mediante programación las funciones de un cargador de clases en tiempo de ejecución.

Class.forName (Test className);

Q22. ¿Cuáles son las referencias fuertes, suaves, débiles y fantasmas en Java?

Resp. El recolector de basura no eliminará una referencia fuerte.

Una referencia suave solo se eliminará si la memoria es baja.

Se eliminará una referencia débil en el próximo ciclo de recolección de basura.

Se finalizará una referencia fantasma pero no se recuperará la memoria. Puede ser útil cuando desea que se le notifique que un objeto está a punto de ser recolectado.

Q23. Nombre algunas herramientas para sondear las fugas de memoria de Java?

Resp. JProbe, OptimizeIt

Q24. ¿Qué áreas de memoria usa la instancia y las variables estáticas?

Resp. Las variables de instancia se almacenan en la pila, mientras que las variables estáticas se almacenan en el montón.

Q25. ¿Qué es PermGen o generación permanente?

Resp. La agrupación de memoria que contiene todos los datos reflectantes de la máquina virtual Java en sí, como los objetos de clase y método. Con las máquinas virtuales Java que utilizan el intercambio de datos de clase, esta generación se divide en áreas de solo lectura y lectura-escritura. La generación permanente contiene metadatos requeridos por la JVM para describir las clases y los métodos utilizados en la aplicación. La generación permanente es poblada por la JVM en tiempo de ejecución en función de las clases en uso por la aplicación. Además, las clases y métodos de la biblioteca Java SE pueden almacenarse aquí.

Q26. ¿Qué es el metaespacio?

Resp. El espacio de Generación Permanente (PermGen) se ha eliminado por completo y se reemplaza por un nuevo espacio llamado Metaspace. Las consecuencias de la eliminación de PermGen es que obviamente los argumentos JVM de PermSize y MaxPermSize son ignorados y nunca obtendrá un error java.lang.OutOfMemoryError: PermGen.

Q27. ¿Cuáles son las desventajas de usar matrices?

Resp. Las matrices son de tamaño fijo y tienen que reservar memoria antes de su uso. Por lo tanto, si no sabemos el tamaño de antemano, no se recomienda usar matrices.

Las matrices solo pueden almacenar elementos homogéneos.

Las matrices almacenan sus valores en una ubicación de memoria contenciosa. No es adecuado si el contenido es demasiado grande y necesita distribuirse en la memoria.

No hay una estructura de datos subyacente para las matrices y no hay soporte de método listo para las matrices, para cada requerimiento necesitamos codificar explícitamente

Q28. ¿Podemos llamar al recolector de basura explícitamente?

Resp. Sí, podemos llamar al recolector de basura de JVM para eliminar cualquier variable no utilizada y objetos sin referencia de la memoria usando el método gc (). Este método gc () aparece en las clases Runtime y System del paquete java.lang.

Q29. ¿Cuáles son las diferentes formas de crear un objeto de cadena? Explique.

Resp.

String str = nueva cadena (“abc”);
String str1 = “abc”;

Cuando creamos una cadena usando comillas dobles, JVM busca en el conjunto de cadenas para encontrar si alguna otra cadena se almacena con el mismo valor. Si se encuentra, solo devuelve la referencia a ese objeto String; de lo contrario, crea un nuevo objeto String con un valor dado y lo almacena en el grupo String.

Cuando usamos un nuevo operador, JVM crea el objeto String pero no lo almacena en el conjunto de cadenas. Podemos usar el método intern () para almacenar el objeto String en el conjunto de String o devolver la referencia si ya hay un String con el mismo valor presente en el pool.

Q30. ¿Cómo el método substring () de la clase String crea pérdidas de memoria?

Resp. El método de subcadena crearía un nuevo objeto String manteniendo una referencia a toda la matriz de caracteres, para evitar copiarlo. Por lo tanto, puede mantener inadvertidamente una referencia a una matriz de caracteres muy grande con solo una cadena de caracteres.

Q31. ¿Cómo proporciona Java un alto rendimiento?

Resp. Java utiliza el compilador Just-In-Time para permitir un alto rendimiento. El compilador Just-In-Time es un programa que convierte el bytecode de Java en instrucciones que pueden enviarse directamente al procesador.

Q32. ¿Por qué Java se considera lenguaje portátil?

Resp. Java es un lenguaje portátil porque sin ninguna modificación podemos usar el código de bytes de Java en cualquier plataforma (que admita Java). Por lo tanto, este código de bytes es portátil y podemos usarlo en cualquier otra plataforma importante.

Q33. Cómo encontrar si JVM es de 32 o 64 bits del programa Java. ?

Resp. Puede encontrar JVM – 32 bit o 64 bit usando System.getProperty () del programa Java.

Lea JSR 133 sobre el reordenamiento del compilador, la palabra clave volátil, ocurre antes del contrato y algunos ejemplos y aplicaciones

More Interesting

¿Cómo son las ubicaciones de la minería en NIT Rourkela?

¿Cómo es ser un estudiante de M.Tech de 40 años en IIT Madras?

¿Scrum es adecuado para una pequeña empresa con lanzamientos mensuales fijos?

Cómo convertirse en matemático

Estoy planeando obtener un MBA en gestión de operaciones. ¿Qué certificación (es) de APIC funcionarían bien con mi título?

Mi experiencia actual no es contable. Actualmente trabajo en operaciones en una empresa de inversión. Si quisiera cambiar a un puesto de contabilidad en otra empresa, ¿me sería difícil encontrar un trabajo? ¿Qué podría obtener de pago sabio?

¿Qué debo hacer como un indio de clase media, un MS en los Estados Unidos o continuar con un trabajo de software en la India?

Conseguí un trabajo en una especie de empresa de nueva creación. Soy capaz, pero nunca intenté hacer los programas de laboratorio cuando estaba en la universidad. ¿Hay alguna posibilidad de que me echen de mi compañía?

¿Hay alguna startup que busque nuevas empresas con experiencia en ingeniería mecánica?

Cómo sacar lo mejor de mi carrera de 4 años en el Cuerpo de Marines

Mi amigo ha fallado en BGV ya que había falsificado los recibos de sueldo en una multinacional ahora están pidiendo autenticación del último banco.

¿Qué tengo que hacer? (por favor lea la descripción)

¿Cuál es la mejor fuente de ingresos a tiempo parcial durante los primeros años de la universidad?

¿Cómo puedo unirme a la marina mercante después de hacer un BTech en EEE?

¿Cómo hacer un cambio de carrera que no se siente en gran medida para uno mismo?