Oracle - что это? Oracle - база данных.

23.04.2019 Игры

11 марта 2013 в 19:41

Таинственный FrontCache

  • Java

Всё началось с того, что я в очередной раз ковырял в Eclipse Memory Analyzer дамп памяти Java-приложения и увидел такую интересную вещь:

С кодом HashMap я знаком весьма неплохо, но вложенного класса FrontCache никогда там не видел. Может, с последним обновлением JDK мне прислали обновлённый HashMap? Я заглянул в исходники, но слова «front» там не обнаружилось. Стало интересно, откуда же этот класс берётся и что он делает.

Порывшись в JRE (у меня 1.7u10, но и в последних 1.6 тоже это есть), я нашёл любопытный джарик: alt-rt.jar, в котором и обнаружился HashMap$FrontCache.class, а также несколько других классов (LinkedHashMap, TreeMap, BigDecimal, BigInteger, MutableBigInteger и их вложенные классы). Обычно эти классы подключаются из rt.jar. Почему же они стали грузиться из этого загадочного джарика?

Я вспомнил, что недавно экспериментировал с опциями Java-машины и, в частности, включил -XX:+AggressiveOpts. На сайте Оракла про этот ключ написано скупо:

Turn on point performance compiler optimizations that are expected to be default in upcoming releases.

На Хабре объяснить эту опцию подробнее, мол, это комбинация других ключиков. Порывшись в исходниках OpenJDK 7-й версии я понял, что ключиками дело не ограничивается. Вот что мы видим в hotspot/src/share/vm/runtime/arguments.cpp:
jint Arguments::parse_vm_init_args(const JavaVMInitArgs* args) { ... if (AggressiveOpts) { // Insert alt-rt.jar between user-specified bootclasspath // prefix and the default bootclasspath. os::set_boot_path() // uses meta_index_dir as the default bootclasspath directory. const char* altclasses_jar = "alt-rt.jar"; size_t altclasses_path_len = strlen(get_meta_index_dir()) + 1 + strlen(altclasses_jar); char* altclasses_path = NEW_C_HEAP_ARRAY(char, altclasses_path_len); strcpy(altclasses_path, get_meta_index_dir()); strcat(altclasses_path, altclasses_jar); scp.add_suffix_to_prefix(altclasses_path); scp_assembly_required = true; FREE_C_HEAP_ARRAY(char, altclasses_path); }
Ага! С этой опцией действительно помимо всего прочего добавляется alt-rt.jar. В этом можно убедиться и из своего приложения, воспользовавшись System.getProperty("sun.boot.class.path") . Таким образом, для упомянутых классов при включенных AggressiveOpts реализация меняется.

Но в чём различие в реализации HashMap? Я стал искать изменённый исходник, но тут меня постигла неудача. Выяснилось, что этот jar собирается с помощью jdk/make/altclasses/Makefile, а каталог с исходниками обозначен как
ALTCLASSES_SRCDIR = $(CLOSED_SRC)/share/altclasses
Это запахло не очень хорошо, и файл jdk/make/common/Defs.gmk подтвердил мои опасения:
# Files that cannot be included in the OpenJDK distribution are # collected under a parent directory which contains just those files. ifndef CLOSED_SRC CLOSED_SRC = $(BUILDDIR)/../src/closed endif
Разумеется, указанного каталога в комплекте не идёт. На всякий случай я выкачал JDK 8, но там ситуация была не лучше. Oracle прячет альтернативный HashMap.

Порывшись в интернете, я напоролся на , который обнадёжил меня, но напрасно. На главной написано, что там есть исходники классов из jre\lib\alt-rt.jar, по факту же там стандартная реализация HashMap и остальных классов. Видимо, автор не разобрался, что есть два варианта.

Остался один способ - дизассемблировать байткод (javap -c -private) и почитать его так. Чтобы было проще, я дизассемблировал обычный и альтернативный HashMap, парой регекспов выкинул несущественные вещи и сравнил diff"ом. Сперва всё выглядело довольно страшно, но потом я догадался, что код обычного и альтернативного HashMap эволюционировали независимо, поэтому сравнивать альтернативный HashMap надо с общим предком, коим оказался HashMap из последних апдейтов 6-й JDK. Тут картина стала гораздо понятней, не потребовалось даже специальных инструментов для декомпиляции в Java-код. В HashMap действительно появилось HashMap.FrontCache frontCache, которое инициализируется в конструкторе. Конструктор FrontCache принимает capacity - количество элементов в основной хэш-таблице. В метод get(Object key) добавлен примерно такой код:
if(frontCache != null) { V value = frontCache.get(key); if(value != null) return value; }
В метод put(K key, V value) добавлено следующее:
if(frontCache != null) { frontCache.put(key, value); }
Есть технические изменения и в других методах, но суть здесь. Ясно, что frontCache - какое-то альтернативное (видимо, более быстрое) хранилище данных. При запросе элемента он в первую очередь ищется в frontCache, а при занесении нового заносится и в frontCache, и в обычную хэш-таблицу. Что же такого ускоряет класс FrontCache? Вот как выглядят самые важные методы из него:
private class FrontCache { private Object cache; private int bitMask; public FrontCache(int capacity) { this.cache = new Object; this.bitMask = makeBitMask(capacity); } public int makeBitMask(int capacity) { return -1 << (32 - Integer.numberOfLeadingZeros(capacity - 1)); } public boolean inRange(int value) { return (value & bitMask) == 0; } public V get(Object key) { if(key instanceof Integer) { int intKey = ((Integer)key).intValue(); if(inRange(intKey)) { return (V) cache; } } return null; } private void put(K key, V value) { if(key instanceof Integer) { int intKey = ((Integer)key).intValue(); if(inRange(intKey)) { cache = value; } } } } Прочие методы служат для удаления элементов, изменения размера кэша и т. д. Но идея из приведённого кода понятна: если ключ - Integer и он попадает в диапазон от 0 до capacity-1 (проверка оригинально соптимизирована), то значение просто заносится в массив по индексу с соответствующим порядковым номером без всяких преобразований и хэш-функций.

Если же ключи не являются целыми числами, то FrontCache просто бесполезен. Однако массив всё равно выделяется и проверки делаются при каждой операции с HashMap.

На самом деле теряется даже больше памяти, так как HashMap.Entry имеет метод setValue, который теперь должен обновлять и значение в FrontCache при необходимости. Поэтому в каждый Entry добавлена ссылка на сам HashMap, что может добавлять до 8 лишних байт на запись.

Открытие несколько шокировало меня. Последнее время мы во славу

Всем привет. Будем ребята сегодня разговаривать о такой папке как.oracle_jre_usage — я постараюсь узнать максимум информации и вам тут все напишу. В общем отправился я в интернет.. искал инфу, искал, и вот что выяснил. Значит на одном сайте, это сервис вопросов и ответов, так вот там один чел спросил что за папка.oracle_jre_usage и ему сказали что это Java апплеты Oracle. Вы тут можете спросить, но что такое апплет? Это программа, которая не может работать без виртуальной машины Java (JVM). Примерно как-то так =)

Но я стал еще искать инфу по поводу папки.oracle_jre_usage и вот узнал, что в этой папке может быть файл с расширением timestamp. Вот у одного чела в папке был файл 48ac84126bcac2aa.timestamp, хотя расширение вроде как означает временной штамп.. ну мне так показалось…

Обычно папка создается вот в этом месте:

C:\Users\Имя\

Так, а вот на зарубежном одном сайте нашел инфу что папка.oracle_jre_usage нужна для Java Usage Tracker.

Так ребят, вроде докопался. Значит есть такое как свойства отслеживания Java. И вот это одно из свойств:

com.oracle.usagetracker.track.last.usage

Это свойство включает или отключает отслеживание времени последнего использования. Вроде имеется ввиду время, когда JRE использовался для апплета. В общем не совсем понятно, но самое главное не это, а то, что это свойство создает файл в одном из следующих мест (это зависит от операционки):

%ProgramData%\Oracle\Java\.oracle_jre-usage\
${user.home}/.oracle_jre_usage/

Правда тут нет такого расположения как C:\Users\Имя\, странно, но может второй вариант это и есть это расположение? Просто папка \Имя\ как раз и похоже на user.home, ибо это личная пользовательская папка, если можно так сказать…

Чтобы легче найти инфу, то там на странице нажмите Ctrl + F и вставьте.oracle_ и потом нажимайте F3 и сразу увидите.

Ну а вот и пример как эта папка выглядит:

Ну а вот что может быть внутри — один файлик с расширением timestamp:

И даже в Windows 10 эта папка может быть:

Теперь по поводу удаления. Нет, я не знаю можно ли удалить, хотя читал что один чел удалял и все было норм. Все равно я советую сделать вот что — не удалять папку, а переименовать, но так, чтобы сохранилось оригинальное имя. Например просто добавьте что-то в конце и потом если будут траблы, то это что-то уберете. Например было.oracle_jre_usage, а вы переименуйте в.oracle_jre_usage_test и все, потом если что, то _test уберете. Я так всегда делаю. Если не захочет переименоваться, будет писать типа файлы в этой папке используются, то даже не знаю что сказать, может папка и нужная.. а можно тогда скачать утилиту Unlocker, и ней переименовать папку.. но это уже совсем другая история..

Ну вот на этом и все ребята! Удачи вам и будьте счастливы!!

Даже не задумываясь об этом. Все веб-сайты, приложения, игры имеют свои собственные базы. Что это такое? Все просто. Это собранная информация, которая организована определенным способом. Простой пример - это телефонная книга. Здесь есть имена и фамилии, номера и, возможно, адреса. Все это упорядочено по какому-то принципу. Например, в алфавитном порядке.

Для того чтобы работать с базой данной, компьютерная техника использует которые так и называются - СУБД. Одной из самых известных является средство от Oracle. Что это за системы и как они работают, будет рассказано далее.

Особенности

Главное, что характеризует продукты от этой компании, - это безопасность, надежность, удобство и очень хорошая производительность. Но это не все характеристики, позволяющие им уверенно лидировать на рынке систем управления БД. Так как информационные технологии развиваются очень быстро, от СУБД требуется не только классический набор функций, которые позволяют хранить и обрабатывать данные. Компания Oracle старается успевать за потребностями и наделяет свои продукты новыми возможностями, ломая тем самым стереотипы.

Что такое СУБД?

Oracle - что это? Современная СУБД - это очень серьезный комплекс, который дает возможность разрабатывать программы, обладающие невероятной сложностью. Ну а ядром его является сама база данных, в которой хранится информация. И ее количество, благодаря предоставляемым функциям масштабирования, может быть безграничным. С этими данными может работать сколько угодно пользователей, если это позволяет мощность И эффективность при этом нисколько не падает. Даже если число пользователей резко увеличится, все останется стабильным.

Механизмы, обеспечивающие масштабирование, в СУБД от Oracle последних версий дают возможность сколько угодно увеличивать скорость и мощность сервера, а также приложений. Это обеспечивается за счет добавления новых узлов кластера. Остановка запущенных приложений при этом не нужна. Старые приложения, которые были разработаны для архитектуры, состоящей из одной машины, переделывать не приходится. В случае, когда возникают неполадки с отдельным узлами кластера, приложение все равно продолжает свою работу.

То, что в систему управления встроена виртуальная машина Java и полная поддержка всех серверных технологий, привело к тому факту, что сегодня Oracle - это стандарт СУБД для всей всемирной паутины.

Поддержка всех платформ

Многоплатформенность является еще одним фактором, благодаря которому продукт имеет огромный успех. СУБД поставляется для любой операционной системы, существующей на рынке в данное время. И работа с ней на всех платформах не вызывает никаких проблем, так как везде все одинаково хорошо.

Так, тем компаниям, которые только начинают работать с продуктами компании, нет никакой необходимости изменять свое привычное сетевое окружение. Есть только малое количество отличий в работе системы управления БД, которые обусловлены особенностями конкретной операционной системы. А в целом можно сказать об Oracle, что это удобная, надежная и безопасная система.

Переход к новым версиям

Миграционная политика компании не вызывает никаких вопросов. Так как процедура перехода с устаревшей версии базы данных на более новую - трудоемкий процесс из-за тестирования работы существующих программ в обновленном окружении, компания, выпуская новые версии продуктов, большое внимание уделяет совместимости старых и новых версий. Это делает переход полностью безболезненным. Если нужно перенести информацию из СУБД других производителей в СУБД от Oracle, компания может предложить бесплатные инструменты для реализации сей процедуры. Это средство обладает дружелюбным пользовательским интерфейсом и поможет пошагово выполнить всю процедуру переноса данных.

Версии, которые выходят в последнее время, очень просты в своей установке. Первоначальная установка также не вызывает затруднений. Под конкретную задачу возможности специальных настроек тоже увеличились. И с их помощью можно добиться потрясающих результатов при работе с хранилищем информации.

Версии

От Oracle поставляется в четырех различных вариантах, среди которых имеется даже облегченная мобильная версия, в первую очередь предназначенная для маломощных настольных компьютеров. Но при этом каждый вариант сервера основывается на одном и том же программном коде и идентичен своими функциями с другими. Могут различаться лишь некоторые опции, которые являются доступными только для определенной версии и не включены в другой вариант системы управления.

Enterprise Edition

Издание Enterprise является полнофункциональной СУБД. Ее возможности ограничиваются только аппаратными характеристиками. В этой версии, по сути, имеются все самые новые разработки, отвечающие за безопасное хранение, обработку и представление данных пользователю. Достаточно широкий круг возможностей масштабирования обеспечивает беспрерывную работу серверов баз данных круглосуточно, ежедневно, все дни в году. Хорошо развиты и функции резервного копирования. С их помощью можно полностью избавиться от риска потери очень важной информации.

Standard Edition

Что такое Oracle: стандартное издание? которая обладает немного урезанными возможностями в сравнении с предыдущей версией. И это находит отражение в стоимости. Эта версия устанавливается на серверы, которые поддерживают только до четырех процессоров. Данный вариант - это самое лучшее решение для того, чтобы развернуть информационную систему в небольшой организации, рабочей группе или одном подразделении крупного предприятия.

За счет того что используются средства обработки распределенного типа и данные тиражируются, СУБД может быть использована при поддержке работы в таких организациях, которые имеют множество филиалов, удаленных территориально.

Personal Edition

Персональная версия СУБД Oracle - база данных, предназначенная для одного пользователя. Ее используют в целях обучения и при разработке и использовании программ для классических версий операционной системы от «Майкрософт». Этот вариант включает все возможности версии Enterprise. Но для операционной системы Windows 95 и 98 они ограничены из-за невозможности их реализации, так как старые платформы многого не умеют.

Lite Edition

Версия Lite - это самый облегченный, мобильный вариант системы управления базами данных, который позволяет проводить синхронизацию информации, хранящейся на слабых компьютерах и мобильных устройствах с корпоративной базой данных. Доступ к ним обеспечивается при помощи стандартного интерфейса. Это позволяет делать программы обычными средствами разработки.

Итак, можно сказать, что виртуальная машина Java и Oracle - это очень просто. С помощью этой связки можно управлять огромными базами данных с огромным комфортом, а главное - безопасно. СУБД Oracle - что это за программа? После вышесказанного такой вопрос должен отпасть. Это лучший выбор как для серьезных организаций, так и для мелких фирм.

К слову, знание данной технологии - это огромный плюс в копилку соискателя должности программиста. В требованиях к вакансиям часто указывается знание Java, Oracle. Что это значит? Все разработчики так или иначе связаны с базами данных, потому что все программы работают с этими самыми данными.