¿Cómo se almacenan los objetos Java en la memoria?

En Java, todos los objetos se asignan dinámicamente en Heap. Esto es diferente de C++, donde a los objetos se les puede asignar memoria en Stack o Heap. En C++, cuando asignamos el objeto usando new(), el objeto se asigna en Heap, de lo contrario, en Stack si no es global o estático.
En Java, cuando solo declaramos una variable de un tipo de clase, solo se crea una referencia (no se asigna memoria para el objeto). Para asignar memoria a un objeto, debemos usar new(). Por lo tanto, al objeto siempre se le asigna memoria en el montón (consulte esto para obtener más detalles).

Hay dos formas de crear un objeto de string en Java:

  1. Por string literal
  2. Por nueva palabra clave

 

i) Por string literal:

Esto se hace usando comillas dobles.

Por ejemplo:

String str1="GFG";
String str2="GFG";

Por string literal

Cada vez que se crea un literal de string, JVM verificará si esa string ya existe en el conjunto de constantes de string o no. Si la string ya existe en el grupo de literales de string, se devuelve una referencia a la instancia agrupada. Si la string no existe, se crea una nueva instancia de string en el grupo. Por lo tanto, solo se creará un objeto.

Aquí, la JVM no está vinculada para crear una nueva memoria.

ii) Por nueva palabra clave:

Esto se hace usando una nueva palabra clave.

Por ejemplo:

String str1=new String("Hello");
String str2=new String("Hello");

Por nueva palabra clave

Tanto str1 como str2 son objetos de String.

Cada vez que se crea un objeto de string, JVM lo creará en una memoria de almacenamiento dinámico. En este caso, la JVM no verificará si la string ya existe o no. Si ya existe una string, también para cada objeto de string, la memoria se creará por separado. 

Aquí, la JVM se une para crear una nueva memoria. Por ejemplo, el siguiente programa falla en la compilación. El compilador da el error «Error aquí porque t no está inicializado».

java

class Test {
 
// class contents
void show()
{
    System.out.println("Test::show() called");
}
}
 
public class Main {
 
        // Driver Code
    public static void main(String[] args)
    {
        Test t;
         
        // Error here because t
        // is not initialized
        t.show();
    }
}

Producción:

 

Asignar memoria usando new() hace que el programa anterior funcione. 

java

class Test {
     
// class contents
void show()
{
    System.out.println("Test::show() called");
}
}
 
public class Main {
     
    // Driver Code
    public static void main(String[] args)
    {
         
        // all objects are dynamically
        // allocated
        Test t = new Test();
        t.show(); // No error
    }
}
Producción

Test::show() called

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *