首页 > 其他 > 详细

-version的简单解释

时间:2019-06-07 21:59:31      阅读:71      评论:0      收藏:0      [点我收藏+]

不出意外这既是6月的第一份文章也是最后一份文章,因为到期末要考试了

目前本机使用JDK11和1.8,默认是1.8,因此输入java -version会是这样

java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

相信大家都对1前两行秒懂,但个人对最后一行的Server VMmixed mode字眼表示不太理解,因此找了一下相关的JVM资料

1.关于Server和Client

两者有不同的JIT编译器应用于相同的运行时环境

Client VM是专门为快速启动和小内存(small footprints)而优化的,像GUI就很适合

而Server VM是专门为高性能应用而优化的,如服务器应用

其他的话有编译的方法(compile policy),堆的默认值(heap defaults),内联方法(inline policy)

比方说,Client VM的编译器没有采用复杂的优化技术,因此才能快速启动,反之,Server VM采用大量复杂的优化,导致开始时响应很慢,但性能牛逼

同时Server JVM的默认堆和最大堆都比Client的大

命令如下java -XX:+PrintFlagsFinal -version 2>&1 | grep -i -E ‘heapsize|permsize|version‘

一些可能有用的信息↓

https://docs.oracle.com/javase/8/docs/technotes/guides/vm/server-class.html

https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/parallel.html#sthref30

怎么切换默认的VM?不知道hhh

查了一下可以通过java -client -version来切换,但实机测试过并无效果。。。

2.关于各种mode

JVM可以用-Xint -Xcomp -Xmixed指定相应的模式(解释interpreted、编译compiled、混合)

简单的总结是
解释器模式就是执行字节码
编译器模式是全部转换本地代码
混合模式是在热点方法使用本地代码,而不常使用的就仅执行解释(HotSpot由来)

前两者显然是编译期就能完成的事情(javac),而后者是运行期的事情就归JIT来管了,这部分比较硬核有待恶补

-version的简单解释

原文:https://www.cnblogs.com/caturra/p/10989290.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!