Небольшая предыстория приложения, о котором я собираюсь рассказать в следующих нескольких строках:
XYZ - это приложение RCP Eclipse Workbench для маскировки данных: вы задаете ему столбец исходной таблицы и столбец целевой таблицы, оно будет применять преобразование (шифрование / тасование / и т.д.) и копировать данные строки от исходной таблицы к целевой таблице. Теперь, когда я маскирую n таблиц одновременно, этим приложением запускаются n потоков.
Вот вопрос:
Я столкнулся с производственной проблемой при первом запуске вышеуказанного приложения. К сожалению, у меня нет логов, чтобы добраться до рута. Тем не менее, я попытался запустить это приложение в тестовом регионе и сделать стресс-тест.
Когда я собрал файлы .hprof и провел их через анализатор (yourKit), я заметил, что объекты oracle.jdbc.driver.T4CPreparedStatement сохраняют кучу. Анализ также говорит мне, что один из моих классов содержит ссылку на этот подготовленный объект и, следовательно, n потоков имеют n таких объектов. T4CPreparedStatement, похоже, имел массивы символов: lastBoundChars и bindChars, каждый из которых имеет размер char [300000].
Итак, я немного исследовал (google!), Получил ojdbc6.jar и попытался декомпилировать T4CPreparedStatement. Я вижу, что T4CPreparedStatement расширяет OraclePreparedStatement, который динамически управляет размером массива lastBoundChars и bindChars.
Итак, мои вопросы здесь:
- Вы когда-нибудь сталкивались с такой проблемой, как
это?
- Знаете ли вы значение
lastBoundChars / bindChars?
- Я новичок в профилировании, как и вы
думаю, я не делаю это правильно? (Я
также запустил hprofs через MAT -
и это было основным выявленным
вопрос - так что я не думаю, что
может быть не так?)
Я нашел нечто подобное в Интернете здесь:
http://forums.oracle.com/forums/thread.jspa?messageID=2860681
Ценю ваши предложения / советы.