0

我在JavaFx 2x中创建了表视图,它有超过 10K 行,每行有 20 列,每当表视图加载 Java 堆时,旧代内存都在增加,并且没有释放。在加载同一张表 2-3 次后(刷新按钮和每次加载表之前清除所有下面提到的引用)。我的应用程序冻结或进入无响应状态,我尝试让所有选项清除内存中的引用,但没有运气

  @FXML
        private TableView<PersonModel> personlicense;

        private void initTable(){
                    licState
                                .setCellValueFactory(new Callback<TableColumn.CellDataFeatures<PersonModel, String>, ObservableValue<String>>() {

                                    @Override
                                    public ObservableValue<String> call(
                                            final CellDataFeatures<PersonModel, String> cdf) {
                                        return cdf.getValue().iconStateProperty();
                                    }
                                });

                        colCompliance
                                .setCellValueFactory(new Callback<TableColumn.CellDataFeatures<PersonModel, String>, ObservableValue<String>>() {

                                    @Override
                                    public ObservableValue<String> call(
                                            final CellDataFeatures<PersonModel, String> cdf) {
                                        return cdf.getValue().complianceDetailStrProperty();
                                    }
                        });
        }
        priavte void populate(){
                final ObservableList<PersonModel> itemsMultiTable = personlicense.getItems();
                    if (!itemsMultiTable.isEmpty()) {
                                itemsMultiTable.removeAll(itemsMultiTable);
                                clean();
                    }
                    for (final Person personObj : selectedPersons) {                    
                                final PersonModel LicModel = personObj.getLicense();
                                itemsMultiTable.add(LicModel);
                    }

        }
     private void clean(){
        Class tcb=TableCellBehavior.class;
            try{
                Method anchormethod=tcb.getDeclaredMethod("setAnchor",TableView.class,TablePosition.class);
                anchormethod.setAccessible(true);
                anchormethod.invoke(null,resumeTable,null);
            }
            catch(Throwable t){
                throw new RuntimeException(t);
            }
            personlicense.setFocusModel(null);
            personlicense.setOnMouseClicked(null);
            personlicense.setSelectionModel(null);
            personlicense.getColumns().clear();
            personlicense.getItems().clear();
    }

我在这个论坛看到一些帖子建议升级到java8,但我的客户不愿意升级

是否有任何可能的解决方案来释放内存...?

MAT分析低于 MAT分析报告

谢谢

4

0 回答 0