Clase del 30/10/2007 (Diseño Avanzado con Objetos)
DTS: Para cada clase tiene una tabla con los mensajes que sabe responder esa clase (pero no los mensajes que hereda)
performance: Malo, tardas O(nlog(n)) en encontrar algo
memoria: bueno, por no tener duplicados
es dinamico? Si, facilmente se puede agregar un método, el cual pega directamente en el method dictionary
STI: Hace una tabla
en las columnas pone las clases
en las filas pone los metodos
en donde se unen, se apunta al metodo si es que la clase lo tiene por herencia o por reimplementarlo
si no tiene ese metodo, apunta a DNU
performance: Bueno
memoria: Malo, muchas referencias al DNU (doesNotUnderstand)
la administracion de la tablas es muy complicada
RD y CT hacen lo mismo, compactando la tabla con coloreo
VTBL: Para cada clase tiene una tabla, y para cada selector tiene un indice
performance: Bueno
memoria: Malo, duplica mucha informacion
en el ejemplo aC m4 (se traduce como) -> call cvt[2]
NO se puede usar en lenguajes dinamicamente tipados
por el late binding sabes de que clase es el objeto cuando se envia el mensaje, entonces m4 no lo podes traducir como 2 hasta que no se sepa
Un problema es que al agregar un metodo en una clase, se tiene que agregar en todas las tablas virtuales asociadas al resto de las clases hijas
GLC:
Define una cache global con 95% de hit
trabaja como un hash abierto
“Las tablas hash de direccionamiento abierto pueden almacenar los registros directamente en el arreglo. Las colisiones se resuelven mediante un sondeo del arreglo, en el que se buscan diferentes localidades del arreglo “ [1]
la tabla la arma con las columnas
-clase
-mensaje
-metodo al que apunta
la idea es que cada vez que se haga una busqueda por <clase,mensaje>
si no se encuentra en la posicion buscada se mira en la fila siguiente, sino en la otra siguiente
de no encontrarlo en las 3 filas, las mismas se vacian y se va a buscar con el algoritmo DTS
IC o PIC:
actua como una cache local por cada mensaje con un 80% de hit
reemplaza la llamada por una porcion de codigo, en donde se pregunta si la clase del receiver es del tipo buscado, si es asi, tiene la llamada directa al método
es una cache por cada envio de mensajes
- existe un costo al enviar el mensaje
- se hace cuando el metodo se ejecuta una X cantidad de veces
- se pueden evitar los call poniendo el byte-code en la llamada