JVM那些我们不知道的参数
前言
还是我的Wsocks(不过现在改名SuperEngine了),在兜兜转转了许久之后还是回到了最初的起点。要什么Kotlin Native,要什么Go,要什么GraalVm,都是垃圾,原始的才是最好的。
客户端之痛
JVM的客户端为什么那么少? 我们往往能看到 .net系列,C++甚至是go的客户端但是为什么没有java的客户。个人觉得原因主要在启动速度慢和内存占用高这两个地方。对于服务端来说JVM的启动时间可以忽略不计,而默认的内存策略也不会有太多问题,但是客户端上大家都想要小巧玲珑的类型,JVM就有些不合适了。
JVM内存参数
启动速度是没办法变快了,但是内存还是有很多可以调整的地方。
最大堆内存
1 |
|
这是第一个可以加的内存参数,也是最没用的一个。他能限制堆的大小,让gc触发的更加频繁一点,但是往往我们的启动内存就已经超过100M了,这里的设置根本没有效果。
冗余度控制
1 |
|
这行的效果非常好,默认的两个值似乎是50和70,这样内存的浪费就太多了。把两个值调到10之后整体的内存占用一下就少了很多。
最大直接内存
1 |
|
如果有用像netty这样的框架,那这个设置就比较有用了。
nio缓存
1 |
|
跟上面一样,如果使用了nio或者netty的东西,加上这个参数之后可以限制缓存的大小。
小结
JVM的许多默认设置都是以空间换时间的策略,在服务端上这样的策略当然有利于节约CPU资源,但是对于客户端程序来说,本身所需要的CPU就不高,这样的策略在用户看来就是程序占用了大量的内存。