Если я переключил бы с Sun JDK к OpenJDK, к каким неожиданностям я должен подготовиться меня?
Что действительно часто идет не так, как надо и насколько трудный это может быть?
Конечно, каждое приложение может иметь свои отдельные проблемы, но я ищу классы проблем, что-то, с чем многие люди уже боролись при переключении JDKs.
ResolityClureUrl является членом класса System.Web.UI.Control, поэтому он доступен непосредственно как
var url = ResolveClientUrl("~/Some/Url/");
при вызове в коде вашей страницы asp.net.
Чтобы использовать его внутри класса, необходимо передать Страницу (или элемент управления на странице) в класс в его конструкторе. Даже тогда я не уверен, что вы сможете использовать его в указанном вами пути. Вероятно, вам придется сделать что-то подобное:
public class NavigationPath
{
private string menuItems = string.Empty;
public NavigationPath(Page page)
{
menuItems = "<li>" + "<a href=\"" + page.ResolveClientUrl("~/Home.aspx") + "\">home</a>" + "</li>";
}
}
И затем на вашей странице asp.net сделать что-то вроде:
var navPath = new NavigationPage(this);
-121--237155- Постоянное поколение содержит метаданные, описывающие классы пользователей (классы, которые не являются частью языка Java).
Приложения с большим кодом могут заполнить этот сегмент кучи, что вызовет java.lang.OutOfMemureError: PermGen
. На это не влияет настройка -Xmx или объем памяти на компьютере. Чтобы задать новый начальный размер, используйте -XX: PermSize = 64 m
. Чтобы задать максимальный размер, используйте -XX: MaxPermSize = 128 m
Маловероятно, что с OpenJDK что-то пойдет не так. К настоящему времени он считается совместимым на 100%. Но я думаю, что хорошо знать, какие части должны были быть переписаны и поэтому не используют тот же код, что и SunJDK.
Запись в Википедии имеет хороший обзор:
По состоянию на май 2008 года, единственная часть библиотеки класса, которая остается запатентованной и закрытым исходным кодом (4% по состоянию на май 2007 года для OpenJDK 7 и менее 1% по состоянию на май 2008 года и OpenJDK 6)
С первого майского релиза 2007 года Sun Microsystems с помощью сообщества выпустила в виде свободного и открытого программного обеспечения или заменила на свободные и открытые альтернативы почти весь обремененный код:
Весь код аудио движка, включая программный синтезатор, был выпущен как Open-source. Программный синтезатор с закрытым исходным кодом был заменен новым синтезатором, разработанным специально для OpenJDK, под названием Gervill,
Все классы криптографии, используемые в библиотеке Class, были выпущены как Open-source,
Код, масштабирующий и растеризующий шрифты, был заменен на FreeType
Нативная система управления цветом была заменена на LitTittleC. В JDK имеется подключаемый слой, так что коммерческая версия может использовать старую систему управления цветом, а OpenJDK - LittleCMS.
Код растризатора сглаживающей графики был заменен средством визуализации Open-sourced Pisces, которое использовалось в проекте Этот код является полностью функциональным, но по-прежнему нуждается в некоторых улучшениях производительности,
Плагин JavaScript был открыт (сам движок Rhino JavaScript был открыт с самого начала).
Как я знаю, шрифты будут выглядеть искажёнными, Sun пришлось удалить оригинальные шрифты из OpenJDK, так как они не являются "open source", а JVM будет использовать некоторые из них по умолчанию, которые не очень хороши...
Поскольку OpenJDK - это проект Sun, основанный на исходном коде Java, я не ожидал много проблем. Единственная область, где что-то может сломаться, - это код, который нужно было заменить (потому что он не мог быть выпущен под GPL) или изменения из-за новых функций (но они должны быть почти такими же, как в официальном JDK).
Некоторые пользовательские интерфейсы качания не совпадали полностью (у металла были прокладки, которых было недостаточно, чтобы заметить). Обратите внимание, что это было 8 месяцев назад.
Используйте сборку OpenJDK, о которой известно, что она проходит TCK, чтобы минимизировать сюрпризы.