¿Por qué deberíamos distinguir entre montón y pila?
En primer lugar, desde la perspectiva del diseño de software, la pila representa la lógica de procesamiento y el montón representa los datos. Esta separación aclara la lógica del procesamiento. La idea de divide y vencerás. Esta idea de aislamiento y modularidad se refleja en todos los aspectos del diseño de software.
En segundo lugar, la separación del montón y la pila permite que el contenido del montón sea compartido por varias pilas (también puede entenderse como varios subprocesos que acceden al mismo objeto). Este * * * disfruta de muchos beneficios. Por un lado, este * * intercambio proporciona una forma eficiente de interacción de datos (como * * * memoria compartida); por otro lado, * * * todas las pilas pueden acceder a las constantes compartidas y a los cachés en el montón, ahorrando así espacio. .
En tercer lugar, debido a las necesidades del tiempo de ejecución, como guardar el contexto de las operaciones del sistema, la pila debe dividirse en segmentos de direcciones. Debido a que la pila solo puede crecer hacia arriba, esto limitará su capacidad para almacenar contenido. A diferencia del montón, los objetos en el montón pueden crecer dinámicamente según sea necesario, por lo que la división de la pila y el montón hace posible el crecimiento dinámico y solo es necesario registrar una dirección en la pila correspondiente.
En cuarto lugar, la orientación a objetos es la combinación perfecta de montón y pila. De hecho, los programas orientados a objetos no funcionan de manera diferente a sus predecesores, los programas estructurados. Sin embargo, la introducción de la orientación a objetos ha cambiado la forma de pensar sobre los problemas y se acerca más a la forma de pensar natural. Cuando desmontamos el objeto, descubriremos que las propiedades del objeto son en realidad datos y que los datos se almacenan en el montón. El comportamiento (método) del objeto es ejecutar la lógica y colocarlo en la pila; Cuando escribimos un objeto, en realidad estamos escribiendo la estructura de datos y la lógica para procesar los datos. Debo admitir que el diseño orientado a objetos es realmente hermoso.
En Java, la función Main es el punto de partida de la pila y el punto de partida del programa.
Siempre hay un punto de partida para ejecutar un programa. Al igual que el lenguaje C, Main en Java es el punto de partida. No importa qué programa Java, si encuentra principal, encontrará el punto de entrada para la ejecución del programa :)
¿Qué hay en el montón? ¿Qué hay en la pila?
Hay objetos en el montón. En la pila se almacenan tipos de datos básicos y referencias a objetos en la pila. El tamaño del objeto no se puede estimar y también se puede cambiar dinámicamente, pero en la pila, un objeto solo corresponde a una referencia 4btye (la ventaja de la separación de la pila :).
¿Por qué no poner tipos básicos en el montón? Debido a que el espacio que ocupa es generalmente de 1 a 8 bytes (requiere menos espacio y, debido a que es un tipo básico, no habrá crecimiento dinámico), la longitud es fija, por lo que es suficiente almacenarlo en la pila y almacenarlo. en el montón No tiene ningún significado (también desperdiciará espacio, lo que se explicará más adelante). Basta decir que las referencias a tipos y objetos primitivos se almacenan en la pila, son números de unos pocos bytes y, por lo tanto, se manejan de manera uniforme cuando el programa se está ejecutando. Pero el tipo básico, la referencia del objeto y el objeto en sí son diferentes porque uno son los datos de la pila y el otro son los datos del montón. Uno de los problemas más comunes es el problema de paso de parámetros en Java.