我在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分析报告
谢谢