Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将SWT应用程序编译为本机应用程序的利弊_Java_Swt_Native - Fatal编程技术网

Java 将SWT应用程序编译为本机应用程序的利弊

Java 将SWT应用程序编译为本机应用程序的利弊,java,swt,native,Java,Swt,Native,谁成功地将Java业务项目编译为本机(例如,使用GCJ或Excelsior JET)并能分享其优缺点 我认为有以下优点: 速度更快(用户的机器不需要将字节码编译为本机代码) 黑客攻击的可能性较小 不需要单独的Java运行时 还有以下缺点: 每个平台都需要一个特殊的构建来支持(但SWT已经需要了) 反射之类的功能可能不起作用 更难找到bug(stacktraces呢) 我用Excelsior JET编译了一个 这是很久以前的事了,从那时起,他们极大地改进了这个工具,但是JVM的速度也相应地提

谁成功地将Java业务项目编译为本机(例如,使用GCJ或Excelsior JET)并能分享其优缺点

我认为有以下优点:

  • 速度更快(用户的机器不需要将字节码编译为本机代码)
  • 黑客攻击的可能性较小
  • 不需要单独的Java运行时
还有以下缺点:

  • 每个平台都需要一个特殊的构建来支持(但SWT已经需要了)
  • 反射之类的功能可能不起作用
  • 更难找到bug(stacktraces呢)

我用Excelsior JET编译了一个

这是很久以前的事了,从那时起,他们极大地改进了这个工具,但是JVM的速度也相应地提高了。内存使用率不算太高,但如今即使是低端笔记本电脑也有GB的RAM,尽管这可能会让我们厌恶节俭的感觉,但如果你的小型GUI应用程序在一个至少50倍于此容量的盒子上使用20MB内存,那真的没什么关系,特别是当你考虑到在这种环境下开发的优势时

静态编译的主要原因是启动时间和内存使用。JET给了我这些,但是以一个长的构建周期为代价,由于动态加载与静态编译(我相信他们已经改进了很多)和特定于平台的构建(您必须在Windows上构建Windows发行版)相冲突而导致的类缺失。最终摩尔定律和JVM速度使得这些折衷不值得,我放弃了这个构建选项

FWIW、stacktraces和反射都很好,如果您确保编译器知道没有静态引用的类,那么动态类加载也很好。如果您担心反编译,那么,模糊处理程序可能会给您带来同样多的好处

关于喷气式飞机和制造它的人,我除了说些好话外,别无其他。如果你需要的话,JET是一款可靠的产品。

我可以想出两个缺点

缺点:

  • 编译应用程序需要时间,这会增加软件的速度 开发成本。Java最初使用解释器来运行代码 这更容易开发
  • 它没有Java原始调试器来调试您的软件。你 需要使用其他类似GDB的工具,这要复杂得多。再一次, 增加开发成本

  • 您可以在同一个构建中拥有所有SWT片段-如果您使用OSGi作为框架。。。GCJ和Excelsior JET也可以实现这一点。1。为什么不编译一次(部署时)而不是在每个用户的机器上(JRE)?2.我们不调试已编译和模糊处理的应用程序,我们在IDE中调试它而不进行模糊处理。