Red de conocimiento informático - Aprendizaje de programación - Situaciones comunes y métodos para evitar el escape de la memoria de golang

Situaciones comunes y métodos para evitar el escape de la memoria de golang

Porque si la memoria de una variable se escapa, su ciclo de vida se desconoce y se asignará en el montón, y la memoria asignada por el montón no se puede liberar automáticamente como la pila, para que el programador tenga las manos libres para concentrarse en el negocio. Implementación, Go implementa el mecanismo de recolección de basura de gc, pero gc afectará el rendimiento del programa, así que intente reducir la operación de gc del programa.

1. El puntero de la variable local devuelto en el método tiene una referencia externa, su ciclo de vida es más largo que el de la pila y la pila se desbordará.

2. Envíe un puntero o un valor con un puntero al canal, porque no hay forma de saber en el momento de la compilación que la rutina aceptará los datos en el canal y el compilador no puede saber cuándo hacerlo. suéltalo.

3. Utilice punteros para almacenar punteros o valores en el chip. Por ejemplo, []*cadena hace que se escape el contenido del fragmento, mientras que su valor de referencia permanece en el montón.

4. Dado que la adición de fragmentos hará que la capacidad supere el límite, los fragmentos se reasignarán a una dirección y el espacio de almacenamiento detrás de los fragmentos se ampliará según los datos del tiempo de ejecución y se asignará en el montón.

5. Los métodos de llamada en el tipo de interfaz. La llamada a métodos en la interfaz se programa dinámicamente y solo se conoce en tiempo de ejecución.

1. La llamada al método de tipo de interfaz en el lenguaje Go es dinámica, por lo que no se puede determinar en la etapa de compilación. El proceso de todas las estructuras de tipo que ingresan a la interfaz implicará la aparición de fugas de memoria. Evite esto al acceder a funciones con interfaz de llamada de alta frecuencia.

2. No utilice ciegamente punteros variables como parámetros. Aunque la copia se reduce, el escape de variables es costoso.

3. Establezca la longitud del fragmento con anticipación para evitar una reasignación frecuente cuando se exceda la capacidad.