2. Manejo de memoria Manejo de memoria estática

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

Métodos y parámetros.
Curso de Java Capitulo 6: Cadenas y Arrays Profesor:
Estructura de Datos Unidad 4. Recursividad Dra. María Lucía Barrón Estrada Enero-Junio 2007.
Introducción a la programación en JAVA
Tablas. Descripción general Introducción a las tablas Creación de tablas Uso de tablas.
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
Archivos Implementar un método que lea una secuencia de números enteros de un archivo y compute la cantidad de elementos leídos.
Abstracciones y Modelos
CADENAS EN PHP.
Curso de Java Estructura del Lenguaje
Herencia y Polimorfismo
Tema 1. Introducción a la programación (Lenguaje java).
Tratamiento de listas en Java
1.2 Sintaxis del lenguaje Java.
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
Teoría de lenguajes y compiladores
Programación Orientada a Objetos en Java
Oscar Bedoya. Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos.
Herramientas para el acceso directo a memoria en C++
Vectores en java.
Manipulación de caracteres e hileras de texto
Material Elaborado por: Lic. Saily González. CONTENIDO 2.1- Estructura de una Aplicación JAVA 2.2- Elementos básicos de la Programación JAVA Comentarios.
La estructura básica de los programas en java, algo a tener en cuenta y que debemos recordar siempre es el archivo debe llevar el nombre de la clase con.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Métodos Algoritmos y Desarrollo de Programas I. Cuando utilizar métodos  Los métodos se utilizan para romper un problema en pedazos de forma que este.
Estructuración y modularidad de los programas Fundamentos de Programación/ Programación I
Material de apoyo Unidad 2 Estructura de datos
POO Java Módulo 3 Elementos de programas Identificadores
Herencia y Polimorfismo en JAVA
Java Orientado a Objetos CLASES,OBJETOS Y MÉTODOS
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Tema 6: Clases Antonio J. Sierra.
Public class MiClase { public static int tmp = 123; // miembro variable public static final double PI = ;// miembro constante public float.
Nombre, Alcance y Asociaciones (Bindings). Agenda Definición Nombre y Bindings Binding Time Importancia del Binding Time Eventos relacionados a la Asociación.
Suponiendo que además en la clase U hay: import java.util.*; class U{ static Scanner teclado = new Scanner(System.in); static public int readInt(String.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SEMANA TRES ASIGNACION.
El lenguaje de programación Java
JAVA J.A.C..
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6
Programación Orientada a Aspectos (POA)
Java. Java nació el año 1991, por un par de ingenieros de la Sun Microsystems.
Sintaxis de C# (Declaraciones y Tipos)
Clase 10: Estructuras de datos y arreglos.
Sistema de archivos Sistemas operativos.
Tema 10.3: Asignación de Espacio No Contiguo. Tema 10.3: 2 Silberschatz, Galvin and Gagne ©2005 Fundamentos de los Computadores (ITT, Sist. Electr.),
Un programa no es nada mas que una serie de instrucciones dadas al ordenador en un lenguaje entendido por el, para decirle exactamente lo que queremos.
Asignación de Espacio No Contiguo
Ada 2º Parte (variables, ámbitos , subrutinas , tipos abstractos de datos y excepciones)
Unidad II Introducción a la programación en C++

APRENDIZ: SANDRA L. CAICEDO C. ORDEN: 20194
1 Manejo de Excepciones y otros Agustín J. González ELO-329.
Constructor  Un constructor es un método que inicia un objeto inmediatamente después de su creación. De esta forma nos evitamos el tener que iniciar.
Clases y Objetos en Java ELO329: Diseño y Programación Orientados a Objetos.
Programación Orientada a Objetos
Estructura de los Sistemas Operativos
Términos algoritmo diseñar algoritmo implementar algoritmo
Contenido:  ¿Qué son los Punteros?  Los Procedimientos: New y Dispose.
Visual Basic FUNCIONES Y PROCEDIMIENTOS
Capítulo 2 “Subprogramas/Funciones - Arreglos”
Conceptos y Lenguaje Imperativo
MEMORIA DINÁMICA.
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) V. GESTIÓN DE TIPOS Y GENERACIÓN DE CÓDIGOS.
ESTRUCTURAS DE DATOS “Conceptualización de estructuras de datos” Por: Eduardo Robayo.
Programación en Visual Basic
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Transcripción de la presentación:

2. Manejo de memoria Manejo de memoria estática Manejo de memoria dinámica

Introducción La administración de memoria de una computadora es una tarea fundamental debido a que la cantidad de memoria es limitada. El sistema operativo es el encargado de administrar la memoria del sistema y compartirla entre distintos usuarios y/o aplicaciones. El RTS (Run Time System) de un lenguaje de programación administra la memoria para cada programa en ejecución.

La ejecución de un programa requiere que diversos elementos se almacenen en la memoria: Código del programa (instrucciones) Datos Permanentes Temporales Direcciones para controlar de flujo del ejecución del programa

Asignación de Memoria Estática y Dinámica A la asignación de memoria para algunos elementos fijos del programa que es controlada por el compilador se le llama asignación de memoria estática. A la asignación y posible recuperación de memoria durante la ejecución de un programa y bajo su control, se le llama asignación de memoria dinámica.

Memoria Estática Define la cantidad de memoria necesaria para un programa durante el tiempo de compilación. El tamaño no puede cambiar durante el tiempo de ejecución del programa. Algunos lenguajes de programación utilizan la palabra static para especificar elementos del programa que deben almacenarse en memoria estática.

Memoria Estática Elementos que residen en memoria estática: Código del programa Las variables definidas en la sección principal del programa, las cuales pueden solo cambiar su contenido no su tamaño. Todas aquellas variables declaradas como estáticas en otras clases o módulos. Estos elementos se almacenan en direcciones fijas que son relocalizadas dependiendo de la dirección en donde el cargador las coloque para su ejecución.

Método común de asignación de memoria Memoria disponible Para el programa Variables estáticas Código del programa Mapa de memoria Dirección alta Dirección baja

El stack de ejecución Cada subprograma (procedimiento, función, método, etc.) requiere una representación de si en tiempo de ejecución. Estas representaciones se almacenan en el stack de ejecución con el fin de controlar el flujo de ejecución del programa.

Ejemplo …. public static int factorial (int n){ if (n==0) return 1; else return n*factorial(n-1); } public static void main (String[] a){ int a=5; System.out.println(factorial(a)); Cuales elementos del programa serán colocados en memoria estática? Que elementos se almacenaran en el stack en tiempo de ejecución?

Es siempre posible, cuando se diseña un programa, conocer la cantidad de memoria necesaria para que este se ejecute correctamente?

Memoria Dinámica Define el tamaño del espacio de memoria necesario para un programa en tiempo de ejecución. El tamaño de los elementos puede cambiar durante la ejecución del programa. Almacena todos los elementos definidos con la palabra new en un programa.

Memoria Dinámica Las variables dinámicas son aquellas que crecen de tamaño o se reducen durante la ejecución de un programa. Estas se almacenan en un espacio de memoria llamado heap. El heap se localiza en la región de memoria que esta encima del stack. Algunos lenguajes de programación permiten que el programador asigne y desasigne manualmente la memoria. Java utiliza un recolector de basura.

Uso del heap Para usar el heap un programa requiere: Una o mas variables que refieran el lugar donde se encuentran las variables dinámicas. Un método para obtener memoria (new) Una forma de asignar la dirección de memoria a alguna variable (identificador) Una forma para referirse a la variable dinámica

Ejemplo Punto public class UsaPunto { public class Punto { private int x=0; private int y=0; public static int totalPuntos =0; Punto (int _x, int _y){ x=_x; y=_y; totalPuntos++; } public void setx(int _x){ x= _x; public String toString (){ return “(”+x+”,”+y+”)”; public class UsaPunto { public static void main(String[] args){ Punto punto1= new Punto(2,1); Punto punto2 = new Punto(5,5); Punto punto3 = punto1; Punto[] puntos = {punto1,punto2}; System.out.println(Arrays.toString(puntos)); System.out.println(“Puntos creados “+ Punto.totalPuntos); } x=2 y=1 void setx(int _x) String toString () punto1 punto2 x=5 y=5 punto3 Metodos de instancia Miembros de instancia Punto totalPuntos = 0 Miembros de clase

Liberación de memoria La memoria estática se libera cuando el programa finaliza su ejecución. La memoria dinámica se libera de dos formas: Explicita. El programador decide cuando un elemento debe ser eliminado de la memoria. El LP provee mecanismos para liberación de memoria. Implícita. El sistema decide que elementos deben ser eliminados para recuperar el espacio de memoria que ocupan. El sistema cuenta con un “recolector de basura”.

The Garbage Collector Algunos lenguajes de programación requieren que el programador mantenga la información de todos los objetos creados en un programa para que estos puedan ser destruidos cuando ya no son requeridos en la ejecución. Este método para manejar la memoria puede resultar tedioso y propicio a errores. Java permite la creación de tantos objetos como sean necesarios sin tener que destriurlos explícitamente cuando ya no son requeridos. El medio ambiente de ejecución de Java cuenta con un mecanismo llamado recolector de basura (garbage collector) que se encarga de eliminar los objetos cuando ya no existen referencias a ellos. El recolector de basura, de manera automática, se ejecuta periódicamente durante la ejecución de un programa.

Ejemplo Como almacenar Cadenas de Caracteres?

Cadenas de Caracteres Se utilizan secuencias de bits para representar letras y otros símbolos. Alfabéticos Caracteres Dígitos Caracteres Especiales Caracteres de Control… El numero de caracteres que se pueden representar depende de el numero de bits con que se represnta cada carácter. Ejemplo Con 8 bits se pueden representar 256 Caracteres diferentes, donde cada elemento ocupa una secuencia de 8 bits. Una cadena de caracteres esta representada por la concatenación de las hileras de bits que representan los caracteres individuales.

S1=“INSTITUTO” longitud = 9 S2=“TECNOLOGICO DE CULIACAN” longitud = 23 Una cadena de caracteres es una secuencia finita de 0 o más caracteres. La longitud de la cadena de caracteres es el número de caracteres que contiene. Cadena Vacía o Nula.- Cero caracteres. Delimitadores: Comúnmente se usan “” o ‘’ dependiendo del lenguaje de programación. Ejemplos: S1=“INSTITUTO” longitud = 9 S2=“TECNOLOGICO DE CULIACAN” longitud = 23

Subcadenas = Se dice que y es subcadena de S si existe: S = X + Y + Z Concatenación = Es la operación de unir 2 cadenas para formar una sola. Ejemplo: S3 = S1 + “ ” + S2 S3=“INSTITUTO TECNOLOGICO DE CULIACAN” Longitud de S3 = 33 Subcadenas = Se dice que y es subcadena de S si existe: S = X + Y + Z Donde: X y/o Z pueden ser cadenas vacías: Si X es cadena vacía entonces Y es subcadena Inicial Si Z es cadena vacía entonces Y es subcadena final

S = “Estrutura de Datos” Ejemplo: S = “Estrutura de Datos” “de” es subcadena de S “Est” es subcadena inicial de S “Datos” es subcadena final de S

ALMACENAMIENTO DE CADENAS Estructura de longitud fija: En este formato cada cadena tiene un registro de longitud fija (generalmente 80 caracteres). Estructura de longitud variable con un máximo fijo: Son cadenas de caracteres que contienen un máximo definido, pero su longitud puede variar y se usa un delimitador especial al final o la longitud actual como parte de la cadena. Estructuras Enlazadas: Cada cadena es almacenada en un nodo que contiene un enlace a la siguiente cadena.

Ejemplo Almacenar un programa (Texto) C PROGRAM PRINTING TWO INTEGERS IN INCREASING ORDER READ *, J , K IF ( J.LE.K) THEN PRINT *,J,K ELSE PRINT *,K,J ENDIF STOP END

En estructuras de longitud fija: 200 210 250 C PROGRAM PRINTING …. 280 290 300 READ * , J , K …… 360 370 380 I F ( J . L E . K ) T H E N …… …………… 440

En estructuras de longitud variable con un máximo fijo: En estructuras de longitud variable con un máximo fijo: *usando delimitador: $$ C PROGRAM PRINTING TWO IN… $$ 1 2 3 4 5 READ *, J , K $$ IF (J.LE.K) THEN $$ ……………… END $$

En estructuras de longitud variable con un máximo fijo: En estructuras de longitud variable con un máximo fijo: *usando longitud actual 55 C PROGRAM … ORDER 18 READ *, J , K 21 IF (J.LE.K) THEN ……………… END 4

En estructuras Enlazadas: Cadena Liga C PROGRAM ….. Inicio READ *, J , K IF (J.LE.K) THEN …… END