故事发生了

在还没有IDE的时代,高手们还是通过记事本来编程。那时候能够写程序的都是牛人。能把程序写得好的更是牛人中的牛人。

秃头大叔的程序员形象就是在那个时候建立起来的。

还记得十几年前的那一个春天,微风不动,太阳都羞红了脸。因为那时候的我还在一个javac,一个java的编译,运行着java程序。

虽然效率低下,但是看着我跑起来的一个又一个hello world,心里充满了欢喜。

惊喜过后便是失落,java实在太难用了太复杂了,我还是回去写C语言吧。

直到有一天,有人向我推荐了eclipse,它就像是一道闪电照亮了我前进的方向。从此什么javac,java都见鬼去吧,我只要eclipse。

很多年之后,我从eclipse转向了IDEA,开发工具越来越趁手,然后我已经差不多快忘记了java原来还提供了一系列的java tools供我们使用。

都说要勿忘初心,于是借着JDK14的发布,我又一次回顾了java tools提供的工具,居然有了惊喜的发现。

java tools简介

JDK14中提供了多达31中工具,惭愧的是,第一次看到它们我只认识其中的部分。士知耻而后勇,于是我奋发图强,终于在今天将它们全都认识了。

31一个工具,这里我先简单介绍一下,后续再针对复杂的,特别有用的工具做一个专门的说明。

以下排名仅按字母顺序,不代表任何个人观点

jaotc

一个java的静态编译器,为编译好的java方法生成native代码。

jar

jar包大家都很熟悉了,使用jar命令可以用来打包和解压jar文件。

jarsigner

jar包打完了,使用jarsigner来对jar包做签名和认证。

java

使用java可以运行java程序。

javac

javac用来编译java文件,将文本文件编译成二进制的class文件。

javadoc

javadoc可以将代码中写的注释文档生成HTML页面供大家参考。如果你有看过JDK的源代码的话,可以看到源代码里面写了很多注释。大家可以学习一下。因为注释很重要。

javap

java自带的反编译工具,可以将二进制的class文件反编译成为人类可读的代码。

这个反编译工具可能不够IDE自带的反编译工具强大。

jcmd

这里的d代表的是diagnostic,通过这个命令可以对正在运行的JVM进行调试。

这是一个非常有用的调试工具,我们在后面的文章中会详细讲解。

jconsole

jconsole是一个GUI客户端,可以对现有的java程序进行管理。

他们的连接协议是JMX。不知道为什么国内的公司好像很少用到JMX。um...这个问题等我有时间了研究一下。

jdb

Java Debugger (JDB)是一个命令行的debug工具,提供了一系列的debug程序的功能。

jdeprscan

jdeprscan是一个分析工具,用来扫描jar或者class文件中的deprecated API。

jdeps

jdeps是一个java class依赖的分析工具。

jfr

jfr是Java Flight Recorder的缩写,jfr是java应用程序的分析工具。它可以收集JVM在运行期间所产生的一系列事件,并生成文件和分析。

后面我们会用一篇文章详细讲解JFR。

jhsdb

jhsdb是一个分析工具,可以分析正在运行的java程序中,也可以分析coredump。

jinfo

jinfo为特定的java进程生成运行时的java配置信息。

jjs

jjs用来运行Nashorn engine。

jlink

从JDK9之后,java已经模块化了。jlink可以将模块和他们的依赖组织起来,生成一个自定义的运行时环境。

jmap

jmap可以打印出某个java进程的堆信息。我们会在后面的文章中详细讲解。

jmod

jmod用来创建和解析JMOD文件。

jpackage

jpackage可以用来打包自运行的java程序。

jps

列出机子上面的java进程。

jrunscript

启动一个命令行shell,这个shell支持交互和批处理模式。

jshell

一个可互动的java shell环境。

jstack

打印java stack信息,主要用在debug中。后面我们会详细讲解。

jstat

用于监控JVM的统计信息。

jstatd

jstatd是一个RMI服务程序,用来远程监控JVM。

keytool

生成和管理密钥,证书的工具。

rmic

用来生成远程方法调用的stub和skeleton类。

rmid

启动一个守护进程,允许在JVM中注册和实例化对象。

rmiregistry

创建一个RMI对象的注册器。

serialver

为一个或多个class生成serialVersionUID。

总结

以上的31个工具就是JDK14提供的。后面我们会挑其中几个对我们的程序调试和定位问题非常有用的几个工具来讲解。

本文作者:flydean程序那些事

本文链接:http://www.flydean.com/jdk14-java-tools/

本文来源:flydean的博客

欢迎关注我的公众号:程序那些事,更多精彩等着您!

JDK14中的java tools简介的更多相关文章

  1. 第63节:Java中的Spring MVC简介笔记

    前言 感谢! 承蒙关照~ Java中的Spring MVC简介笔记 MVC简介 Spring MVC 基本概念 Spring MVC 项目搭建 maven 使用Spring MVC进行开发 实现数据绑 ...

  2. 小师妹学JVM之:JDK14中JVM的性能优化

    目录 简介 String压缩 分层编译(Tiered Compilation) Code Cache分层 新的JIT编译器Graal 前置编译 压缩对象指针 Zero-Based 压缩指针 Escap ...

  3. 在gradle中构建java项目

    目录 简介 构建java项目的两大插件 管理依赖 编译代码 管理resource 打包和发布 生成javadoc 简介 之前的文章我们讲到了gradle的基本使用,使用gradle的最终目的就是为了构 ...

  4. 在CentOS 7/6.5/6.4 中安装Java JDK 8(转载)

    转载在CentOS 7/6.5/6.4 中安装Java JDK 8 首先,在你的服务器上运行一下更新. yum update 然后,在您的系统上搜索,任何版本的已安装的JDK组件. rpm -qa | ...

  5. Java异常(一) Java异常简介及其架构

    概要 本章对Java中的异常进行介绍.内容包括:Java异常简介Java异常框架 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3544168.html ...

  6. 一、Android NDK编程预备之Java jni简介

    转自:  http://www.eoeandroid.com/thread-264384-1-1.html 游戏开发 视频教程 博客 淘帖     论坛›eoe·Android应用开发区›Androi ...

  7. Nashorn 在JDK 8中融合Java与JavaScript之力

    从JDK 6开始,Java就已经捆绑了JavaScript引擎,该引擎基于Mozilla的Rhino.该特性允许开发人员将JavaScript代码嵌入到Java中,甚至从嵌入的JavaScript中调 ...

  8. Java RMI 简介及其优劣势总结

    今天,帮别人看UDAS配置问题时,看到采用的是RMI方式的调用,如:rmi://10.20.134.140:2299/DataServer,而且这个端口是被直接硬编码在UDAS的代码中的.既然看到了, ...

  9. Nashorn——在JDK 8中融合Java与JavaScript之力

      从JDK 6开始,Java就已经捆绑了JavaScript引擎,该引擎基于Mozilla的Rhino.该特性允许开发人员将JavaScript代码嵌入到Java中,甚至从嵌入的JavaScript ...

  10. Java多线程简介

    Java多线程简介 Java中内置了对多线程的支持,让多线程的开发方便很多,但同时也带来了另外的复杂,线程间的交互以及很多的不确定性让多线程又显得很复杂.在此只是针对Java中多线程的基础做些说明,有 ...

随机推荐

  1. 案例分享:Qt出版社书籍配套U盘资源播放器软件定制(脚本关联播放器与资源文件,播放器,兼容win7,win10和mac)

    红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术.树莓派.三维.OpenCV.OpenGL.ffmpeg.OSG.单片机.软硬结合等等)持续更新中-(点击传送门) 合作案例专栏:案例分享(体 ...

  2. day04---系统重要文件

    系统重要的文件 /etc的重要文件 1./etc/sysconfig/network-scripts/ifcfg-eth0 [root@localhost ~]# cat /etc/sysconfig ...

  3. 数据分析day01

    数据分析三剑客 numpy pandas(重点) matplotlib numpy模块 NumPy(Numerical Python)是Python语言中做科学计算的基础库.重在于数值计算,也是大部分 ...

  4. ubuntu 中 docker 每次都输入 sudo 命令

    查看用户组及成员 sudo cat /etc/group | grep docker 可以添加docker组 sudo groupadd docker 添加用户到docker组 sudo gpassw ...

  5. 【应用服务 App Service】App Service 中部署Java项目,查看Tomcat配置及上传自定义版本

    当在Azure 中部署Java应用时候,通常会遇见下列的问题: 如何部署一个Java的项目呢? 部署成功后,怎么来查看Tomcat的服务器信息呢? 如果Azure提供的默认Tomcat版本的配置跟应用 ...

  6. 【Azure 应用程序见解】通过Azure Funciton的门户启用Application Insights后,Application Insights无法收到监控数据

    问题描述 比较早期创建的Azure Funciton服务,近期发现在门户中已经启用了Application Insights功能,但是正确配置Applicaiton Insights后,却无法获取关联 ...

  7. Nebula Graph 源码解读系列 | Vol.05 Scheduler 和 Executor 两兄弟

    本文首发于 Nebula Graph Community 公众号 上篇我们讲述了 Query Engine Optimizer 部分的内容,在本文我们讲解下 Query Engine 剩下的 Sche ...

  8. C/C++ 的 指针/引用 传参

    #include <stdio.h> //指针传值 void addOne(int *a) { printf("%8p\n",a); *a = *a+1; } //引用 ...

  9. 7、mysql的缓存优化

    概述 开启Mysql的查询缓存,当执行完全相同的SQL语句的时候,服务器就会直接从缓存中读取结果,当数据被修改,之前的缓存会失效,修改比较频繁的表不适合做查询缓存. 操作流程 客户端发送一条查询给服务 ...

  10. ansible 自动化运维(1)

      ansible 简介 ansible 是什么? ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.chef.func.fabric)的优点,实现了批量 ...