GC optimization: declarando el objeto como campo opuesto a declararlo localmente
Estoy intentando actualmente evitar las llamadas de GC_CONCURRENT, así que estoy funcionando con mi lazo principal. He notado que a menudo crear un objeto complejo para hacer cálculos.
Así que mi pregunta es declarar que el objeto como un campo de la clase opuesta a declararlo en los métodos que lo utilizan ayuda a la actuación?
- Problemas al utilizar unirest en Android Studio
- ¿Las aplicaciones de Android son aplicaciones Java reales?
- Cómo leer la base de datos de otra aplicación
- Java.util.concurrent.TimeoutException android.view.ThreadedRenderer.finalize () tiempo de espera transcurridos 10 segundos
- ¿Dónde debo declarar mis variables?
O porque mi inglés probablemente te ha herido cerebro, aquí está el ejemplo de código como campo
class myclass{ private MyObject myObject; ... public void myLoopedMethod(...){ myObject = new MyObject(...); myObject.dostuff; }
Ejemplo en el método
class myclass{ ... public void myLoopedMethod(...){ MyObject myObject = new MyObject(...); myObject.dostuff; }
El alcance correcto sería el método, pero mi duda es que al convertirlo en un campo, la memoria siempre se libera y se asigna en el mismo lugar. ¿Es esto cierto y ayuda a evitar las llamadas GC?
También, probablemente debería hacer algo como esto, pero estoy interesado si la lógica anterior tiene sentido.
class myclass{ private MyObject myObject; ... public void myMethod(...){ myObject.setNewValues(...); myObject.dostuff; } }
- Ajustar EditText a una sola línea hace que pierda su foco después de presionar enter
- ¿Cómo puedo crear una lista de objetos en Java
- Android: SortedList con duplicados
- ¿Existe un equivalente de ucwords en java?
- Combine Realm.io y Firebase
- Fecha sin par: "Fri Oct 10 23:11:07 IST 2014" (al compensar 20)
- Obtener la latitud y la longitud de una posición de clic en un mapas de forja 0.5.1 MapView
- ¿Cómo validar una cadena usando java regex?
Pero mi duda es que al convertirlo en un campo, la memoria siempre se libera y se asigna en el mismo lugar. ¿Es esto cierto y ayuda a evitar las llamadas GC?
No hay garantía de que la memoria asignada en el mismo lugar. Es detalle de implementación.
En su caso de ejemplo, si la variable de instancia, todos los objetos referenciados por esta variable de instancia serán elegibles para GC, excepto el último objeto que todavía tiene una referencia de la variable de instancia (el último será elegible para GC cuando no tenga referencias accesibles).
En el caso de definir el método interno, todos los objetos referenciados por esta referencia serán elegibles para el GC tan pronto como se realice el bucle.
Por lo tanto, es mejor ir con la definición de método interior a menos que necesite referencia al objeto identificado en el bucle.
Llegando a la pregunta evitando GC llamadas, creo que ambos enfoques tendrán casi la misma cantidad de GC actividad. A menos que tenga problema real con la memoria que sugiero que no se preocupe por la asignación de memoria y GC, VMs son lo suficientemente inteligentes como para cuidar de esas cosas.
-
Sí, si la creación del objeto está dentro del método a menudo llamado, resultará en más trabajo para el recolector de basura.
-
Siempre mida en lugar de especular … Las ventajas teóricas podrían ser insignificantes.
- ¿Por qué obtener NoSuchFiledException al usar otro proyecto android como biblioteca?
- Averigüe cuál es el uso que autoriza un SmartPhone