工控机JVM启动参数堆大小的设置建议

由于工控机上的内存一般都不大,多为2G或4G,为了延长寿命,通常会把虚拟内存关掉,而操作系统会用掉一半的内存,那么能够给应用程序使用的内存就很小了。

其实只运行一个JVM的情况下,JVM会适应操作系统而自动调整堆大小,所以正常2GB以上的内存即使安装64位Win10也没有问题。但是如果还需要使用多个其他的辅助程序的情况下,JVM浪费内存的毛病就可能会导致系统不正常。工控机经常会安装一些辅助程序,比如SQL Server社区版、内网穿透客户端、VPN客户端,这些应用都需要消耗一些内存,JVM随机浪费内存的情况就会导致不可预测的内存不足故障。

工控机上的JVM面临的主要问题是内存浪费,而响应速度及吞吐量则不需要很高。需要高响应速度的场景一般会使用PCI扩展板,把命令发送给扩展板上的FPGA或ARM芯片处理,主处理器本身不需要快速反应。

工控机上启动JVM的命令建议为:

start javaw -Xms0 -Xss128k -XX:+UseG1GC -XX:+UseStringDeduplication -Dfile.encoding="UTF-8" -jar "abc.jar"

-Xms0代表初始大小0B,如果没有此参数,JVM会浪费大量内存,直到达到默认的或设定的-Xmx参数值。使用此参数可以节省内存。实际上不一定要设置成0,因为堆大小不可能是0的。可以设置-Xms1m也是差不多的效果。-Xms1m代表1MB的初始堆内存。工控机上的软件大约也会占用32MB的堆空间,所以小于32MB的设置都是一样的效果。

-Xss128k代表默认栈空间128kB,对于一些具有大量递归操作的程序,还需要加大。如果不使用递归,128kB是比较合适的。

-XX:+UseG1GC代表采用新的G1垃圾回收器。据说在JRE1.8默认还不是G1垃圾回收器,但高版本就不需要指定此参数了。

-XX:+UseStringDeduplication。据说是用于处理重复字符串的,我的程序里面字符串比较多,但用了这个以后也没感觉有什么变化。估计是我的程序里大量使用intern,所以没什么重复字符串。

-Dfile.encoding="UTF-8"是指JVM内部的字符集默认采用UTF-8。不加此参数时在中文版Windows中默认采用GBK。如果你的程序内部完全没有指定局部的字符集,而且又和C++程序要进行字符串的交换,那么建议改成-Dfile.encoding="GBK"。使用UTF-8的好处是处理http的时候更方便,多数http连接是基于utf-8字符集的。对于需要和C++交换字符串的部分,建议在程序内直接传入指定字符集"GBK",不要用默认值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值