Пользовательский Java Core Class - PullRequest
2 голосов
/ 26 октября 2011

Я заинтересован в исправлении основных классов Java.Такие вещи, как типы данных String, Graphics (Swing) и классы из lib/rt.jar в целом.

Итак, на мой взгляд, есть несколько способов сделать это:

  1. создайте пользовательские классы и включите их в JVM, затем запустите jvm с -Xbootclasspath
  2. , чтобы написать новый загрузчик, который будет вставлять код Java в пользовательские классы
  3. использовать агенты и инструментальный байт-код при загрузке (не слишком знаком с этим)

Я хотел бы услышать ваши советы / мнения относительно методов, может быть, я что-то упустил?

Ответы [ 2 ]

3 голосов
/ 26 октября 2011

Изменение таких классов с помощью пути к загрузочному классу может быть нарушением вашего лицензионного соглашения. (Если это касается вас) Изменение байтового кода разрешено.

Еще один способ изменить системные классы - добавить файлы jar в каталог jre/lib/endorsed (который вы должны создать). Здесь будет загружено все что угодно, вместо других файлов jar.

Изменение класса String может запутать опцию -XX:UseCompressedStrings. Вы можете проверить, что происходит для вас, с любыми изменениями.

Я сделал это во время тестирования, чтобы получить дополнительный анализ из системы. Я не пробовал менять эти классы для производственного использования.

Я подозреваю, что все, что вы пытаетесь сделать, может быть сделано иначе, но без подробностей невозможно сказать.

1 голос
/ 26 октября 2011

Другим вариантом является загрузка / извлечение исходного кода OpenJDK и сборка его для себя с учетом ваших изменений.

Но не называйте это Java. То, что вы делаете, скорее всего, приведет к несовместимости с реальной вещью.

иногда "Человек должен делать то, что мужчина должен делать";)

Цитирование Джона Уэйна не делает того, что вы предлагаете, мудрый ход.


нет, нет, нет. Я хочу, чтобы он был совместим с HotSpot.

Совместимость с HotSpot недостаточна. Существуют строгие правила, регулирующие использование товарного знака Java в реализации «java». Вы можете вызывать Java-реализацию только в том случае, если она прошла тесты Java STK.

И «я хочу, чтобы он был совместимым» означает нечто иное, чем «совместим», и это игнорирует вопрос о том, что вы подразумеваете под совместимостью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...