Red de conocimiento informático - Conocimiento sistemático - Profundizando en el área de almacenamiento de objetos y elementos de Java

Profundizando en el área de almacenamiento de objetos y elementos de Java

Al desarrollar aplicaciones en la plataforma JAVA, una característica importante es que los objetos se crean cuando la aplicación se está ejecutando. En otras palabras, cuando el programa se esté ejecutando, finalmente se determinará la propiedad del objeto, es decir, dónde debe almacenarse el objeto. Dado que se almacenan en diferentes áreas, su rendimiento variará. Por este motivo, como desarrollador de programas Java, es necesario comprender las características de cada área de almacenamiento y su impacto en el rendimiento. Luego ajuste la asignación de regiones de la aplicación según sea necesario. En general, hay cinco lugares en el sistema operativo donde se pueden guardar los datos de las aplicaciones en ejecución. Las características de dichas áreas y su impacto en el desempeño se analizan a continuación.

Área de almacenamiento uno: registro

Aunque ambas están en la memoria, diferentes áreas tienen diferentes rendimientos debido a diferentes usos. Por ejemplo, tomando una aplicación Java, debido a que el registro está dentro del procesador, esta área es la más rápida para acceder a los datos. Es muy diferente de otras áreas de almacenamiento en la memoria. Entonces, si colocamos todos los objetos en esta área, ¿no podemos mejorar el rendimiento de las aplicaciones Java? En teoría, esto es cierto, pero en realidad no funciona. Porque el número de este registro es muy limitado. El compilador asigna las áreas de registro en la memoria según sea necesario. Los desarrolladores de programas no podemos controlar la asignación de este registro a través del código. Por lo tanto, sólo podemos mirar este primer registro de área de almacenamiento, pero no podemos tener ningún impacto sobre él.

Área de almacenamiento 2: Pila

Hay dos formas de crear objetos. Una es crear el objeto durante el proceso de desarrollo de la aplicación y la otra es usarlo durante el proceso de ejecución del programa. Cuando llegue al objeto, créelo nuevamente. El primero tiene un mayor rendimiento que el segundo, mientras que el segundo es más flexible que el primero. Esto se debe principalmente a que cuando el primero crea un objeto, se crea en esta pila. Aunque el objeto que crea no se guarda en un registro, se puede obtener soporte relevante directamente del procesador a través del puntero de pila de este objeto. Si el puntero de la pila se mueve hacia arriba, la memoria ocupada por el objeto original se libera; si el puntero de la pila se mueve hacia abajo, se asigna nueva memoria para el objeto. Por lo tanto, si el objeto se almacena en esta pila, aunque el rendimiento no es tan ideal como almacenarlo en un registro, sigue siendo mucho mejor que almacenarlo en otro lugar.

Porque los programas Java crean objetos según sea necesario durante la ejecución del programa. Por este motivo, el objeto no se puede guardar en esta pila. Sin embargo, las aplicaciones Java no pueden desperdiciar este precioso espacio en vano. Por esta razón, aunque el objeto Java en sí no se guarda en esta pila (no es que no se guarde sino que no hay lugar para él aquí), parte del contenido que se puede colocar aún debe colocarse en esta pila para mejorar el rendimiento. de la aplicación. Por ejemplo, algunas referencias a objetos se pueden almacenar en esta pila.

Además, para algunos objetos de tipo de datos básicos, los programas Java a menudo los colocan en la pila para mejorar el rendimiento del procesamiento de datos. Por ejemplo, algunos objetos de datos de números enteros y caracteres tienen algunas características diferentes, como objetos relativamente pequeños, objetos estándar proporcionados por programas Java, etc. Básicamente, cada aplicación necesita utilizar estos objetos, y nuestros desarrolladores de programas solo pueden hacer referencia a estos objetos pero no cambiarlos. Por esta razón, cuando los programas Java están procesando, a menudo crean objetos al principio (es decir, crean objetos directamente en la pila y los guardan), a diferencia de otros objetos, que se crean cuando es necesario. Hay otra razón importante por la que estos objetos se crean en la pila. Porque si los objetos se crean en la pila, el editor de Java debe conocer el tamaño exacto y la vida útil de todos los datos almacenados en la pila. Para obtener esta información, se debe generar el código relevante para obtener esta información para que pueda operar el puntero de pila. Los tamaños de objetos ordinarios, ciclos de vida, etc. son difíciles de obtener de antemano, por lo que crear objetos ordinarios en la pila no es muy adecuado para aplicaciones Java. Por el contrario, el tamaño de estos objetos predefinidos por el compilador de Java no cambiará con los cambios en la arquitectura del hardware de la máquina y las necesidades del usuario, y estos objetos a menudo existirán de principio a fin, por lo que no hay problemas de ciclo de vida. Por lo tanto, colocar estos objetos en la pila es razonable y factible. Este procesamiento no solo no afectará la flexibilidad del objeto, sino que también proporcionará un mejor rendimiento.

Área de almacenamiento tres: Montón

Aunque el montón es lo mismo que la pila, ambas son áreas en la memoria de acceso aleatorio, pero son muy diferentes. Debido a que no hay un puntero de pila en el montón, no hay soporte directo del procesador. Por este motivo, existe una cierta brecha entre su rendimiento y el del stack. Normalmente, excepto algunos de los objetos predefinidos mencionados anteriormente, otros objetos se almacenan en este montón. En otras palabras, los objetos creados con la nueva palabra clave se almacenan en el montón. Los beneficios de guardarlo en el montón también son obvios. Por ejemplo, el compilador de Java no necesita saber cuánta área de almacenamiento debe asignarse del montón, ni tampoco cuánto tiempo sobrevivirán los datos almacenados en el montón. Por tanto, existe mucha flexibilidad a la hora de asignar almacenamiento en el montón. Cuando se necesita un objeto, podemos usar la palabra clave Nuevo para crear un objeto. Luego, el sistema asignará automáticamente un área en el montón para este objeto como su hogar. Sin embargo, su mayor desventaja es que la creación de objetos y la asignación de áreas de almacenamiento en el montón es mucho más lenta que en la pila. No puedes quedarte con tu pastel y comértelo también.

Área de almacenamiento cuatro: área de almacenamiento estático y área de almacenamiento constante

Hay algunos elementos especiales en los objetos Java. Por ejemplo, algunos elementos son especiales (como las variables definidas mediante la palabra clave Estática). Estas variables pueden ser estáticas para otros objetos. Para gestionar mejor estas variables, Java divide especialmente un área de almacenamiento estático en la memoria para gestionar estos elementos. El área de almacenamiento estático aquí se refiere al almacenamiento de datos en una ubicación fija que siempre existe cuando la aplicación se está ejecutando. Una cosa que debe quedar clara aquí es que el objeto Java no se guarda en este lugar, sino que solo se colocan aquí algunos elementos especiales del objeto. Como la ubicación es fija, te ahorrarás la molestia de buscar la próxima vez que lo llames. Por este motivo es beneficioso mejorar el rendimiento de la aplicación. Como desarrolladores de programas, debemos aplicar de manera flexible la palabra clave estática al escribir código. La opinión del autor es que si puedes usarlo, úsalo; cuando no puedas usarlo, también debes pensar en formas de usarlo. En particular, si algunos elementos usan la palabra clave Static o no, no tiene ningún impacto en las funciones del programa. En este momento, debemos agregar con confianza la palabra clave Static delante del elemento.

También existe un tipo especial de elemento en los objetos Java, al que llamamos constantes. Porque el valor de una constante es estable, como pi. Es posible ponerlos dentro del código para este propósito. Pero a veces, cuando desarrollamos algunos sistemas integrados, no hacemos esto. En cambio, los elementos constantes y el código se guardarán por separado. Por ejemplo, almacenaremos el valor de la constante en alguna memoria de solo lectura según la situación. Esto es principalmente para algunas funciones especiales. Si es necesario para el control de derechos de autor. Por ejemplo, para proteger los derechos de autor de los consumibles originales de las impresoras, las constantes y los códigos suelen almacenarse por separado.

Área de almacenamiento 5: almacenamiento sin RAM

A veces, colocaremos algunos datos necesarios para la ejecución del programa en otros lugares. Por ejemplo, en algunos sistemas, es necesario utilizar un objeto de flujo. Los datos de este objeto no se guardan en ninguna de las áreas de almacenamiento mencionadas anteriormente. Este objeto se convierte directamente en un flujo de bytes y se envía a otros hosts. También existe un tipo de objeto llamado persistente, que se almacena en el disco duro. Estos objetos no se utilizan comúnmente en el proceso de desarrollo de aplicaciones. Solo necesita conocer su existencia. No es demasiado tarde para estudiarlo en profundidad cuando necesites utilizarlo.

Del análisis anterior, podemos ver que a nuestros desarrolladores de programas les resulta difícil controlar la propiedad de los objetos. Los registros son gestionados por el compilador. El montón y la pila están básicamente limitados por la plataforma de desarrollo y los programadores no tenemos la capacidad de interferir con ellos. De hecho, lo que podemos ajustar y controlar principalmente es la cuarta área de almacenamiento, es decir, el almacenamiento estático y el almacenamiento constante. La sugerencia del autor es que para los programas no integrados que se pueden implementar mediante almacenamiento estático, intente utilizar almacenamiento estático. Para las constantes, debe determinar si las constantes deben almacenarse en la memoria de solo lectura en función de las funciones que deben implementarse. A veces, esta memoria de sólo lectura es necesaria para la protección de derechos de autor, etc.