【发布时间】:2023-03-26 01:28:01
【问题描述】:
一旦 Java Swing 应用程序从 Java 6 32 位迁移到 Java 7 32 位更新 11,我们将面临性能问题。谁能提供一些线索?
应用程序使用 Java Web-start 技术,服务器是 Tomcat 7。客户端应用程序正在消耗 1GB 内存,因此屏幕冻结。
我们正在交换序列化的对象,代码如下:
Object object = connection.sendCommand(command); // exchanging serialized object
public class ConnectionImpl implements Connection {
public Object sendCommand(Command command) throws Exception {
URL url = new URL(System.getProperty("serverUrl"));
URLConnection connection = url.openConnection();
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setUseCaches(false);
oos = new ObjectOutputStream(new BufferedOutputStream(connection
.getOutputStream()));
oos.writeObject(command);
oos.flush();
InputStream inputStream = connection.getInputStream();
ZipInputStream zip = new ZipInputStream(inputStream);
if (zip.getNextEntry() != null) {
ois = new ObjectInputStream(zip);
object = ois.readObject();
}
zip.close();
}
}
// The serialized class
public class CommandImpl implements Command, Serializable {
private String serviceName;
private String methodName;
private Map<String, Object> parameterMap;
// followed by getter & setters
}
- 客户端计算机: Windows 7 32 位,Java 7 更新 11 32 位
- 服务器机器: Windows 64 bit 2008 R2 Enterprise Server,Java 7 update 11 64 bit
代码没有变化,只是更新了JVM。
我使用 Java VisualVM 为 JDK 1.6 和 JDK 1.7 拍摄了内存快照,以下是包含快照的 rar 文件的链接:
Memory Snapshots using Java VisualVM Heap Dump using Java VisualVM
NetBeans IDE 提供了将代码从 Java 6 迁移到 Java 7 的选项。以下是与此相关的链接:
https://netbeans.org/kb/docs/java/editor-inspect-transform.html#convert
将整个源代码从 Java 6 迁移到 Java 7 不会出现任何问题吗?或者有人觉得这可能会产生一些问题?如果我们这样做,我们是否可以在某种程度上解决这个性能问题?
【问题讨论】:
-
"谁能提供一些线索"
-
另外:哪些组件会导致性能下降?你能把它缩小到只有某些组件的屏幕吗?
-
1GB内存是不是比以前多了?如果是这样,您是否也更改为 64 位 JVM?
-
您是否尝试过使用 Java 7 重新编译应用程序?
-
@Adrian 是的,我们已经使用 java 7 update 11 (64 bit) 进行了遵守
标签: java swing memory java-web-start