Nunca he visto tales declaraciones, ¿existen en el mundo de Java en absoluto?¿Hay algo como malloc/free en java?
Respuesta
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.
new
en lugar de malloc
, recolector de basura en lugar de gratis.
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
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.
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.
+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. –
- 1. ¿Hay algo así como find_if en Java?
- 2. ¿Hay algo así como Codecademy para Java
- 3. ¿Hay algo como .NET's T4 para Java?
- 4. ¿Hay algo como "+ =" en SASS?
- 5. ¿Hay algo como instanceOf (clase <?> c) en Java?
- 6. ¿Hay algo así como un carácter comodín en Java?
- 7. ¿Hay algo así como una clase interna en Java?
- 8. ¿Hay algo como NotImplementedException de .NET en Java?
- 9. ¿Hay algo así como herencia de anotación en java?
- 10. ¿Hay algo así como ZenTest/Autotest para Java y JUnit
- 11. ¿Hay algo así como indicadores en Lua?
- 12. ¿Hay algo como NSDictionary en Android?
- 13. ¿Hay algo como inotify en Windows?
- 14. ¿Hay algo como create_view en ActiveRecord (Rails)?
- 15. ¿Hay algo como JRebel para .NET?
- 16. ¿Hay algo similar a WebClient.DownloadString en Java?
- 17. ¿Hay algo así como un modelo funcional?
- 18. ¿Hay algo así como WMI para Linux?
- 19. ¿Hay algo como rubygems.org para bibliotecas scala
- 20. ¿Hay algo así como `last` for` map`?
- 21. ¿Hay algo así como "global ::" para VB.NET?
- 22. ¿Hay algo así como bpython para Ruby?
- 23. ¿Hay algo así como AutoMapper para Scala?
- 24. ¿Hay algo como jquery para WPF/XAML?
- 25. ¿Hay algo como/proc para las ventanas
- 26. ¿Hay algo así como Incanter para Haskell?
- 27. Algo así como Apache Zookeeper sin Java?
- 28. ¿Hay algo así como Eclipse Perspective en Visual Studio?
- 29. ¿Existe algo así como AJEDREZ para Java?
- 30. ¿Hay algo en PHP como intermediario en Ruby?
¿No puedo acceder al espacio de memoria directamente? – java
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
Hacer referencia al objeto que desea liberar a nulo le dice a la memoria del recolector de basura si es libre de recopilar. – Amit