Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 15843|Respuesta: 0

[Fuente] Análisis de métodos estáticos y patrones singleton

[Copiar enlace]
Publicado en 10/10/2019 18:15:05 | | |
A menudo tenemos tanta confusión en la programación, algunas funciones se resuelven usando singletons y otras funciones usando métodos estáticos, entonces, ¿cuáles son los principios y escenarios de uso de los métodos estáticos y singletons? Dejemos esto claro hoy.

1. Primero veamos la diferencia entre métodos estáticos y métodos no estáticos.

        Muchos programadores tienen esta comprensión de que los métodos estáticos cargan primero, los no estáticos cargan después, los métodos estáticos siempre existirán en memoria y los métodos no estáticos no. Por lo tanto, se recomienda usar un método no estático. En primer lugar, es incorrecto enfatizar que esta comprensión es errónea.

        En primer lugar, analicemos desde la memoria: cuando la aplicación se inicializa, el CLR (CLR es el Common Language Runtime) es también un entorno de ejecución similar a la máquina virtual Java, que es responsable de la gestión de recursos (asignación de memoria y recogida de basura, etc.) y asegura la separación necesaria entre la aplicación y el sistema operativo subyacente. El CLR tiene dos nombres de traducción diferentes: Common Language Runtime y Common Language Runtime. Asigna un espacio de direcciones a cada proceso en el espacio disponible del proceso, que es el heap gestionado. El montón gestionado se divide en varias regiones, siendo las más importantes el montón de recogida de basura (GC Heap) y el montón de cargadores (Cargador de Cargadores), que se utiliza para almacenar instancias de objetos y es gestionado por el GC. La información más importante que el Loader Heap almacena a través de la tabla MethodTable es información relacionada con los metadatos, como tipos base, campos estáticos, interfaces de implementación y todos los métodos. El Cargador no acepta control de GC, y su ciclo de vida va desde la creación hasta la destrucción. En otras palabras, una vez que una clase está cargada, tanto los métodos estáticos como los no estáticos de esta clase se almacenan en la tabla MethodTab del Load Heap, sin control GC, y todos residen en memoria durante la primera carga.

        ¿Cuál es la diferencia entre un método estático y uno no estático? La diferencia es que al crear un objeto, el método estático solo tiene una copia, mientras que el método no estático copiará una copia de la información sobre esta instancia en el GC Heap para cada nuevo objeto, y al mismo tiempo colocará el nuevo objeto en la pila. La dirección a la que apunta el puntero de pila es la dirección de memoria que acaba de copiarse al GC Heap. Por lo tanto, en términos de velocidad de llamada a métodos, los métodos estáticos son más rápidos porque los métodos no estáticos deben ser instanciados y asignar memoria.

Desde la perspectiva de la historia de la programación, casi todos los métodos de programación estructurada temprana eran métodos estáticos, y la introducción de métodos de instanciación fue cuestión de programación orientada a objetos, por lo que el método de instanciación no resolvía el problema de la eficiencia de ejecución y memoria. Es para hacer que el desarrollo sea más patronado y orientado a objetos.

        A partir del análisis anterior, se puede extraer una conclusión: 1. El método estático y el método no estático son la distinción entre el modo solución. 2. Si la herencia, el polimorfismo o si un método no tiene nada que ver con el objeto de su clase, deberías elegir un método estático, como una clase herramienta.        

2. ¿Cuál es la diferencia entre el modo singleton y el método estático?

        A veces necesitamos mantener una pieza de información en ingeniería, como algunos atributos de configuración que se cargan en tiempo de ejecución, que deben existir durante toda la vida útil de la aplicación y son públicos, por lo que solo se necesita una copia. Por ahora, consideraremos usar un método singleton o estático para mantener estos datos, pero en este momento, estos datos se obtienen de forma orientada a objetos, usaremos un singleton.

        Primero, los métodos estáticos son basados en clases y los singletons son basados en objetos. Si el patrón de resolución es basado en objetos, usa un singleton; de lo contrario, utiliza un enfoque estático. Por ejemplo, necesitas heredar clases, implementar interfaces, retrasar la inicialización, reescribir clases padres, etc., para usar singletons; segundo, los métodos estáticos son orientados a procesos, y los singletons son orientados a objetos. En tercer lugar, las variables de atributos estáticas no serán eliminadas por GC, por lo que los objetos singleton no serán eliminados por GC, y los objetos generados en métodos estáticos se liberarán cuando se ejecute el método estático.




Anterior:Práctica de middleware de mensajería distribuida (por Ni Wei) PDF completo en chino
Próximo:Problema de apagado y encendido automático del portátil Dell Latitude 5501 resuelto
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com