Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / javafx 2.2 и heap space / 15 сообщений из 15, страница 1 из 1
25.08.2012, 23:36:49
    #37930482
J2SE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javafx 2.2 и heap space
Добрый день.
Сделал небольшую программулину у неё есть хидер (header.fxml) - в нём TabPane по акшену в центр вставляются разные fxml В контроллерах при инициализации вставляется TableView и заполняется. Попереключав несколько раз табы вывалится Java heap space, если же таблицы не заполнять данными то все нормально...

Попробую пример привести не большой.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
HeaderController.java
final Tab tab = new Tab(department.getDepartmentName());
       tab.setOnSelectionChanged(new EventHandler<Event>() {
          @Override
            public void handle(Event event) {
                 if (tab.isSelected()) {
                     getInstance().setCenter(getFxml("/resources/center.fxml"));
                 }
             }
        });


CenterController.java
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
      departmentName = new TableColumn("Department");
      ordersTableColumnPersonName.setCellValueFactory(new PropertyValueFactory("department_name"));
      tableView().getColumns().add(departmentName);
      tableView().setItems(FXCollections.observableList(myList));
}




Вообщем как-то так, помогите избавиться от утечек памяти. Благодарю заранее.
...
Рейтинг: 0 / 0
26.08.2012, 00:35:09
    #37930508
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javafx 2.2 и heap space
Ну сначала надо найти причины - для этого jvisualvm в руки и вперед. Если сами не сможете, вылаживайте heap сюда, тут есть люди которые могут помочь. На вскидку - кэш какой-нибудь, actionListenerы часто текут и тд
...
Рейтинг: 0 / 0
26.08.2012, 03:20:08
    #37930550
J2SE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javafx 2.2 и heap space
забыл ник ,

пытался найти утечку с помощью jvisualvm'ом, но тщетно...
вот heap
заранее благодарен всем откликнувшимся.
...
Рейтинг: 0 / 0
26.08.2012, 10:06:57
    #37930577
Adva
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javafx 2.2 и heap space
J2SE,

у тебя в heap's содержится более 100 Мб в объекте TableCellBehavior и в районе 3 Мб внутри TableView.
Скорее всего ты создаешь каждый раз новый TableView или назначаешь новый листенер или еще что-то в таком духе.
Нужно, создать требуемый объект один раз и впоследствии ссылаться на него.
...
Рейтинг: 0 / 0
26.08.2012, 13:36:57
    #37930695
J2SE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javafx 2.2 и heap space
Adva,

но ведь при засовывании каждый раз fxml контроллер инициализируется по новому, в нем соответственно и таблица и листнеры все по новому..
...
Рейтинг: 0 / 0
28.08.2012, 03:58:13
    #37932773
J2SE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javafx 2.2 и heap space
Посмотрите пожалуйста на структуру, подскажите где я чего накосячил...
...
Рейтинг: 0 / 0
28.08.2012, 03:59:23
    #37932774
J2SE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javafx 2.2 и heap space
если потычить несколько раз разным табам то начнется жор памяти
...
Рейтинг: 0 / 0
28.08.2012, 22:50:30
    #37934476
J2SE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javafx 2.2 и heap space
Что нет ни у кого никаких соображений?
...
Рейтинг: 0 / 0
29.08.2012, 01:19:47
    #37934584
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javafx 2.2 и heap space
По каждому клику на таб у вас формируется новый UI из xml. Почему бы не делать этого если UI уже был загружен?
Если это запланированый процесс, то нужно как-то ещё и выгружать созданные UI, когда они не нужны.
Вот это код что делает?
setCenter(getFxml("/resources/center.fxml"))
и почему?
...
Рейтинг: 0 / 0
29.08.2012, 02:20:07
    #37934605
J2SE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javafx 2.2 и heap space
Blazkowicz,

я не могу понять как выгрузить из памяти UI которые были загружены ранее.

BlazkowiczВот это код что делает?
setCenter(getFxml("/resources/center.fxml"))
и почему?
этот код вставляет в статический BorderPane (в определенное место) новый UI. (рисунок).

BlazkowiczПочему бы не делать этого если UI уже был загружен?
а как это сделать можно? И ничего если у меня много таких fxml файлов, ведь опять все хранить придется в памяти?...
...
Рейтинг: 0 / 0
29.08.2012, 11:25:46
    #37934981
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javafx 2.2 и heap space
Обычно UI для всех табов сразу создаётся.
http://docs.oracle.com/javafx/2/deployment/javafx_javascript.htm#BCEBGCGD
если у вас табов сотни, то это немного странно.
если табы вообще все динамические, то поищите как можно удалять\диспозить лишние.
...
Рейтинг: 0 / 0
29.08.2012, 16:11:08
    #37935699
J2SE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javafx 2.2 и heap space
Blazkowicz ,

табы динамические, так же данные в таблицах динамические.
Подгружать все UI можно, но данные добавленные в таблицу после подгрузки UI уже отображаться не буду (а там нужны достоверные данные).
...
Рейтинг: 0 / 0
29.08.2012, 16:26:50
    #37935737
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javafx 2.2 и heap space
J2SEтабы динамические, так же данные в таблицах динамические.

Для того чтобы поменять в таблице данные не обязательно менять саму таблицу. Вы когда текст в Word правите, он вам на каждую новую букву документ не пересоздаёт?

J2SEПодгружать все UI можно, но данные добавленные в таблицу после подгрузки UI уже отображаться не буду (а там нужны достоверные данные).
Данные отдельно, UI отдельно. Разделите их. Освойте MVC и MVP и жизнь наладиться.
fxml это Layout - расположение компанент, почему оно у вас ещё с какимим-то данными связано?
...
Рейтинг: 0 / 0
29.08.2012, 16:33:24
    #37935748
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javafx 2.2 и heap space
J2SEтабы динамические, так же данные в таблицах динамические.
Подгружать все UI можно, но данные добавленные в таблицу после подгрузки UI уже отображаться не буду (а там нужны достоверные данные).
Вы всё время на каждый клик создаёте новый UI. А где вы его удаляете потом?
...
Рейтинг: 0 / 0
29.08.2012, 18:35:16
    #37936099
J2SE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javafx 2.2 и heap space
Blazkowicz
fxml это Layout - расположение компанент

он с данными не связан, от тех или иных условий данные заполняет контроллер.

BlazkowiczВы всё время на каждый клик создаёте новый UI. А где вы его удаляете потом?
Вы правы он нигде не удаляется от этого и съедает память.
Сейчас реализовал метод который очищает все данные примерно так:

Код: java
1.
2.
3.
4.
5.
public void dispose() {
     table.getColumns().clear();
     table.getItems.clear();
     table = null;
}



т.е. просто занулливаю все объекты, правильный ли такой подход?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / javafx 2.2 и heap space / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]