2010-05-28 13 views
10

Me pregunto cuáles son las diferencias o si es el mismo en ambos.¿Cómo se hace la recolección de basura en Java y cómo se compara con .net?

+1

¿La gente que vota para cerrar esto como "no es una pregunta real" se preocupa por explicar sus motivos? No es que el tipo tenga 100 representantes. – Josh

+0

La parte 1 ("cómo se hace el gc en Java") ha sido cubierta por docenas de preguntas sobre SO. –

+0

@Andreas para citar a Dylan "Si hay un pensamiento original, podría usar uno en este momento". A esta altura, todas las preguntas se han formulado sobre SO. Pero si la gente quiere cerrarlo como un duplicado, al menos elija esa opción del menú porque da las referencias de OP a las otras publicaciones. – Josh

Respuesta

1

Encontré este link de mi otro question on SO que responde un poco acerca de las diferencias de recolección de basura en Java y .NET/C# . Para otros que están en busca de este tipo de información, aquí lo es-

En los objetos de Java se crean en el dinámico utilizando la nueva palabra clave. La mayoría de las clases en C# se crean en el montón utilizando la nueva palabra clave. También al igual que la JVM gestiona la destrucción de objetos también lo hace el CLR a través de un Mark y recolección de basura compacto algoritmo

NOTA: C# también es compatible con pila de base clases, llamados tipos de valores, que son discuten más abajo.

+0

http://www.brpreiss.com//books/opus5/html/page428.html tiene buena información y Marc y algoritmo compacto. –

1

Supongo que no existe una diferencia conceptual. Como los modelos de memoria son levemente diferentes (for example volative difference), la realización puede variar.

+1

Quizás no haya una diferencia conceptual en un nivel alto (es decir, la recolección de basura en ambas plataformas tiene la misma función: limpiar objetos que ya no se referencian), pero hay varios algoritmos diferentes para hacerlo, por lo que hay diferencias importantes en implementación, incluso entre diferentes versiones de la JVM de Sun, por ejemplo. – Jesper

+0

En mi humilde opinión, si necesita preocuparse acerca de cómo funciona GC en el 99% significa que no necesita GC en absoluto. –

2

Esta pregunta no responde.

En primer lugar, ninguna de las especificaciones relevantes dirá nada sobre cómo Java o .net debería implementar la recolección de basura. Entonces, literalmente, no hay ninguna "manera en que GC se haga" en Java o en .net. En segundo lugar, los detalles de cómo se implementa GC difieren entre los distintos proveedores para Java y .net respectivamente, y para cualquier proveedor el GC puede cambiar con cada plataforma, cada versión principal, versión menor e incluso cada versión de parche. Además de eso, algunas implementaciones de Java le permiten elegir entre diferentes recolectores de basura usando opciones de línea de comando.

Finalmente, realmente no importa cómo se implementa el GC en una implementación de Java o .NET provisto que se puede hacer funcionar según lo requerido por la aplicación. Y para Java, la respuesta es que puede para la mayoría de los tipos de aplicaciones. (Las excepciones son típicamente sistemas/aplicaciones con requisitos duros en tiempo real o restricciones de memoria muy ajustadas.)

+0

Pero para obtener más información básica y teoría básica: http://stackoverflow.com/questions/2910224/java-garbage-collection/2922042#2922042 –

+0

@Andreas_D: hay descripciones más detalladas del GC de Java que el referido. Y las dos páginas mencionadas son antiguas. Los GC de Java definitivamente han cambiado significativamente desde 1.4.1. –

Cuestiones relacionadas