Los recolectores de basura (GC) automatizan la administración de memoria liberando objetos que ya no están en uso. Existen varios tipos de GC como el generacional y el de escritorio/servidor. Los GC funcionan encontrando y liberando objetos no utilizados en tres pasos: marcando objetos muertos, compactando memoria y moviendo objetos entre generaciones.
La máquina virtual y la plataforma Java se está convirtiendo en el pilar de multiples lenguajes: Java, Scala, Groovy, Clojure, Ceylon, JRuby... pero muchos desarrolladores no conocen como funciona por dentro tanto el sistema de memoria como el recolector de basura. Este conocimiento es fundamental y puede marcar la diferencia entre dos programadores.
Esta charla consisitirá en una introducción a la gestión de memoria de la JVM (Hotspot), cómo trabaja el recolector de basura o algunas opciones para poder configurar las opciones por defecto.
Si alguna vez te has cruzado con un OutOfMemoryError y no entendistes la línea que copiastes de StackOverflow: esta es tu charla.
PostgreSQL 9.2 ofrece mejoras sustanciales como soporte para hasta 64 núcleos, índices solo de lectura, replicación en cascada, nuevos tipos de datos como rangos y JSON, y las extensiones PL/V8 y PL/Coffee para programar funciones en JavaScript y CoffeeScript. También incluye la herramienta pg_stat_statements para monitorear el rendimiento de consultas.
El negocio de los videojuegos ha cambiado, ya no se requiere invertir millones de dolares en produccón para tener un negocio de altas rentabilidades. Se exploraran brevemente las nuevas tendencias del mercado.
Este documento lista diferentes tecnologías y frameworks para el desarrollo web y móvil, incluyendo plataformas como .NET, Java, C#, Node.js y frameworks como AngularJS, React, ASP.NET. También menciona plataformas móviles como Android, iOS y herramientas de desarrollo como Visual Studio, Eclipse, Xcode. Finalmente, proporciona los detalles de contacto de Juan Carlos Ruiz.
Cómo diseñar apps multiplataforma, cuales son los errores más frecuentes y los mitos entorno a elaborar un buen producto.
Cómo arquitecturar, programar y diseñar mejor.
La Unión Europea ha acordado un paquete de sanciones contra Rusia por su invasión de Ucrania. Las sanciones incluyen restricciones a las importaciones de productos rusos clave como el acero y la madera, así como medidas contra bancos y funcionarios rusos. Los líderes de la UE esperan que las sanciones aumenten la presión económica sobre Rusia y la disuadan de continuar su agresión contra Ucrania.
This document contains information about Juan Carlos Ruiz Pacheco, a Technical Evangelist at Microsoft Corporation who focuses on Windows Phone. It includes his Twitter and Foursquare handles, mentions an #AppsDay event and checking in at Microsoft Colombia. It also lists several URLs related to app design tools for Windows Phone like Sketch templates, modern icons, and color schemes. It closes with Juan Carlos' contact details on Twitter and Facebook.
La máquina virtual y la plataforma Java se está convirtiendo en el pilar de multiples lenguajes: Java, Scala, Groovy, Clojure, Ceylon, JRuby... pero muchos desarrolladores no conocen como funciona por dentro tanto el sistema de memoria como el recolector de basura. Este conocimiento es fundamental y puede marcar la diferencia entre dos programadores.
Esta charla consisitirá en una introducción a la gestión de memoria de la JVM (Hotspot), cómo trabaja el recolector de basura o algunas opciones para poder configurar las opciones por defecto.
Si alguna vez te has cruzado con un OutOfMemoryError y no entendistes la línea que copiastes de StackOverflow: esta es tu charla.
PostgreSQL 9.2 ofrece mejoras sustanciales como soporte para hasta 64 núcleos, índices solo de lectura, replicación en cascada, nuevos tipos de datos como rangos y JSON, y las extensiones PL/V8 y PL/Coffee para programar funciones en JavaScript y CoffeeScript. También incluye la herramienta pg_stat_statements para monitorear el rendimiento de consultas.
El negocio de los videojuegos ha cambiado, ya no se requiere invertir millones de dolares en produccón para tener un negocio de altas rentabilidades. Se exploraran brevemente las nuevas tendencias del mercado.
Este documento lista diferentes tecnologías y frameworks para el desarrollo web y móvil, incluyendo plataformas como .NET, Java, C#, Node.js y frameworks como AngularJS, React, ASP.NET. También menciona plataformas móviles como Android, iOS y herramientas de desarrollo como Visual Studio, Eclipse, Xcode. Finalmente, proporciona los detalles de contacto de Juan Carlos Ruiz.
Cómo diseñar apps multiplataforma, cuales son los errores más frecuentes y los mitos entorno a elaborar un buen producto.
Cómo arquitecturar, programar y diseñar mejor.
La Unión Europea ha acordado un paquete de sanciones contra Rusia por su invasión de Ucrania. Las sanciones incluyen restricciones a las importaciones de productos rusos clave como el acero y la madera, así como medidas contra bancos y funcionarios rusos. Los líderes de la UE esperan que las sanciones aumenten la presión económica sobre Rusia y la disuadan de continuar su agresión contra Ucrania.
This document contains information about Juan Carlos Ruiz Pacheco, a Technical Evangelist at Microsoft Corporation who focuses on Windows Phone. It includes his Twitter and Foursquare handles, mentions an #AppsDay event and checking in at Microsoft Colombia. It also lists several URLs related to app design tools for Windows Phone like Sketch templates, modern icons, and color schemes. It closes with Juan Carlos' contact details on Twitter and Facebook.
El documento describe los desafíos y lecciones aprendidas al escalar un sistema de subastas de anuncios digitales hasta procesar 10.000 peticiones por segundo. Se realizaron varias iteraciones para optimizar el rendimiento, pasando de Storm a Dropwizard y mejorando el almacenamiento y monitoreo. A pesar de los esfuerzos, la algoritmia no resolvió completamente el problema de escalabilidad. Se enfatiza la importancia de un entorno de trabajo limpio y el equilibrio entre programar y diagnosticar bugs.
Este documento presenta JRuby on Rails como una alternativa a J2EE para el desarrollo de aplicaciones web. Explica que JRuby on Rails combina Ruby on Rails, un popular framework para desarrollo web ágil, con JRuby, una implementación de Ruby que ejecuta código Ruby en la máquina virtual Java, lo que permite aprovechar las ventajas de Ruby on Rails y la capa estable de Java/J2EE. Luego, el documento muestra un ejemplo de cómo se puede crear rápidamente una aplicación web simple usando JRuby on Rails.
Este documento describe cómo JRuby on Rails puede utilizarse para desarrollar aplicaciones web de manera ágil aprovechando las ventajas de Ruby y Rails, al tiempo que se ejecutan en la capa estable de Java. Se presenta un caso de éxito donde una aplicación se desarrolló en solo 3 días usando JRuby on Rails satisfaciendo los requisitos del cliente de correr sobre infraestructura Java. Finalmente, se concluye que aprovechar lenguajes dinámicos como capa superior junto a Java permite construir aplicaciones poliglotas.
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011Jano González
Este documento habla sobre JRuby, una implementación de Ruby que corre sobre la máquina virtual de Java. JRuby combina las ventajas de Ruby como lenguaje dinámico y orientado a objetos con las ventajas de Java como portabilidad, escalabilidad y soporte empresarial. El autor argumenta que JRuby puede usarse para simplificar aplicaciones Java complejas y aprovechar librerías de Java desde Ruby.
Aplicaciones web altamente escalables con RedisAlberto Gimeno
Este documento resume las características y usos de Redis, una base de datos clave-valor muy rápida que soporta datos estructurados. Redis puede escalar horizontalmente mediante particionamiento de datos en varios nodos y replicación de lecturas. Se recomienda usar Redis como caché, base de datos auxiliar o principal cuando se requiera alta velocidad de consulta. Redis ofrece tipos de datos como hashes, listas y conjuntos que facilitan el modelado y consulta de datos complejos de forma eficiente.
Este documento trata sobre la gestión de memoria en sistemas operativos. Explica conceptos básicos como la multiprogramación con particiones fijas y variables, y los modelos de multiprogramación. Luego introduce el intercambio (swapping) entre memoria y disco, describiendo problemas como la fragmentación y soluciones como la compactación. Finalmente, presenta la memoria virtual, explicando paginación y segmentación, y elementos como las tablas de páginas y su implementación multinivel.
Este documento compara los tiempos de ejecución de código en Python, C y PyPy para diferentes tipos de cálculos numéricos y operaciones de procesamiento de texto. Los autores realizaron experimentos multiplicando números, matrices y tokens de texto de Shakespeare para medir el rendimiento en cada lenguaje. Encontraron que C es más rápido que Python, especialmente para cálculos intensivos donde el procesador puede optimizarse. Sin embargo, Python puede ser tan rápido como C si se optimiza el código para minimizar el uso de memoria dinámica. PyPy generalmente
Este documento presenta una introducción al concepto de Big Data, comenzando con las unidades básicas de almacenamiento como el bit y byte. Explica las tecnologías clave como MapReduce, bases de datos NoSQL, MongoDB y BigQuery. Proporciona ejemplos prácticos de cómo funcionan estas tecnologías almacenando y recuperando datos, y recomienda recursos para probar estas herramientas.
Big Data no es una moda ni algo que esté por venir. Gran parte de las organizaciones ya cuentan con bases de datos tan grandes que requieren usar herramientas especiales. Ésta presentación nos ayuda a dar el primer paso, a conocer que en realidad qué es y como funciona, así como a adentrarnos en este maravilloso mundo de los datos al por mayor.
La presentación resume los servicios de computación en la nube privada de OpenNebula en la Facultad de Informática de Barcelona. OpenNebula se implementó para proporcionar servidores virtuales las 24 horas accesibles desde Internet para que los estudiantes completen sus proyectos. Inicialmente hubo desafíos, pero el servicio creció para satisfacer la demanda de los estudiantes. Ahora, los retos son integrar con otras nubes y mejorar las plantillas.
El documento presenta una introducción al curso de desarrollo de aplicaciones móviles en JavaScript. Explica la metodología del curso, que combina explicaciones, laboratorios y ejercicios prácticos. Además, incluye el índice de contenidos a cubrir, como conceptos básicos y avanzados de programación en JavaScript, el uso de JavaScript en navegadores web, DOM, eventos, AJAX y frameworks.
Aprende acerca de donde salen los serverless, que son contenedores, azure functions y más.
Porqué es importante saber de Microservicios?
Donde puedo montarlos y que tienen que ver con Azure functions?
Que son los bots, Cómo están cambiando el mundo y Cómo programarlos
Speaker: Juan Carlos Ruiz [@JuanKRuiz] (Program Manager Evangelist Latam RD & MVP Communities)
Correr .net en Linux u OSX ?
Administrar Azure desde la consola de Linux?
Ejecutar powershell en Linux?
Y si ejecutamos programas de linux en Windows? GCC, Redis, Ruby on Rails?
Todo se puede ;)
El documento habla sobre las quejas más comunes que reciben los desarrolladores de aplicaciones, incluyendo gente que quiere aplicaciones gratis sin publicidad o periodos de prueba, gente que no sabe programar pero quiere aplicaciones personalizadas, y gente que no está dispuesta a pagar por aplicaciones. El documento también incluye la información de contacto de Juan Carlos Ruiz.
The document lists and provides links to various tools, frameworks and libraries for developing Windows Phone applications. These include UI components, augmented reality, physics engines, game engines, cloud services, cross-platform frameworks, and developer tools for imaging, barcodes, HTML parsing and more. The document aims to be a comprehensive reference guide for Windows Phone development.
Contenu connexe
Similaire à Hangout: Garbage Collectors: Qué son, Cómo funcionan y Cuáles existen
El documento describe los desafíos y lecciones aprendidas al escalar un sistema de subastas de anuncios digitales hasta procesar 10.000 peticiones por segundo. Se realizaron varias iteraciones para optimizar el rendimiento, pasando de Storm a Dropwizard y mejorando el almacenamiento y monitoreo. A pesar de los esfuerzos, la algoritmia no resolvió completamente el problema de escalabilidad. Se enfatiza la importancia de un entorno de trabajo limpio y el equilibrio entre programar y diagnosticar bugs.
Este documento presenta JRuby on Rails como una alternativa a J2EE para el desarrollo de aplicaciones web. Explica que JRuby on Rails combina Ruby on Rails, un popular framework para desarrollo web ágil, con JRuby, una implementación de Ruby que ejecuta código Ruby en la máquina virtual Java, lo que permite aprovechar las ventajas de Ruby on Rails y la capa estable de Java/J2EE. Luego, el documento muestra un ejemplo de cómo se puede crear rápidamente una aplicación web simple usando JRuby on Rails.
Este documento describe cómo JRuby on Rails puede utilizarse para desarrollar aplicaciones web de manera ágil aprovechando las ventajas de Ruby y Rails, al tiempo que se ejecutan en la capa estable de Java. Se presenta un caso de éxito donde una aplicación se desarrolló en solo 3 días usando JRuby on Rails satisfaciendo los requisitos del cliente de correr sobre infraestructura Java. Finalmente, se concluye que aprovechar lenguajes dinámicos como capa superior junto a Java permite construir aplicaciones poliglotas.
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011Jano González
Este documento habla sobre JRuby, una implementación de Ruby que corre sobre la máquina virtual de Java. JRuby combina las ventajas de Ruby como lenguaje dinámico y orientado a objetos con las ventajas de Java como portabilidad, escalabilidad y soporte empresarial. El autor argumenta que JRuby puede usarse para simplificar aplicaciones Java complejas y aprovechar librerías de Java desde Ruby.
Aplicaciones web altamente escalables con RedisAlberto Gimeno
Este documento resume las características y usos de Redis, una base de datos clave-valor muy rápida que soporta datos estructurados. Redis puede escalar horizontalmente mediante particionamiento de datos en varios nodos y replicación de lecturas. Se recomienda usar Redis como caché, base de datos auxiliar o principal cuando se requiera alta velocidad de consulta. Redis ofrece tipos de datos como hashes, listas y conjuntos que facilitan el modelado y consulta de datos complejos de forma eficiente.
Este documento trata sobre la gestión de memoria en sistemas operativos. Explica conceptos básicos como la multiprogramación con particiones fijas y variables, y los modelos de multiprogramación. Luego introduce el intercambio (swapping) entre memoria y disco, describiendo problemas como la fragmentación y soluciones como la compactación. Finalmente, presenta la memoria virtual, explicando paginación y segmentación, y elementos como las tablas de páginas y su implementación multinivel.
Este documento compara los tiempos de ejecución de código en Python, C y PyPy para diferentes tipos de cálculos numéricos y operaciones de procesamiento de texto. Los autores realizaron experimentos multiplicando números, matrices y tokens de texto de Shakespeare para medir el rendimiento en cada lenguaje. Encontraron que C es más rápido que Python, especialmente para cálculos intensivos donde el procesador puede optimizarse. Sin embargo, Python puede ser tan rápido como C si se optimiza el código para minimizar el uso de memoria dinámica. PyPy generalmente
Este documento presenta una introducción al concepto de Big Data, comenzando con las unidades básicas de almacenamiento como el bit y byte. Explica las tecnologías clave como MapReduce, bases de datos NoSQL, MongoDB y BigQuery. Proporciona ejemplos prácticos de cómo funcionan estas tecnologías almacenando y recuperando datos, y recomienda recursos para probar estas herramientas.
Big Data no es una moda ni algo que esté por venir. Gran parte de las organizaciones ya cuentan con bases de datos tan grandes que requieren usar herramientas especiales. Ésta presentación nos ayuda a dar el primer paso, a conocer que en realidad qué es y como funciona, así como a adentrarnos en este maravilloso mundo de los datos al por mayor.
La presentación resume los servicios de computación en la nube privada de OpenNebula en la Facultad de Informática de Barcelona. OpenNebula se implementó para proporcionar servidores virtuales las 24 horas accesibles desde Internet para que los estudiantes completen sus proyectos. Inicialmente hubo desafíos, pero el servicio creció para satisfacer la demanda de los estudiantes. Ahora, los retos son integrar con otras nubes y mejorar las plantillas.
El documento presenta una introducción al curso de desarrollo de aplicaciones móviles en JavaScript. Explica la metodología del curso, que combina explicaciones, laboratorios y ejercicios prácticos. Además, incluye el índice de contenidos a cubrir, como conceptos básicos y avanzados de programación en JavaScript, el uso de JavaScript en navegadores web, DOM, eventos, AJAX y frameworks.
Similaire à Hangout: Garbage Collectors: Qué son, Cómo funcionan y Cuáles existen (16)
Aprende acerca de donde salen los serverless, que son contenedores, azure functions y más.
Porqué es importante saber de Microservicios?
Donde puedo montarlos y que tienen que ver con Azure functions?
Que son los bots, Cómo están cambiando el mundo y Cómo programarlos
Speaker: Juan Carlos Ruiz [@JuanKRuiz] (Program Manager Evangelist Latam RD & MVP Communities)
Correr .net en Linux u OSX ?
Administrar Azure desde la consola de Linux?
Ejecutar powershell en Linux?
Y si ejecutamos programas de linux en Windows? GCC, Redis, Ruby on Rails?
Todo se puede ;)
El documento habla sobre las quejas más comunes que reciben los desarrolladores de aplicaciones, incluyendo gente que quiere aplicaciones gratis sin publicidad o periodos de prueba, gente que no sabe programar pero quiere aplicaciones personalizadas, y gente que no está dispuesta a pagar por aplicaciones. El documento también incluye la información de contacto de Juan Carlos Ruiz.
The document lists and provides links to various tools, frameworks and libraries for developing Windows Phone applications. These include UI components, augmented reality, physics engines, game engines, cloud services, cross-platform frameworks, and developer tools for imaging, barcodes, HTML parsing and more. The document aims to be a comprehensive reference guide for Windows Phone development.
The document discusses Windows Phone apps and design. It was created by Juan Carlos Ruiz Pacheco, a Technical Evangelist at Microsoft Corporation. It mentions checking in on Foursquare and Twitter and includes links to resources like Sketch templates, modern icons, Metro design tools, color schemes, and web fonts that can be used for Windows Phone app design.
This document discusses Windows Phone 8 and its features. It mentions check-ins on Twitter and Foursquare and an AppsDay event in Colombia. It lists the screen resolutions of WP8 phones as 1280x768, 1280x720, and 800x480. It notes the phones have NFC and memory slots. The document also mentions the phones have an always on display that turns off on the lock screen and can connect to known networks. It lists a Kids Korner app and provides the Twitter and Facebook accounts of Juan Carlos Ruiz Pacheco, a Microsoft technical evangelist.
La Unión Europea ha propuesto un nuevo paquete de sanciones contra Rusia que incluye un embargo al petróleo. El embargo prohibiría las importaciones de petróleo ruso por vía marítima, pero permitiría el tránsito a través de oleoductos durante unos meses más para algunos países muy dependientes del petróleo ruso. El embargo se aplicaría gradualmente durante seis meses para Hungría y Eslovaquia y durante ocho meses para la República Checa debido a su fuerte dependencia del crudo ruso.
El documento habla sobre cómo los emprendedores pueden hacer realidad sus ideas de aplicaciones y servicios en la nube a pesar de la competencia de las grandes empresas de software. Sugiere que los emprendedores se enfoquen en crear productos innovadores que resuelvan problemas reales de los usuarios en lugar de preocuparse por competir directamente con las grandes compañías. También recomienda que los emprendedores busquen la ayuda de expertos en arquitectura de software para desarrollar sus ideas.
Este documento presenta las posibilidades de desarrollo para Kinect y Windows Phone 7. Explica cómo construir aplicaciones para estos dispositivos sin necesidad de código utilizando las herramientas y SDKs gratuitos disponibles. También describe brevemente cómo funciona Kinect y algunas oportunidades de negocio para aplicaciones de este dispositivo.
El documento resume las nuevas características y capacidades del navegador Internet Explorer 9, incluyendo soporte mejorado para HTML5, uso de hardware como la GPU para mejorar el rendimiento de aplicaciones web, y el motor JavaScript Chakra que mejora significativamente el rendimiento de JavaScript a través de compilación y ejecución en varios núcleos. También destaca cómo IE9 se integra mejor con Windows 7 para proporcionar una experiencia más unificada para los usuarios.
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...micarnavaltupatrimon
Mi Carnaval es la plataforma que permite conectar al usuario con la cultura y la emoción del Carnaval de Blancos y Negros en la ciudad de Pasto, esta plataforma brinda una amplia oferta de productos, servicios, tiquetería e información relevante para generarle valor al usuario, además, la plataforma realiza un levantamiento de datos de los espectadores que se registran, capturando su actividad e información relevante para generar la analítica demográfica del evento en tiempo real, con estos datos se generan modelos predictivos, que permiten una mejor preparación y organización del evento, de esta manera ayudando a reducir la congestión, las largas filas y, así como a identificar áreas de alto riesgo de delincuencia y otros problemas de seguridad.
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...micarnavaltupatrimon
Mi Carnaval es la plataforma que permite conectar al usuario con la cultura y la emoción del Carnaval de Blancos y Negros en la ciudad de Pasto, esta plataforma brinda una amplia oferta de productos, servicios, tiquetería e información relevante para generarle valor al usuario, además, la plataforma realiza un levantamiento de datos de los espectadores que se registran, capturando su actividad e información relevante para generar la analítica demográfica del evento en tiempo real, con estos datos se generan modelos predictivos, que permiten una mejor preparación y organización del evento, de esta manera ayudando a reducir la congestión, las largas filas y, así como a identificar áreas de alto riesgo de delincuencia y otros problemas de seguridad.
2. Únete a la Comunidad C# en
Meetup: jkr.im/csharp-co
Y si quieres participar
activamente, allí mismo solicita
acceso a nuestro
Slack: csharpco.slack.com
3. Qué es Garbage Collection?
• Automatiza la
administración de
memoria
• Memoria, NO
recursos
• Libera objetos que
ya no están en uso
• Encuentra objetos
que ya no serán
usados en el
12. Memoria: administrar la
memoria requiere memoria
Cuando hay X memoria requerida
*
5X => GC >= hacerlo manual
3X => GC 17% más lento
* 2005 con
13. Pero estamos en 2016
• .Net Micro FX
• Java Micro Edition
• Hay variantes de GC en C# ,
especialmente desarrolladas
por el equipo de Mono/Xamarin
como parte de su estrategia
para Mobile
• Apple iOS usa ARC, un
intermedio que le sigue
dejando el trabajo a los devs
• Manual de todas formas será
más rápido
14. Pero estamos en C#
• Procesamiento del GC en segundo plano
• GC basado en Generaciones
• En .Net CLR hay 2 tipos de GC
• Workstation: Optimizada para escenarios desktop UI
• Server: por defecto en ASP.Net y SQL Server
16. Pedir memoria es muy rápido
• No hay cambios de contexto
• Son llamadas en modo usuario
• Pocas veces llamadas al kernel por
parte del CLR.
17. Liberar memoria no tan rápido
• Hay que determinar si los objetos
están en uso
• Liberar objetos en desuso
• Compactar memoria
• Mover objetos entre listas
20. Compactar memoria
(heap)
Memoria Antes y
después de
compactar
NextObjPtr ->
Address 0x2030 Objeto Vivo (15)
Address 0x2010 Objeto Vivo (14)
Address 0x1070 Objeto Vivo (13)
Address 0x1060 Objeto Muerto (12) NextObjPtr ->
Address 0x1050 Objeto Muerto (11) Address 0x1050 Objeto Vivo (15)
Address 0x1040 Objeto Vivo (10) Address 0x1040 Objeto Vivo (14)
Address 0x1030 Objeto Vivo (9) Address 0x1030 Objeto Vivo (13)
Address 0x1020 Objeto Vivo (8) Address 0x1020 Objeto Vivo (10)
Address 0x0950 Objeto Muerto (7) Address 0x0950 Objeto Vivo (9)
Address 0x0945 Objeto Vivo (6) Address 0x0945 Objeto Vivo (8)
Address 0x0940 Objeto Vivo (5) Address 0x0940 Objeto Vivo (6)
Address 0x0890 Objeto Vivo (4) Address 0x0890 Objeto Vivo (5)
Address 0x0877 Objeto Muerto (3) Address 0x0877 Objeto Vivo (4)
Address 0x0863 Objeto Vivo (2) Address 0x0863 Objeto Vivo (2)
Address 0x0800 Objeto Vivo (1) Address 0x0800 Objeto Vivo (1)
Memoria Libre
Memoria Libre
21. Recolección
en 3 pasos
Memoria Libre
Objeto Vivo (15)
Objeto Vivo (14)
Objeto Vivo (13)
Objeto Muerto (12)
Objeto Muerto (11)
Objeto Vivo (10)
Objeto Vivo (9)
Objeto Vivo (8)
Objeto Muerto (7)
Objeto Vivo (6)
Objeto Vivo (5)
Objeto Vivo (4)
Objeto Muerto (3)
Objeto Vivo (2)
Objeto Vivo (1)
Gen 0
Gen 1
Gen 2
22. Aplicando
GC en G1
Memoria Libre
Objeto Vivo (15)
Objeto Vivo (14)
Objeto Vivo (13)
Objeto Vivo (10)
Objeto Vivo (9)
Objeto Vivo (8)
Objeto Muerto (7)
Objeto Vivo (6)
Objeto Vivo (5)
Objeto Vivo (4)
Objeto Muerto (3)
Objeto Vivo (2)
Objeto Vivo (1)
Gen 0
Gen 1
Gen 2
1. Objetos
muertos,
son
liberados
23. Aplicando
GC en G1
Memoria Libre
Objeto Vivo (15)
Objeto Vivo (14)
Objeto Vivo (13)
Objeto Vivo (10)
Objeto Vivo (9)
Objeto Vivo (8)
Objeto Muerto (7)
Objeto Vivo (6)
Objeto Vivo (5)
Objeto Vivo (4)
Objeto Muerto (3)
Objeto Vivo (2)
Objeto Vivo (1)
Gen 0
Gen 1
Gen 2
2. Memoria
es
compactada
24. Aplicando
GC en G1
3. Cambio de
generación
Memoria Libre
Objeto Vivo (15)
Objeto Vivo (14)
Objeto Vivo (13)
Objeto Muerto (12)
Objeto Muerto (11)
Objeto Vivo (10)
Objeto Vivo (9)
Objeto Vivo (8)
Objeto Muerto (7)
Objeto Vivo (6)
Objeto Vivo (5)
Objeto Vivo (4)
Objeto Muerto (3)
Objeto Vivo (2)
Objeto Vivo (1)
Gen 0
Gen 1
Gen 2
Memoria Libre
Nuevo obj Vivo (17)
Nuevo obj Vivo (16)
Objeto Vivo (15)
Objeto Vivo (14)
Objeto Vivo (13)
Objeto Vivo (10)
Objeto Vivo (9)
Objeto Vivo (8)
Objeto Muerto (7)
Objeto Vivo (6)
Objeto Vivo (5)
Objeto Vivo (4)
Objeto Muerto (3)
Objeto Vivo (2)
Objeto Vivo (1)
25. Aplicando
GC en G2
Memoria Libre
Objeto Vivo (15)
Objeto Vivo (14)
Objeto Vivo (13)
Objeto Muerto (12)
Objeto Muerto (11)
Objeto Vivo (10)
Objeto Vivo (9)
Objeto Vivo (8)
Objeto Muerto (7)
Objeto Vivo (6)
Objeto Vivo (5)
Objeto Vivo (4)
Objeto Muerto (3)
Objeto Vivo (2)
Objeto Vivo (1)
Gen 0
Gen 1
Gen 2
Memoria Libre
Nuevo obj Vivo (17)
Nuevo obj Vivo (16)
Objeto Vivo (15)
Objeto Vivo (14)
Objeto Vivo (13)
Objeto Vivo (10)
Objeto Vivo (9)
Objeto Vivo (8)
Objeto Muerto (7)
Objeto Vivo (6)
Objeto Vivo (5)
Objeto Vivo (4)
Objeto Muerto (3)
Objeto Vivo (2)
Objeto Vivo (1)
Se ejecuta
recolección
en G2 y
luego en G1
26. Aplicando
GC en G2
Gen 0
Gen 2
Recolección
en G2
Memoria Libre
Nuevo Obj (17)
Nuevo Obj (16)
Objeto Vivo (15)
Objeto Vivo (14)
Objeto Vivo (13)
Objeto Vivo (8)
Objeto Vivo (6)
Objeto Vivo (5)
Objeto Vivo (4)
Objeto Muerto (3)
Objeto Vivo (2)
Objeto Vivo (1)
27. Aplicando
GC en G2 Gen 1
Gen 2
Recolección
en G1
Memoria Libre
Nuevo Obj (16)
Objeto Vivo (15)
Objeto Vivo (14)
Objeto Vivo (13)
Objeto Vivo (8)
Objeto Vivo (6)
Objeto Vivo (5)
Objeto Vivo (4)
Objeto Muerto (3)
Objeto Vivo (2)
Objeto Vivo (1)
28. Aplicando
GC en G3
Recolección
en G3, G2,
G1
Memoria Libre
Nuevo Obj (20)
Nuevo Obj (19)
Nuevo Obj (18)
Objeto Vivo (15)
Objeto Vivo (14)
Objeto Vivo (13)
Objeto Vivo (8)
Objeto Vivo (6)
Objeto Vivo (5)
Objeto Vivo (4)
Objeto Muerto (3)
Objeto Vivo (2)
Objeto Vivo (1)
Gen 0
Gen 1
Gen 2
29. Aplicando
GC en G3
Todo hecho
Gen 0
Gen 1
Gen 2
Memoria Libre
Nuevo Obj (22)
Nuevo Obj (21)
Nuevo Obj (20)
Nuevo Obj (18)
Objeto Vivo (14)
Objeto Vivo (8)
Objeto Vivo (6)
Objeto Vivo (2)
30. LOH => Large Object Heap y el límite
de los Todo lo que
vimos aplica
para objetos
<= 85.000
bytes que
están en el
SMO
33. En el LOH No hay compactación
Memoria Libre Memoria Libre Memoria Libre Memoria Libre
new Large Ob8
Large Ob6 Large Ob6 Large Ob6 Large Ob6 Large Ob6
Large Ob5 Large Ob5 Large Ob5 Memoria Libre Memoria Libre
Large Ob4 Large Ob4 Large Ob4 Large Ob4 Large Ob4
Large Ob3 Memoria Libre new Large Ob7 new Large Ob7 new Large Ob7
Large Ob2 Large Ob2 Large Ob2 Large Ob2 Large Ob2
Large Ob1 Large Ob1 Large Ob1 Memoria Libre Memoria Libre
• El GC del LOH
se ejecuta en
el GC del Gen2
• El LOH no está
alineado en
memoria, y
crece por
demanda
34. Cuando se ejecuta el GC?
• Cuando el tamaño de los objetos en alguna
generación alcanza su límite
• Gen 0 : ~ 256 K
• Gen 1 : ~ 2 MB
• Gen 2 : ~10 MB
• Cuando se usa GC.Collect() [ se crea una
petición, no una orden ] NO LO USEN SINO
SABEN
• El OS envía una notificación de poca
memoria
36. Variantes del GC en .Net FX
Workstation:
• non-concurrent
• concurrent: desde .net 4 se reemplazo
por background GC
Server:
• non-concurrent
• desde .net 4.5 soporta background GC
37. Workstation GC
• La recolección sucede en un el mismo user
thread que inicio el GC. Conserva la
misma prioridad
• El Gc compite con otros threads por
tiempo de CPU
• Threads con código nativo no son
suspendidos
• Si el hardware es de un solo procesador
siempre se usa este GC aunque este
38. Server GC
• La recolección sucede en múltiples hilos
corriendo en THREAD_PRIORITY_HIGHEST
• Dado que cada CPU tiene su Heap, se
requiere un GC x CPU (SOH + LOH)
• Los tamaños de segmentos son mayores en
server
• La carga de CPU en server es mayor
• * hoy en día los Workstation también tienen mucha
memoria y muchos procesadores
39. Background GC en WStations
• Solo aplica a generación 2, lanza un hilo
para hacer collection en Gen0 y Gen1
mientras ocurre Gen2.
• Si en el proceso se habían lanzado
Collection normales (foreground) todos
los thread se suspenden, al finalizar
todos continúan incluyendo el bkground
GC.
40. Background GC en Server
• Lanza un GC thread por cada procesador
lógico
• Al parecer el thread GC lanzado en
Wstation puede hacer time out en ciertos
escenarios, en server ninguno de estos
threads hace timeout.
• Ahora esta es la configuración por
defecto en server
43. Nursery Collection
• El tamaño de Nursery es 4mb, al
llenarse este heap el GC inicia un
nursery-collection
• Se suspenden los hilos
• Los objetos ‘vivos’ se mueven al
Mayor Heap, y en el proceso Nursery
queda vacío
44. Mayor heap Collection
• El tamaño del Mayor Heap es variable,
pero configurable
• Tamaño por defecto 512 MB
• Al llenarse este heap el GC inicia un
mayor-collection
• Sino se logra obtener memoria
suficiente el GC solicita más memoria
al Host OS
45. Large Object Space
• Objetos mayores a 8.000 bytes (~8k)
nunca se envían al nursery y por ende
nunca van al mayor heap
SGEN_MAX_SMALL_OBJ_SIZE
• Estos objetos van al Large Object
Space
• Son rastreados por el LOS Manager
46. Variantes del GC en Sgen para el Mayor Heap
Copying Collector:
• Funciona igual al nursery-Collection,
mueve (aka compacta) los objetos para
desfagmentar memoria
• El problema es que muchos objetos
‘viejos’ al moverse liberan muy poca
memoria y no justifica el tiempo de
computo
47. Variantes del GC en Sgen para el Mayor Heap
Mark and sweep/copying collector:
• No mueve los obj.
• Desde su creación los agrupa en
contenedores según el tamaño
• Si llega al 66% de fragmentación ejecuta
copying-collector
• Se puede cambiar y deshabilitar colection
por por parámetro : evacuation-threshold
48. Un paso más lejos
• Weak and Strong
References, Resurrection
• IDisposable
• Finalizers
• Recibir notificaciones de
Full GC
50. Únete a la Comunidad C# en
Meetup: jkr.im/csharp-co
Y si quieres participar
activamente, allí mismo solicita
acceso a nuestro
Slack: csharpco.slack.com
Notes de l'éditeur
El tema del rendimiento de los GC y la capacidad de algunos dispositivos llevaron a Apple a no adoptar GC en iOS pese a la solicitud de los desarrolladores
iOS 10.5 /2007 introdujo un GC
iOS 10.8/2012 lo eliminó y lo reemplazo por un LLVM/ARC (Automatic Reference Counting)
No hay cambios de contexto, pues la memoria se le pide al CLR y hace parte del managed heap, que previamente ha pedido una buena porción al host OS. Es decir son llamadas en modo usuario, pocas llamadas al kernel por parte del CLR.
No hay cambios de contexto, pues la memoria se le pide al CLR y hace parte del managed heap, que previamente ha pedido una buena porción al host OS. Es decir son llamadas en modo usuario, pocas llamadas al kernel por parte del CLR.
No hay cambios de contexto, pues la memoria se le pide al CLR y hace parte del managed heap, que previamente ha pedido una buena porción al host OS. Es decir son llamadas en modo usuario, pocas llamadas al kernel por parte del CLR.
85k parece poco, pero por ejemplo una lista de datos con miles de registros puede tener en total varios megas de tamaño, pero la lista como tal solo unos pocos K porque la lista solo contiene referencias (punteros de 32 o 64 bit ) a objetos más pequeños.
Es decir este limite aplica en mayoría de casos para cosas como imágenes o archivos cargados en memoria, o listas inmensas, u objetos que por X o Y llegan a ser enormes.
Un array de double[1000] = puede irse al LOH por cuestiones de aprovechar mejor performance, alinemiento de bytes