我写了一段代码,让字母在我写的时候出现并飞行。这个问题消耗了大量的内存。
我已经优化了一点
路径
对象并更新其参数。但是它仍然使用大量的内存,所以有什么想法来降低它的内存利用率吗?
提前致谢。
package sample;
import javafx.animation.PathTransition;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.LineTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafx.util.Duration;
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
Pane root = new Pane();
Scene scene = new Scene(root);
root.setCache(false);
primaryStage.setTitle("Hello World");
primaryStage.setScene(scene);
Path path = new Path();
root.widthProperty().addListener((observableValue, oldSceneWidth, newSceneWidth) -> SetPathElements(path, root));
root.heightProperty().addListener((observableValue, oldSceneWidth, newSceneWidth) -> SetPathElements(path, root));
Duration duration = Duration.millis(1000);
scene.setOnKeyPressed(event -> {
System.gc();
Text textNode = new Text(event.getText());
textNode.setFont(Font.font(50));
textNode.setFill(Color.ORANGE);
root.getChildren().add(textNode);
PathTransition pathTransition = new PathTransition();
pathTransition.setDuration(duration);
pathTransition.setPath(path);
pathTransition.setCycleCount(1);
pathTransition.setNode(textNode);
pathTransition.setOnFinished(event1 -> {
root.getChildren().remove(textNode);
pathTransition.setNode(null);
pathTransition.setPath(null);
textNode.setFont(null);
textNode.setFill(null);
});
pathTransition.play();
});
primaryStage.show();
}
private void SetPathElements(Path path, Pane root) {
path.getElements().clear();
double w = root.getWidth();
double h = root.getHeight();
path.getElements().add(new MoveTo(w / 2, h));
path.getElements().add(new LineTo(w / 2, -40));
}
}
操作系统:Arch Linux 64位平台:英特尔i7-第三代,8 GB内存IDE : Intellij JDK : 1.8.0_102
升级到Mesa 13.0.4并不能解决该问题,但有一个解决方法。
如果程序是用-Dprism运行的。order=j2d
或-D棱镜。order=sw
VM参数,JavaFX呈现引擎不使用OpenGL,并且不会发生泄漏。当然,在这种情况下,应用程序性能会显著降低。
用Mesa的JavaFX内存泄漏
更新(2016年11月)
此问题似乎已在较新版本的Mesa和/或X.org.更新到Mesa 13.0和X.org
相关链接:
本文向大家介绍详解Android性能优化之内存泄漏,包括了详解Android性能优化之内存泄漏的使用技巧和注意事项,需要的朋友参考一下 综述 内存泄漏(memory leak)是指由于疏忽或错误造成程序未能释放已经不再使用的内存。那么在Android中,当一个对象持有Activity的引用,如果该对象不能被系统回收,那么当这个Activity不再使用时,这个Activity也不会被系统回收,那这么
我尝试用一个大表(大约一万条记录)中的记录填充JdbcRowSet。我尝试了两个变体(参见下面的代码): 创建连接对象,使用JdbcRowSetImpl(connection)实例化,在循环中执行查询。 使用JdbcRowSetImpl(DriverManager.GetConnection(“jdbc:....”)实例化,在循环中执行查询。 第一个变体会导致内存泄漏,直到堆满为止。第二个变体没有
我有一个JavaFX应用程序,当按下X按钮时,它可以最大限度地减少对托盘的访问。我一直在通过VisualVM监控应用程序的内存趋势。 奇怪的是,当应用程序打开或最小化到任务栏时,内存总是会被重新分配到最初使用的内存。但是,当它最小化到托盘()时,
如何优化ReactNative应用的内存使用? 检查组件之间或者组件与其他对象之间是否存在循环引用。循环引用会阻止垃圾回收器正确回收内存。
我有一个在Tomcat7上运行的web应用程序的问题。 当我尝试重新启动web应用程序时,我在servlet内部创建的线程打开的端口仍然是打开的。 “http-bio-8080-acceptor-0”后台进程prio=10 tid=0x00007F4ED4206000 nid=0x71f0 runnable[0x00007F4ECC78F000]java.lang.thread.state:run
我在Tomcat中得到了threadlocal内存泄漏错误,我正在使用ThreadPool,但在我的WebApp中没有threadlocal的实现。 严重:web应用程序[/mywebapp]创建了一个ThreadLocal,其键类型为[org.a pache.http.impl.cookie.dateformatholder$1](值为[org.apache.http.imp l.cookie.