2010-12-10 26 views

Respuesta

13

La versión de Java de malloc es new - crea un nuevo objeto de un tipo especificado.

En Java, la memoria se administra para usted, por lo que no puede explícitamente delete o free un objeto.

+0

¿No puedo acceder al espacio de memoria directamente? – java

+0

No, no puede obtener acceso a la dirección de puntero/memoria subyacente de un objeto Java a través de cualquier medio sensato. C# le permite hacer esto usando la palabra clave 'inseguro': http://msdn.microsoft.com/en-us/library/chfa2zb8(v=VS.100).aspx Tenga en cuenta que esto es muy, muy raramente necesario. – ClosureCowboy

+0

Hacer referencia al objeto que desea liberar a nulo le dice a la memoria del recolector de basura si es libre de recopilar. – Amit

0

new en lugar de malloc, recolector de basura en lugar de gratis.

4

Java tiene un recolector de basura. Es por eso que nunca se ve tales declaraciones en su código (que es bueno si usted me pregunta)

En informática, la basura recogida (GC) es una forma de gestión automática memoria. Es un caso especial de administración de recursos , en el cual el recurso limitado que se está administrando es memoria. El recolector de elementos no utilizados, o simplemente el recopilador , intenta reclamar la basura , o la memoria ocupada por los objetos que ya no se usan en el programa . La recolección de basura fue inventada por John McCarthy alrededor de 1959 para resolver problemas en Lisp. Existen

3

No hay equivalentes directos en Java:

C malloc crea un nodo montón sin tipo y devuelve un puntero a ella que le permite acceder a la memoria lo que le apetezca.

Java no tiene el concepto de un objeto sin tipo, y no le permite acceder directamente a la memoria. Lo más cercano que puede obtener en Java al malloc sería new byte[size], pero eso le devolverá un objeto fuertemente tipado que SÓLO puede utilizar como una matriz de bytes.

C free libera un nodo de montón.

Java no permite la liberación explícita de objetos. La desasignación de objetos en Java está totalmente en manos del recolector de basura. En algunos casos, puede influir en el comportamiento del GC; p.ej. asignando null a una variable de referencia y llamando al System.gc(). Sin embargo, esto no obliga al objeto a ser desasignado ... y es una forma muy costosa de proceder.

3

Si no está bien (tm), supongo que puede obtener acceso a la memoria sin procesar a través de la interfaz JNI. Aquí es donde puede llamar a los programas C desde los Programas Java. Por supuesto, debe ejecutar en un entorno en el que su programa tenga los privilegios para hacerlo (un navegador no lo permitirá a menos que sea suicida), pero puede acceder a los objetos a través de los punteros C de esa manera.

Me pregunto de dónde viene la pregunta original. En un momento, hace mucho tiempo, era totalmente escéptico de la idea de que la administración de la memoria al estilo C y los indicadores del estilo C no fueran necesarios, pero en este momento soy un verdadero creyente.

+0

+1 Para señalar JNI: no es que esto permita automáticamente el acceso a la administración de objetos, pero al usar JNI se puede tratar con recursos/memoria "no administrados" si así lo desean. –

Cuestiones relacionadas