понедельник, 29 ноября 2010 г.

[PJP]: Dynamic Class Loading in the Java Virtual Machine

Sheng Liang and Gilad Bracha, "Dynamic Class Loading in the Java Virtual Machine", ACM OOPSLA'98, pp.36-44, 1998.

Abstract
Class loaders are a powerful mechanism for dynamically loading software components on the Java platform. They are unusual in supporting all of the following features: laziness, type-safe linkage, user-defined extensibility, and multiple communicating namespaces.
We present the notion of class loaders and demonstrate some of their interesting uses. In addition,we discuss howto maintain type safety in the presence of user-defined dynamic class loading.

P.S. Найдено в tutorial on Javassist.
P.P.S. Интересный пример:
MyClassLoader myLoader = new MyClassLoader();
Class clazz = myLoader.loadClass("Box");
Object obj = clazz.newInstance();
Box b = (Box)obj; // this always throws ClassCastException.
Так как не до конца определено, кто же загрузчик класса Box (в той части, где - 'Box b = (Box)...').

1 комментарий:

  1. Вот еще задачка:
    public class Company {
    private Address address;
    }

    1) возможно ли
    2) в каких ситуациях
    3) встречается ли такое в жизни
    что Company и Address загружены различными класс лоадерами

    P.S. Встретился с такими вопросами о ClassLoader в следующем контексте:

    class XYZProcessor {
    public static process(Object obj) {
    // body here
    }
    }
    для obj.getClass() и для классов полей объекта obj, полученных при помощи Java Reflection, генерятся некоторые ClassDescriptor-ы (и кэшируются с ключем типа Class).
    Вот тут-то и столкнулся с тем, что идентичность класса задается не только именем, но и ClassLoader-ом.

    ОтветитьУдалить