De alto rendimiento -GC2

Con las preguntas que pensar! Hola a todos

La última vez que hablamos sobre algunos de los conceptos básicos de GC, gracias al hermano mayor me mostró un comentario.

Los parámetros de configuración

  Método para la configuración del recolector de basura no es una gran cantidad, se recomienda que no se mueva libremente, configurar y ajustar el recolector de basura, en gran medida por la configuración del hardware, el comportamiento, los recursos disponibles y las decisiones del programa. Un puñado de varios parámetros también se utiliza para controlar el comportamiento de un nivel muy alto, dependiendo del tipo de programa,

el modo de estación de trabajo o modo de servidor?

  el modo de estación de recolección de basura por defecto empleada. el modo de estación de trabajo, todo el GC carrera para prioridad de subprocesos de recolección de basura de disparo (praɪɔːrəti Prioridad) son los mismos. Para un solo procesador de la computadora, un modelo de estación de trabajo es la única opción, configurar otros parámetros no son válidos

  En el modo de servidor, GC creará su propio hilo dedicado para cada procesador lógico o núcleo de procesador. Permanecerá pendiente ante los hilos de la más alta prioridad, pero la necesidad de recolección de basura. Tras la finalización de la recolección de basura, ya que estos hilos en hibernación de nuevo.

  Además, CLR creará su propia memoria de pila del vientre para cada procesador, cada procesador contiene un pequeño montón pila objetos y un LOH. Desde el punto de vista de aplicación, sólo hay un montón de memoria lógica. El código no está claro qué objeto pertenece a una referencia de objeto montón sería un cruce entre todo el montón.

  montón de memoria traerá múltiples beneficios a escritos.

  1: la recogida de basura se puede realizar en paralelo, cada hilo es responsable para el reciclaje de una memoria de pila de recogida de basura, que permite que la basura tasa de recogida de manera significativa el modo de estación de trabajo Kuaiyu

  2: En algunos casos, la memoria de velocidad asignación será más rápido, particularmente para LOH, ya que se asignará al mismo tiempo en todas las partes del montón.

la colocación del concreto

  

<gcServer enabled = " verdad " >

En el nodo de tiempo de ejecución.

Después de todo, al final, con lo que es bueno? Si la aplicación está diseñada para correr en una máquina multiprocesador que esté listo, a continuación, seleccione el modo de servidor. Así que en la mayoría de los casos, puede hacer que la recolección de basura lleva tiempo a un mínimo.

Si es necesario realizar múltiples cuota conseguido un modo de servidor host, la recolección de basura crea hilo de alta prioridad múltiple. Si hay varias aplicaciones están configuradas de manera que el programador de subprocesos afectará negativamente entre sí, si está seguro de que desea múltiples aplicaciones que utilizan la misma colección modo de basura servidor host, así como una práctica, que es hacer la existencia de una relación de competencia las aplicaciones se concentran en unos pocos el procesador en marcha designado, por lo CLR creará su propio montón de memoria para estos procesadores.

la recolección de basura de fondo

En primer lugar BackgroundGC sólo afectan el comportamiento de la pila de memoria recolección de basura segunda generación, la generación y la generación 0 1 recolección de basura recogida de basura todavía va a utilizar la recepción, que es un hilo bloqueará todas las aplicaciones. la recolección de basura de fondo se realiza mediante una segunda generación dedicada de hilos de recolección de basura,

Si se cierra, pero no se recomienda

<gcConcurrent enabled = " false " />

 

el modo de baja latencia

Si asegurar un alto rendimiento durante un período de tiempo, no se puede realizar GC notificación de cobro sobrecarga significativa de basura generación 2. Por favor GCSettings.LatencyModel acuerdo con otros parámetros para asignar uno de los siguientes valores de la propiedad.

  LowLatency --- modo sólo está disponible con el GC estación de trabajo, que prohíbe la recolección de basura de segunda generación.

  SustainedLowLatency-- aplicar GC estación de trabajo y modelo de servidor, la segunda generación está totalmente prohibida la recolección de basura, pero permite la recogida de basura fondo de segunda generación, debe activar la recogida de basura de fondo.

Debido a que no va a ser desfragmentado, por lo que estos dos parámetros se incrementarán significativamente el tamaño del montón administrado, si su proceso requiere una gran cantidad de memoria, se debe evitar el uso de este modo de retardo. Inmediatamente antes de entrar en el modo de baja latencia, lo mejor es hacer cumplir una recolección completa, que puede ser completado llamando GC.Collect, después de salir del modo de baja latencia contemporánea, de inmediato hacer una recolección completa,

Cuando las condiciones siguientes se cumplen con el fin de modo abierto de baja latencia

  • duración total de recolección de basura es demasiado largo, la operación normal del programa es absolutamente inaceptable
  • huella de la memoria de la aplicación es mucho menor que el número de memoria disponible.
  • Ya sea que se cierra durante el modo de baja latencia, reinicie el programa, o durante una recolección completa se realiza de forma manual, la aplicación puede seguir siendo un estado viable.

¿Cómo reducir la cantidad de memoria asignada

  Para reducir la cantidad de memoria asignada, una revisión crítica no se opuso.

  • Realmente necesita este objeto?
  • ¿Hay algunos miembros del objeto puede ser abandonada
  • Array puede reducir el número?
  • Los tipos primitivos (primitivo) si o no para reducir el volumen (tales como Int64 sustituye Int32)?
  • Son algunos de los objetos rara vez se utilizan, por lo que sólo cuando sea necesario la asignación?
  • clase de prioridad puede convertirse en un "estructural" (struct)? Esto se almacena en la pila, o convertirse en un miembro de otros objetos
  • Asignar una gran cantidad de memoria, aunque sólo una pequeña parte?
  • Ya sea para obtener los datos de otras maneras?

La norma primaria

  De hecho, ya se sabe, por el recolector de basura, hay un alto rendimiento básico de reglas de codificación. De hecho, el recolector de basura es, obviamente, diseñado de acuerdo con esta regla.

0 objetos sólo la memoria de recolección de basura montón

  En resumen, la duración de los objetos lo más corto posible, por lo que el recolector de basura no tener que tocarlos, o puede no fugaz, actualizar tan pronto como sea posible para permitir que el objeto 2 generación montón y siempre permanecer donde Nunca se recuperó. Esto significa que siempre se deben guardar supervivencia a largo plazo de una referencia de objeto montón, por lo general también significa que los objetos deben ser reutilizable agrupado (Pooling), especialmente Loh todos los objetos.

Acortar el tiempo de vida del objeto

  • Cuanto menor sea el objeto alcance , tanto más sin posibilidad de ascender a la siguiente generación, cuando la recolección de basura.
  • En general, el objeto no debe ser para asignar memoria antes de su uso . A menos que crear un objeto demasiado generales. Necesidad de crear de antemano que no van a afectar a la ejecución de otras operaciones,
  • También en el uso de objetos, asegúrese de que el objeto está fuera de ámbito tan pronto como sea posible . Para las variables locales, puede ser después del último tópico, incluso antes de que el método se puede terminar.
  • Si el código para realizar múltiples operaciones en un objeto, tratar de acortar el intervalo de la primera y la última utilizada , por lo que el objeto se puede recuperar GC tan pronto como sea posible,
  • Si un objeto es una referencia a un largo supervivientes miembros del objeto, a veces es necesario poner esto se refiere a un conjunto de visualización a nula , esto puede aumentar ligeramente la complejidad del código un poco, porque se necesita más que listo para comprobar valor nulo,

La reducción de la profundidad del árbol de objetos

  Como todos sabemos, la GC se referirá al objeto a lo largo del recorrido, la GC en modo servidor, habrá múltiples hilos simultáneamente atravesados ​​una vez, que debe de tomar ventaja de esta concurrencia tanto como sea posible, pero si hay un hilo en un tiempo muy largo la cadena de objetos anidados, todo el proceso de recogida de basura tiene que esperar hasta el final de la rosca después de la finalización de todo el trabajo.

Decrementar la referencia entre objetos

Si el objeto hace referencia a una gran cantidad de otros objetos, el recolector de basura cuando se atraviesa tomará más tiempo. Si la recolección de basura referencias de tiempo largos temporales, a menudo significa grande, hay una referencia a la relación entre el objeto complejo, el objeto es difícil determinar si todas las relaciones que se hace referencia, existe el riesgo de que es difícil predecir lo que el tiempo de vida de los objetos, lo que reduce la referencia al objeto complejidad, no sólo es beneficioso para mejorar la calidad del código, sino que también permite a los problemas de código de depuración y corrección de rendimiento más fácil, también hay que prestar atención a los objetos entre diferentes generaciones de referencias memoria de la pila puede provocar un funcionamiento ineficiente del recolector de basura, en particular se hace referencia nuevo objeto de la antigua objeto, tal como la segunda generación del objeto memoria de pila contiene una referencia a un objeto de la generación de 0, de modo que cada generación 0 recolección de basura, siempre hay una parte de la segunda generación de montón de memoria los objetos tienen que ser atravesado. Con el fin de confirmar si todavía mantienen la generación montón 0 objeto.

 

Supongo que te gusta

Origin www.cnblogs.com/ccaa/p/12571485.html
Recomendado
Clasificación