您的位置 首页 java

JDK bin目录下常用命令简介

经过一天的学习,小弟对 jdk 的bin目录下常用的命令做个总体的简单的总结,为今后更深入的去学习 jvm 底层、jvm调优、垃圾回收、线上问题处理等打下夯实的基础。

示例代码

 public class Test CMD  {
    public  static   void  main(String[] args) {
        System.out.println(" Hello World !");
    }
}  

以下操作均在 IDEA 的命令终端 Terminal 下进行演示。

1.【 javac

将一个java源文件编译成 class文件

 E:\ IDE aworkspace\MyStudyProject\src\cn\com\study>javac TestCMD.java  

在study包下可以看到生成了TestCMD.class字节码文件(十六进制的),当然也可以直接运行在项目的out文件夹中也会看到相关 字节码 文件。该字节码中定义了 魔数 信息、版本号、常量池等信息,感兴趣的同学可以深入的了解一下。当然如果用javap反汇编后再阅读会轻松的多。

2.【java】

运行字节码文件、查看版本信息等

 E:\ideaworkspace\MyStudyProject\src>java cn.com.study.TestCMD
Hello World!
  
E:\ideaworkspace\MyStudyProject\src>java -version
 java  version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)  

3.【 jar

打包、更新、解包java应用程序。

 //将cn目录创建为一个jar文件  c:创建   v:打印输出    f:指定的jar文件
E:\ideaworkspace\MyStudyProject\src>jar cvf my.jar cn
//往my.jar 里添加other包
E:\ideaworkspace\MyStudyProject\src>jar uf my.jar other
//解压jar
E:\ideaworkspace\MyStudyProject\src>jar xvf my.jar  

比如:在实际项目中可以写一个工具包,然后打包成jar,在别的项目直接依赖即可。

4.【 javadoc

JDK定义了如@author、@version、@since、@see、@link、@code、@param、@return、@ exception 、@throws等文档标记.javadoc是JDK提供给程序员的一个文档生成工具。

5.【javap】*

反汇编命令,这个命令非常重要,在今后去学习字节码指令集时会经常使用它去反汇编class文件,方便我们从底层查看代码的执行过程。

 E:\ideaworkspace\MyStudyProject\src\cn\com\study>javap -c TestCMD.class
Compiled from "TestCMD.java"
public class cn.com.study.TestCMD {
  // 构造方法 
  public cn.com.study.TestCMD();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  //main方法
  public static void main(java.lang.String[]);
    Code:
       0: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
       3: ldc           #3                  // String Hello World!
       5: invokevirtual #4                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
       8: return
}

E:\ideaworkspace\MyStudyProject\src\cn\com\study>javap -help
用法: javap <options> <classes>
其中, 可能的选项包括:
  -help  --help  -?        输出此用法消息
  -version                 版本信息
  -v  -verbose             输出附加信息
  -l                       输出行号和本地变量表
  -public                  仅显示公共类和成员
  -protected               显示受保护的/公共类和成员
  -package                 显示程序包/受保护的/公共类
                           和成员 (默认)
  -p  - private              显示所有类和成员
  -c                       对代码进行反汇编
  -s                       输出内部类型签名
  -sysinfo                 显示正在处理的类的
                           系统信息 (路径, 大小, 日期,  MD5  散列)
  -constants               显示最终常量
  -classpath <path>        指定查找用户类文件的位置
  -cp <path>               指定查找用户类文件的位置
  -bootclasspath <path>    覆盖引导类文件的位置  

6.【 jdb

断点调试,IDE的断点可以本地调试生产环境代码,但是却不能在线调试,这时候就可以使用jdb了。具体用法感兴趣的同学可以实操一下。

7.【jps】

JVM 进程状态工具。

 //查看进程号
E:\ideaworkspace\MyStudyProject\src\cn\com\study>jps
10400
10848 Jps
10916 TestCMD
11660 Launcher

//查看jvm参数信息
E:\ideaworkspace\MyStudyProject\src\cn\com\study>jps -v
10400  -Xms128m -Xmx750m -XX:ReservedCodeCacheSize=240m -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -ea -Dsun.io.useCanonCaches=fal
se -Djava.net.preferIPv4Stack=true -XX:+HeapDumpOn OutOfMemory Error -XX:-OmitStackTraceInFastThrow -javaagent:E:\idea\IntelliJ IDEA 2017.1.2\bi
n\JetbrainsCrack-2.6.2.jar -Djb.vmOptions File =E:\idea\IntelliJ IDEA 2017.1.2\bin\idea64.exe.vmoptions -Xbootclasspath/a:E:\idea\IntelliJ IDEA
2017.1.2\lib\boot.jar -Didea.jre.check=true -Didea.paths.selector=IntelliJIdea2017.1 -XX:ErrorFile=C:\Users\Administrator\java_error_in_idea_%
p.log -XX:HeapDumpPath=C:\Users\Administrator\java_error_in_idea.hprof  

8.【jstat】

jstat用于查看运行的 JVM 实例的运行数据。在实际工作中经常用它获取垃圾回收情况,方便进行故障的排查、jvm调优等操作。

 //比如在linux系统中通过top、或者查找 tomcat 进程获取到 PID 
//查看PID为31615这个进程的类加载信息,每1秒查看一次,总共查看3次,一致输出的话次数写成-1
jstat -class 31615 1000 3

//编译信息
jstat -compiler 31615

//GC信息 每1秒查看一次,总共查看3次
jstat -gc 31615 1000 3  

9.【jstatd】

远程监控。

 jstatd同样用于监控JVM实例,不同于jstat的是它通过RMI方式,
需要在被监控的java.home的bin下添加一个策略文件jstatd.all.policy:
grant codebase "file:${java.home}/../lib/tools.jar" {
   permission java.security.AllPermission;
};

然后进入jdk的bin目录输入:
jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi. Server .hostname=ip地址 -p 端口号
就启动了jstatd,下面就可以通过jvisualvm通过RMI的方式监控这台机器上的全部JVM实例。  

10.【jvisualvm】

jvisualvm是JDK提供的图形化jstat工具。可以监控本地的JVM实例,也可以通过JMX或RMI的方式监控远程的JVM实例。在这个工具当中可以获取到jvm实例的线程、类、堆内存等信息,通常处理线上问题时,我们可以通过jmap命令保存当前堆栈信息,然后导入该工具进行问题排查。

11.【jinfo】

jinfo用于打印特定JVM实例的配置信息。如果是运行在64位机器上,需要加一个-J-d64选项

 //比如我想查看29869这个进程运行的基本配置信息
jinfo 29869

//如果仅仅想查看JVM的 系统变量 
jinfo -sysprops 29869  

12.【jmap】*

jmap用于查看对象内存占用情况或指定的JVM实例堆内存情况。如果是JVM是运行在64位机器上,则需要添加-J-d64选项。通常我们在对线上问题排查、jvm调优等操作时都会用到此命令。

 //比如先通过jps查找当前进程号
E:\ideaworkspace\MyStudyProject\src\cn\com\study>jps
10400
10912 Launcher
11240 TestCMD
9916 Jps

//使用jmap查看堆信息
E:\ideaworkspace\MyStudyProject\src\cn\com\study>jmap -J-d64 -heap 11240
Attaching to process ID 11240, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.151-b12

using thread-local object allocation.
Parallel GC with 4 thread(s)

//堆配置信息 jdk1.8
Heap Configuration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 2069889024 (1974.0MB)
   NewSize                  = 42991616 (41.0MB)
   MaxNewSize               = 689963008 (658.0MB)
   OldSize                  = 87031808 (83.0MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

// 堆内存 使用信息
Heap Usage:
PS Young Generation
Eden Space:
   capacity = 32505856 (31.0MB)
   used     = 3251768 (3.1011276245117188MB)
   free     = 29254088 (27.89887237548828MB)
   10.003637498424899% used
From Space:
   capacity = 5242880 (5.0MB)
   used     = 0 (0.0MB)
   free     = 5242880 (5.0MB)
   0.0% used
To Space:
   capacity = 5242880 (5.0MB)
   used     = 0 (0.0MB)
   free     = 5242880 (5.0MB)
   0.0% used
PS Old Generation
   capacity = 87031808 (83.0MB)
   used     = 0 (0.0MB)
   free     = 87031808 (83.0MB)
   0.0% used

1782 interned Strings occupying 179864 bytes.

  

13.【jhat】

jhat和 jmap配合使用,通过jmap生成的dump文件可以通过jhat解析浏览。通常我们都会使用上面提到的图像化工具 jvisualvm。

14.【jstack】*

jstack用于打印指定进程的调用堆栈信息。如果是在64位机器上运行,可以加一个 -J-d64 参数。在实际工作中,通常使用此命令分析线上遇到的 死锁 、内存溢出等情况。

 jstack -J-d64 29869

E:\ideaworkspace\MyStudyProject\src\cn\com\study>jps
10400
11840 Launcher
7600 TestCMD
11956 Jps

//信息太多了 就不截完整的信息了 我在TestCMD中使用了sleep
"main" #1 prio=5 os_prio=0 tid=0x00000000025b8000 nid=0x2ff0 waiting on condition [0x000000000295f000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at cn.com.study.TestCMD.main(TestCMD.java:7)
  

15.【jcmd】

JVM 诊断命令工具 – 向正在运行的 Java 虚拟机发送诊断命令请求。

 E:\ideaworkspace\MyStudyProject\src\cn\com\study>jps
10400
11892 Launcher
12140 TestCMD
7756 Jps

//可查询参数
E:\ideaworkspace\MyStudyProject\src\cn\com\study>jcmd 12140 help
12140:
The following commands are available:
JFR.stop
JFR.start
JFR.dump
JFR.check
VM.native_memory
VM.check_commercial_features
VM.unlock_commercial_features
ManagementAgent.stop
ManagementAgent.start_local
ManagementAgent.start
GC.rotate_log
Thread.print
GC.class_stats
GC.class_histogram
GC.heap_dump
GC.run_finalization
GC.run
VM. uptime 
VM.flags
VM.system_properties
VM.command_line
VM.version
help

//例如查看jvm参数信息  也可使用 jinfo 12140 查看
E:\ideaworkspace\MyStudyProject\src\cn\com\study>jcmd 12140 VM.flags
12140:
-XX:CICompilerCount=3 -XX:InitialHeapSize=130023424 -XX:MaxHeapSize=2069889024 -XX:MaxNewSize=689963008 -XX:MinHeapDeltaBytes=524288 -XX:NewSi
ze=42991616 -XX:OldSize=87031808 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndi
vidualAllocation -XX:+UseParallelGC
  

以上就是小弟今日的学习成果! bin 目录下还是很多其他的命令,小弟在此就不过多的介绍了,毕竟水平有限。文章中有不对的地方欢迎各位前辈给小弟指出来,小弟不胜感激!与各位小伙伴一起加油!每天变强一点点!

文章来源:智云一二三科技

文章标题:JDK bin目录下常用命令简介

文章地址:https://www.zhihuclub.com/190759.shtml

关于作者: 智云科技

热门文章

网站地图