Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Оптимизация кода для вывода категорий.


Автор: zhazhah 14.8.2010, 10:50
Здравствуйте. У меня есть таблица с категориями примерно с такой структурой.

Код
category
-------------------
id parent name 
1  0      Java
2  1      Jsp
3  1      Flex
-------------------

На самом деле в таблице более 10 тысяч записей и со временем станет больше.

Эта программа выведит таблицу в таком виде:
Java / Jsp
Java / Flex

Код

private void Tree(int id) {
        if (id == 0) {
            return;
        }

        try {
            stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("select * from `category` where `id`=" + id + " limit 1;"); // жрёт много памяти

            while (rs.next()) {
                Tree(rs.getInt("parent"));
                parent = rs.getString("name");
                name += parent + " / ";
            }
        } catch (SQLException e) {
            logger.error(e);
        }
    }


Казалось бы все отлично работает. Но мне необходимо вызывать
Tree(n); Более 10 тысяч раз чтобы записать результат метода в 
другую таблицу но генерится java.lang.OutOfMemoryError: Java heap space из за 8 строки.
Есть ли способ оптимизировать код чтоб он не жрал столько памяти.
Или может быть есть другой алгоритм для работы с категориями.

Автор: dorogoyIV 14.8.2010, 14:53
метод рекурсивный, возможно зацикленный

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)