硬核推荐(java命令的作用是什么?)java的命令行参数怎么提供数据,学java那么久了,对java命令行不了解说得过去?java命令参数详解,java -cp,
where java.exe,首先先来确定一下我们所使用的java文件路径,可以看到我们这里使用的是java17版本的
java -version,当然我们也可以通过这个命令来获取java的版本信息,我这里使用的是Liberica的OpenJDK,这个不用考虑版权哦,可以拿来直接使用的OpenJDK,这里我也推荐大家使用
java -h ,通过这个命令我们将获取java的帮助信息,在这里面显示了java的命令参数的相关信息
除了java -h以外,-help 以及 杠问号 也都可以获取java的帮助信息
既然是java命令,那么就必然少不了jar包,我们这里准备一些jar包,以供java进行使用
刚好我们这边有写好的jar包程序,接下来就使用java来运行吧
首先是这个java -jar 命令,后面跟 jar包的名称,我们就可以执行这个jar包了,这也是每个java程序员都必须要会的,最基础的命令行
这是java jar 启动的java程序的界面,这是使用java swing开发的GUI程序,这个是很简单的哦
java -jar --show-module-resolution ,后面跟你要执行的jar包的路径名,在你回车执行后,它将显示当前执行的jar包所使用的java module,java module 是java9时期推出的模块化技术,是为了让我们在打包的时候能更加方便的瘦身以及减除不必要的类所准备的
在这里我们新建了一个Test.java ,这是我们即将要使用javac命令的第一步,代码是非常简单的打印输出,获取了系统的ABCDEF属性,这个属性是我自定义的
javac Test.java ,使用javac命令我们可以对 Test.java 这个文件进行编译,Dir命令查询 编译后的 class 文件是否存在
通过 -D属性名=属性值,我们可以将属性通过命令行传递到java的内部执行,刚刚我们在java中使用 System.getProperty 获取了ABCDEF的属性值,当下我们在命令行设置了ABCEDF的属性值,可以看到已经打印出来了相关的值
java -Xms1024m -Xmx2048m 通过指定这两个参数,我们可以指定java程序在运行时所使用的内存,提升java程序的速度,以及java程序因为内存不足而导致程序关闭的现象
通过我的观察,java的-Xms 和 -Xmx 参数指定以后,只有下限,没有上限。简单来说就是,你指定了最小内存为10m,最大内存为30m,但是java程序用到的远不止10m,这时候你设置的10m和30m就是无效的
可以看到java程序所占用的内存实际在100m作用,而我们设置的时最小1m 最大3m,这时候我们的设置无效。不过,另外一种情况就不同了
现在大家可以看到,我这边目前指定的最小内存为 2048m,最大内存为 4096,jdk就真真的为了这个输出语句的类分配了2个多G的内存,这是它的下限,也就是说,当我们为java程序指定内存时。如果我们指定的内存小于实际用到的内存,jvm会忽略参数,但会尽量减少内存占用
而如果我们指定的内存大于实际用到的内存,这时候jvm会以最小内存为基准,即使程序用不到那么多的内存,也会直接占用2个G的内存。java真是个耗内存大户啊
这是我们所使用的测试类,里面有获取ProcessID的方法,以便于我们精准的查询当前Java应用程序的进程ID。
那如果不指定内存大小呢,可以看到这个简单的类占用类1GB的内存。我觉得java有些时候有点扯啊,这个类就执行了一个Sleep,之前输出了两个语句,其他的什么都没,却占用了那么多的内存,实在令人费解。
这里我按下ctrl c 中止了程序,可以看到爆红的被中止的程序占用的内存为1.14GB,这就很扯了
我改变了一种策略,java的内存我最小只指定1m 最大指定2m,可以看到这个内存占用从,1.14G直接降到99m,我觉得这是个办法,值得推广。
接下来我们来看看java的垃圾回收,通过使用命令 java -XX:+PrintCommandLineFlags -version 我们可以看到这台电脑的java所使用的垃圾回收器-XX:+UseG1GC ,其实就是G1gc的意思。oracle在jdk9中就将G1变成默认的垃圾收集器,以替代CMS。现在已经是java17了
通过jps命令我们可以查看到,当前电脑上运行的所有java程序,以及它们的process id
jhsdb jmap --heap --pid 3772,通过这个命令我们可以查看堆内存的信息,而在下面的G1 Heap 就是我们所需要的信息
jhsdb jmap --binaryheap --pid 6596 通过这个命令我们可以将堆内存信息输出为.bin格式的二进制信息,可以使用eclipse mat 或者 jhat 等工具进行查看
jhsdb jmap --binaryheap --dumpfile dump.hprof --pid 6596 ,假如添加--dumpfile dump.hprof 参数则会将二进制信息存储到一个名为 dump.hprof的文件之中
jhsdb jmap --pid 6596 ,如果你仅仅指定了--pid 那么将会显示指定java进程当前所使用到的所有的dll文件
通过process hacker 我们可以查看对应的java程序所加载的 modules ,包括我们调用dll模块,这里比如AutoItX3.dll ,都可以显示出来
Java Demo.java 可以直接执行一个java文件,其实现在的java命令已经很强大了,可以直接执行java的源码
通过 java -cp 命令,我们可以加载java的第三方jar包,并执行相应的类,这为我们提供了在命令行执行类文件,和使用第三方库的方法,目前java命令已经支持直接执行java文件,这意味着我们无需再经过javac编译的那一步了
另外我想要在这里表达的是,双破折的--classpath 参数在windows系统上是不受支持的,因为你无法使用这个参数,java会报错,而java -cp 或者 -calsspath 都是可以正常执行的
最后就是关于 -Djava.ext.dirs= 这个参数,在JDK9以后,就不再支持了,现在网络上充斥着关于这个参数的用法,但是它早已无法使用,目前比较可靠的方式就是实用 -classpath 或者 -cp 参数来加载第三方的jar包。以上就是关于java命令行的参数介绍,相信会对很多java学习者有帮助,如果对你有帮助,请点赞评论关注我
本文系作者 @河马 原创发布在河马博客站点。未经许可,禁止转载。
暂无评论数据