学习Java要用什么编程软件?

鄙人想自学JAVA语言编程,请问我需要安装哪些软件啊?急救啊!
鄙人想自学JAVA语言编程,请问我需要安装哪些软件啊?急救啊!
10-03-13 &
楼主,您好感谢您关注JAVA标签如果是自学JAVA编程,首先去SUN公司下载一个JDK,下载完毕后安装到电脑上然后下载一个IDE工具(也就是实际开发用的工具),我一般通常都是用Eclipse应用服务器tomcat,Apache都可以希望我的回答对你有所帮助,O(∩_∩)O~
请登录后再发表评论!
有基础的话自学Java还是可以,自学还是要自己控制自己了,要有计划性了四川软件培训探讨群()想在成都学软件开发就可以加群:)
请登录后再发表评论!
Eclipse,myEclipse,如果你想学的话,e良师益友网有相关的教程
请登录后再发表评论!2017年你应该学习的编程语言、框架和工具_Java编程_传送门
2017年你应该学习的编程语言、框架和工具
来自:开源中国链接:https://my.oschina.net/hardbone/blog/805349(点击尾部阅读原文前往)原文:/2016/12/the-languages-frameworks-tools-you-should-learn-in-2017/摘要: 2016 年在开发者圈子中许多新的技术和概念层出不穷,人工智能、机器学习、Progressive Web Apps 等等,各种语言、框架和工具的更新也是让人看得眼花缭乱。2017 年,作为开发者应该跟随潮流还是理性选择新技术?软件开发行业继续向前大步迈进。 在 2016 年,我们看到了很多新版本的流行语言、框架和工具。它给了我们更多的支持,也改变了我们的工作方式。紧跟潮流是很难的,所以在每年年底,我们会给你介绍什么是重要的,而且应该在未来十二个月内学习。一、趋势Progressive Web Apps在 2016 年,我们看到了 Progressive Web App 概念的兴起。它代表了脱机工作的 Web 应用程序,并提供类似 Native App 的体验。它们可以添加到你的智能设备的主屏幕,甚至可以给你发送推送通知,弥补了与本地移动应用程序的差距。我们认为,在 2017 年,PWA 将变得更加重要,更值得探讨。Progressive Web App(PWA) 是 Google 在 Web 平台开始推广的一个新概念,可以理解为是尽可能借助目前的新技术(比如 Service Worker,Push Notification 及其他展现层的新技术)以增强 Web App 的体验和功能,让 Web App 的体验无限接近 Native App。PWA 并不只是在移动设备上使用,有现代浏览器存在的地方就可以有 PWA。PWA 也不是 Chrome Only,现代浏览器基本都支持。聊天机器人现在每个人都在谈论聊天机器人。从运行它们的平台到构建它们的框架,社区也正在忙于各种活动(阅读介绍)。机器人是新的移动应用程序,如果你快点的话也可以在大家都感到新奇时赶上浪潮。一旦新奇消退,机器人可能会被降级到一些无聊的角色,如自动客服。但无论怎样,我们都可以梦想嘛!前端框架的合并在 JavaScript 社区,有着令人难以置信的框架和工具的混合,几乎每个星期都会出现新的。直到最近,人们期望旧的工具将被新的替代,但这不是我们在 2016 年看到的。相反,我们看到了流行的框架交换想法以及采纳由新诞生的框架提出的创新。所以在 2017 年,该选择哪个框架作为主要 JS 框架不是很重要,它们的功能大多是可比较的。云端各地的公司和开发者都在积极地拥抱“云”。云是虚拟化的计算机基础架构,可根据需要提供,并可从控制面板中完全配置。目前三大云提供商分别是 AWS,Google Cloud 和 Azure。由于其持续的竞争价格一直在下跌,因此小公司和个人开发者也将其纳入预算中。熟悉云工作流程将是 2017 年一笔不错的投资。机器学习机器学习在过去的十二个月中已经呈现爆炸式的增长。通过在今年 3 月份的 AlphaGo vs Lee Sedol 的历史性比赛,它进入了主流。从原始数据中学习的智能计算机系统正在改变我们与移动设备交互的方式。看上去,机器学习将是 2017 年更大的影响因子。二、编程语言学习其中的一门或多门:JS(ES2017),TypeScript,C#,Python,Ruby,PHP7,Java/Kotlin/ScalaJavaScriptJavaScript 继续着它令人难以置信的创新步伐。由于 Web 浏览器的快速发布计划的推动,JS 标准每年都会更新。下一个版本,ES2017 预计将于 2017 年中期完成。它将带来许多 JS 开发人员渴望的特性 — 用于处理异步函数的 аsync/await 。感谢 Babel,即使在今天,你也可以在每个浏览器中编写 ES2017。TypeScriptTypeScript 2.1 于 2016 年年底发布,为旧浏览器带来了 async/await,并改进了类型推断。TypeScript 是一门编译为 JavaScript 的静态类型语言。它增加了强大的功能,如经典的 OOP 模型和可选的静态类型,使得巨大的代码库更容易维护。它是编写 Angular 2 应用程序的首选语言,建议各位尝试。这是关于它的快速入门指南。C#C# 7.0 预计在 2017 年发布,作为一门优秀的语言将会有更大的改进。当微软推出开源 Visual Studio Code 编辑器 和 .Net Core 时,每个人都感到惊讶。它们都可以在 Linux,Windows 和 macOS 上运行,并允许你用 C# 编写快速、高效的应用程序(点击这里阅读更多)。这些工具促成了一个充满活力的社区。PythonPython 3.6 将于今年 12 月发布。它正在巩固其作为开发人员、IT 专业人员和科学家的脚本语言的选择的地位。它适用于自动化、Web 开发、机器学习和科学计算。Python 2/3 的选择对于社区来说是一个长达数年的斗争,但是现在你可以自信地选择 Python 3 并享受完整的库支持。对于那些需要额外的性能的使用者,他们可以看看 PyPy — 一个可启用 Python 运行时的 JIT 替代品 。RubyRuby 2.3 今年早些时候发布了,并带来了性能改进。作为通用脚本语言,Ruby 也是一个好选择。 Ruby 3×3 的倡议已经公布,这将使即将到来的 Ruby 3 比当前版本快 3 倍,而且会在更多的情景中打开使用 Ruby 的大门。PHPPHP 7.1 是在 12 月发布的,并带来了细小的增强。 这是基于去年 7.0 版本中的主要性能改进,将 PHP 转变为构建 Web 应用程序的快速平台。我们建议把 PHP The Right Way 作为良好的做法和构建 Web Apps 的现代做法。JavaJava 9 预计在 2017 年发布,并将带来备受欢迎的新功能,例如用于评估代码的 repl、对 HTTP 2.0 的支持和新的 API。有才能的 Java 开发人员和使用该语言开发项目的人对于这些特性有强烈的需求。如果 Java 不是你需要的,有一些基于 JVM 的语言,如 Kotlin 和 Scala,可以去了解。SwiftSwift 3 于今年早些时候发布。这是苹果对现代编程语言的愿景 — 简化 iOS 和 macOS 上应用程序的开发。Swift 是开源的而且吸引了大量的社区。版本 4 计划于 2017 年发布,将改进语言特性和引入服务器 API,使其成为编写 Web Apps 和后端的一个不错选择。其他如果你正在寻找更令人兴奋的东西,可以尝试 Crystal 和 Elixir,它们结合了一个友好的类似 Ruby 的语法且有着卓越的性能。或者你可以看看函数式语言如 Haskell 或 Clojure。另外两门推荐的快速语言是 Rust 和 Go。三、前端学习以下一个或多个:Angular 2,Vue.js,Ember,Bootstrap,LESS/SASSWeb 平台最近取得了两个重大进展 — Web Assembly 和 Service Workers。它们为构建快速和高效的 Web 应用程序打开了大门,而且弥补了与 Native App 之间的差距。Service Workers 尤其是 Progressive Web Apps 的启用技术,并为 Web 平台的通知提供支持,将来也还会有更多的 API。Angular 2Angular 2 于今年发布。该框架由 Google 支持,非常受企业和大公司的欢迎。它具有大量的功能,使在从网络到桌面和移动应用程序中编写任何东西成为可能。框架使用 TypeScript 编写,这也是在框架中编写应用程序的推荐语言。学习它有很多需要阅读的内容,但我们认为在 2017 年学习 Angular 2 将是一个很好的投资。Vue.jsVue.js 今年也发布了 2.0 版本。它借鉴了 Angular,React 和 Ember 中的好想法,并将它们放入一个易于使用的包中。它也比前两个更精简和更快。建议各位都去尝试一下,可参考入门教程。Ember.jsEmber 是 JavaScript 框架的另一个坚定选择。它支持数据绑定、自动更新模板、组件和服务器端渲染。与其竞争对手相比,它的一个好处是更成熟和稳定。重大更改的频率要低得多,而且社区也重视向后兼容性。这使得该框架成为生命周期长的应用的不错选择。其他另外两个值得一看的框架是 Aurelia 和 React。过去的一年中 React 的生态系统变得越来越复杂,因此很难向初学者推荐。但经验丰富的开发者可以将库与 GraphQL,Relay,Flux 和 Immutable.js 组合成一个全面的全栈解决方案。没提到 Bootstrap 的前端汇总是不完整的。Bootstrap 4 目前正处于 Alpha 阶段,预计在 2017 会正式发布。值得关注的变化是新的通用卡片组件和 Flexbox 网格,这使得框架更现代化而且让用户使用它工作更舒心。SASS 和 LESS 仍然是当今最流行的两种 CSS 预处理器。虽然 vanilla CSS 最终对变量进行了支持,但 SASS 和 LESS 仍然优先对 mixins,函数和代码组织进行支持。 如果还没有了解它们,可查看这里的 SASS 和 LESS 快速入门指南。四、后端学习其中之一:全栈后端框架,一个微框架后端有很多选择,所有这一切都取决于你对编程语言或特定性能需求的偏好。Web 开发中的一个持续趋势是远离后端的业务逻辑,并将该层转换为由前端和移动应用程序使用的 API。但一个全栈框架通常是能更简单、更快速地用于开发,并且是许多 Web Apps 的有效选择。Node.jsNode.js 是在浏览器外运行 JS 的主要方式。今年我们看到它发布了许多新版本,提升了性能以及添加对整个 ES6 规范的覆盖。Node 具有快速构建 API、服务器、桌面应用程序甚至机器人的框架,以及创建可以想象到的各种模块的庞大社区。一些你可能想研究的框架:Express, Koa, Next, Nodal。PHPPHP 首先是一门 Web 语言,并且有大量的 Web 框架可供选择。由于其出色的文档和功能,Laravel 构造了一个积极的社区。Zend Framework 发布了第 3 版,这标志着这个面向业务的框架的巨大升级。Symfony 在今年也发布了很多新的版本,使它作为一个全栈解决方案成为一个更好的选择。Ruby对于 Ruby,Rails 框架是首选。5.0 版本已于 2016 年发布,为 Web Sockets,API 模式等提供支持。Sinatra 也是小应用程序的不错选择,2.0 版本预计 2017 年发布。PythonPython 有以 Django 和 Flask 的形式组合的全栈/最小框架。Django 1.10 在 8 月发布,为 Postgres 引入了全文搜索和一个大修改的中间件层。JavaJava 生态系统还有流行的 Web 框架可供选择。Play 和 Spark 是两个坚定的选择,作为奖励,它们可以与 Scala 一起使用。其他对于爱好者,还有 Phoenix 可供选择,这是用 Elixir 语言编写的,并试图成为一个功能完全替代 Rails 的框架而且具有卓越的性能。如果 Elixir 是你想在 2017 年学习的语言之一,不妨尝试 Phoenix。五、数据库学习以下其中之一:Postgres,MySQL,CouchDB,RedisPostgreSQLPostgreSQL 今年发布了两个完整版本 — 9.5 和 9.6。它们带来了期待已久的 UPSERT 功能(又名
ON DUPLICATE KEY UPDATE)、更好的全文搜索和速度改进,这都归功于并行查询,更高效的复制、聚合、索引和排序。Postgres 适用于大规模、TB 级规模的数据集以及繁忙的 Web Apps,所以这些优化都很受欢迎。MySQLMySQL 8.0 将是该数据库的下一个主要版本。正式版预计 2017 年发布,将给系统带来很多改进。MySQL 仍然是最受欢迎的数据库管理系统,整个行业都受益于这些新版本。NoSQL对于 NoSQL 的粉丝,推荐 CouchDB。它是一个快速和可扩展的 JSON 存储系统,公开了一个 REST-ful HTTP API。这个数据库易于使用,性能卓越。PouchDB 是一个开源的 JavaScript 数据库,完全在浏览器中工作。可通过 Couch 同步数据。在应用程序离线的时候,可以将用户数据保存在本地,在网络连接可用后自动同步。RedisRedis 是最受欢迎的 Key-Value 数据库。它体积小,快速而且通用性好。作为 NoSQL 数据存储或进程消息传递和同步通道,你可以将其作为智能内存缓存的替代方案。它提供了大量的数据结构可供选择,并且即将到来的 4.0 版本将有一个模块系统和改进的复制功能。六、工具尝试其中的一个或多个:Yarn,Git,Visual Studio Code,Electron,Ansible,DockerYarnYarn 是由 Facebook 开发的 Javascript 包管理器。它是对 npm 命令行工具的升级,提供了更快的安装,更好的安全性和确定性构建。它仍然使用 npm 包注册表作为其后端,因此可以访问同一个 JavaScript 模块的生态系统。Yarn 与 npm 使用的 package.json 格式相兼容。Visual Studio Code 和 Atom两个最受欢迎的开源代码编辑器 — Visual Studio Code 和 Atom 在过去 12 个月中进行了很多不可思议的创新。这两个项目都使用网络技术构建,并吸引了大量的粉丝群体。编辑器有针对大部分语言的语法检查,linting 和重构工具的插件。GitGit 是最流行的源代码版本控制系统。它是无服务器的,你可以将计算机上的任何文件夹转换为存储库。如果你想共享代码,有很多选择,像 GitLab,Bitbucket 和 Github(当然还有码云)。2017年,建议熟悉 git 命令行,因为它会在比你想象中更多的场景派上用场。Electron 和 NW.js桌面应用程序还没有死,即使 Web App 变得越来越强大。有时你需要强大的功能和 API,这是网络平台无法提供的。使用诸如 Electron 和 NW.js 之类的工具,可以通过使用 Web 技术编来写桌面应用程序。你可以完全访问操作系统和 npm 可用的广度模块。要了解这些工具的更多信息,请阅读有关 Electron 和 NW.js 的教程。DevOps软件开发中的最近趋势是让开发人员负责自己的系统部署 — 也称为 DevOps,这能产生更快的发布和更快地修复生产中的问题。具有运维经验的开发人员会受到公司的高度重视,因此从现在开始熟悉能实现这一目标的技术将是巨大的进步。推荐的一些工具是 Ansible 和 Docker。拥有 Linux 命令行和基本的系统管理技能也会为助你一臂之力。七、技术学习其中之一:云部署,机器学习库,VR 开发云已经赢得了整个软件行业,可以看到大型公司关闭了他们的数据中心而且将其整个基础设施迁移到了云上。目前三个主要平台是 AWS, Google Cloud 和 Azure。这三个平台都有着功能强大,不断扩展的功能集,包括虚拟机,数据库托管,机器学习服务等。而且价格也正在迅速下降,所以云是小公司和个人开发者可以接触到的。对于 2017 年,部署一个业余的项目到这些提供商的平台将会是一次很好的学习经历。人工智能人工智能是 2016 年的流行词。语音识别和图像分类只是该技术面向用户的两种应用,人工智能的机器达到甚至超过了人类的性能。当下有很多创业公司将 AI 和机器学习应用到新领域,也有许多开源项目发布,例如谷歌的 Tensor Flow 和微软的 Cognitive Toolkit。机器学习是一个与数学非常相关的主题,对于刚刚开始的人,这里有全面的在线课程。虚拟现实和增强现实虚拟现实(VR)和增强现实(AR)已经存在了一段时间,最终该技术已经成熟到足以提供一个引人注目的体验。Facebook(Oculus Rift),Google(Daydream)和 Microsoft(Windows Holographic)都有欢迎第三方开发者加入的虚拟现实平台。VR 头戴设备仍然面临挑战,如消除恶心的感觉和在游戏之外提供引人注目的用例。●本文编号293,以后想阅读这篇文章直接输入293即可。●输入m可以获取到文章目录相关推荐↓↓↓ 算法与数据结构推荐《》涵盖:程序人生、算法与数据结构、黑客技术与网络安全、大数据技术、前端开发、Java、Python、Web开发、安卓开发、iOS开发、C/C++、.NET、Linux、数据库、运维等。
觉得不错,分享给更多人看到
Java编程 微信二维码
分享这篇文章
1月12日 0:29
Java编程 最新头条文章
Java编程 热门头条文章与你的问题不同,我认为软件工程主要是用来解决问题的。有些博客认为“每个小孩都应该学习编程”,“你认为学数学只是玩玩而已?如果你有看过我的HTML5调试器的话,你会发现我是一个,但我做的工作远不止数学这些”。 上面两者都同意一个观点,软件工程不只是用计算机语言写的一些只言片语。软件解决的问题诠释了程序员的价值。
解决问题的最终进展来自科学、强化清晰的头脑和我们一路以来使用的工具。
你有没有留意过那些 JDK 安装附带的工具?既然那些大牛同意把那些工具加到 JDK 里,应该是有用的。
因此,在这篇文章里,我挑了几个 Hotspot 标准安装后可用的小工具来介绍。我们决定忽略那些安全相关的和各种远程方法调用(RMI)、applets、web-start、web-services 工具。让我们把焦点放在那些普通开发者开发一般应用过程中可能有用的工具。注意,如果你只是对命令行工具感兴趣,而不仅仅是Java相关的工具,这里介绍了 5 个非常有用的命令行工具。
再次重申,下面虽然不是 JDK 工具完整列表,但是我们想给你一个精华版本。下面是你用这些命令可以完成的真正有用的事情。
你可以给 javap(文件反编译器)传递这些有用的参数:
-I – 打印行数和局部变量
-p – 打印包括非public在内的所有类和成员信息,
-c – 打印方法字节码
比如在著名的“你真的懂 Classloader 吗?”演讲里,当出现 NoSuchMethodException 错误时,我们可以执行以下命令来调查这个类究竟有哪些成员方法和获取这个类所有想找的信息:
javap -l -c -p Util2
当调试类内部信息或者研究随机字节码顺序时,javap 非常有用。
jjs命令可以启动一个 JavaScript 命令终端,你可以把它当做计算器或者用随机的JS字符串测试JS的古怪用法。不要让另一个 JavaScript 谜题让你措手不及!
哈,看到刚刚发生了什么了么?但是 JavaScript 是另一个话题,只需要知道即使没有 node.js 或浏览器你也可以用jjs知道JS是怎么工作的。
Java堆分析工具(jhat)正如它名字描述的那样:分析dump堆信息。在下面的小例子里,我们构造了一个 OutOfMemoryError ,然后给这个 java 进程指定 -XX:+HeapDumpOnOutOfMemoryError ,这样运行时就会产生一个 dump 文件供我们分析。
public class OhMyMemory {
private static Map map = new HashMap&&();
public static void main(String[] args) {
Runtime.getRuntime().addShutdownHook(
new Thread() {
public void run() {
System.out.println("We have accumulated " + map.size() + " entries");
for(int i = 0; ;i++) {
map.put(Integer.toBinaryString(i), i);
产生一个 OutOfMemoryError 很简单(大部分情况下我们无意为之),我们只要不断地制造不让垃圾回收器起作用就可以了。
运行这段代码会产生如下输出:
org.shelajev.throwaway.jdktools.OhMyMemory
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid5644.hprof ...
Heap dump file created [ bytes in 0.645 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.HashMap.resize(HashMap.java:703)
at java.util.HashMap.putVal(HashMap.java:662)
at java.util.HashMap.put(HashMap.java:611)
at org.shelajev.throwaway.jdktools.OhMyMemory.main(OhMyMemory.java:24)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
We have accumulated 393217 entries
不错,我们现在有一个可供分析的文件了。我们对这个文件执行jhat开始进行分析,jhat 会分析这个文件开启一个 http 服务器供我们查看结果。
$ jhat java_pid5644.hprof
Reading from java_pid5644.hprof...
Dump file created Thu Aug 14 14:48:19 EEST 2014
Snapshot read, resolving...
Resolving 1581103 objects...
Chasing references, expect 316 dots...
Eliminating duplicate references........
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.
可以通过访问 http://localhost:7000 来查看 dump 的数据。
在那个页面我们可以通过堆信息的柱状图了解究竟是什么耗尽了内存。
现在我们可以清晰地看到拥有 393567 结点的 HashMap 就是导致程序崩溃的元凶。虽然有更多可以检查内存分布使用情况和堆分析的工具,但是jhat是内置的,是分析的一个好的开端。
jmap 是一个内存映射工具,它提供了另外一种不需要引发 OutOfMemoryErrors 就可以获取堆 dump 文件的方法。我们稍微修改一下上面的程序看一下效果。
public class OhMyMemory {
private static Map map = new HashMap&&();
public static void main(String[] args) {
Runtime.getRuntime().addShutdownHook(
new Thread() {
public void run() {
System.out.println("Enter something, so I'll release the process");
System.in.read();
System.out.println("We have accumulated " + map.size() + " entries");
catch (IOException e) {
e.printStackTrace();
for(int i = 0; i & 10000 ;i++) {
map.put(Integer.toBinaryString(i), i);
注意,现在我们不要消耗大量的内存,只是比较早结束并在进程关闭钩子里等待不让 JVM 退出。这样就允许我们用 jmap 连接这个进程获取珍贵的内存 dump。
因此你可以用 jmap 的两个功能来实现,获取堆统计信息和触发一个堆 dump。因此,当执行:
jmap -heap 1354(这里 1354 是上面程序运行的进程号),就可以获取一个很好的内存使用统计信息:
$ jmap -heap 1354
Attaching to process ID 1354, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.0-b70
using thread-local object allocation.
Parallel GC with 4 thread(s)
Heap Configuration:
MinHeapFreeRatio
MaxHeapFreeRatio
MaxHeapSize
MaxNewSize
SurvivorRatio
MetaspaceSize
= .796875MB)
CompressedClassSpaceSize =
(1024.0MB)
MaxMetaspaceSize
G1HeapRegionSize
= 0 (0.0MB)
Heap Usage:
PS Young Generation
Eden Space:
capacity = .0MB)
= .3438MB)
= .65625MB)
59.375% used
From Space:
capacity = .5MB)
= .1875MB)
93.5% used
capacity = .5MB)
= 0 (0.0MB)
PS Old Generation
capacity = .0MB)
= .84375MB)
= .15625MB)
1.5813% used
981 interned Strings occupying 64824 bytes.
$ jmap -dump:live,format=b,file=heap.bin 1354
Dumping heap to /Users/shelajev/workspace_idea/throwaway/heap.bin ...
Heap dump file created
jmap 还可以简单地触发当前堆 dump,之后可以随意进行分析。你可以像下面例子中的那样,传一个 -dump 参数给 jmap。
现在有了 dump 得到的文件 heap.bin,就可以用你喜欢的内存分析工具来分析。
jps 是显示 Java 程序系统进程(PID)最常用的工具。它与平台无关,非常好用。想象一下我们启动了上面的程序,然后想用 jmap 连接它。这个时候我们需要程序的 PID,jps 正好的派上用场。
$ jps -mlv
5911 com.intellij.rt.execution.application.AppMain org.shelajev.throwaway.jdktools.OhMyMemory -Xmx64m -Didea.launcher.port=7535 -Didea.launcher.bin.path=/Applications/IntelliJ IDEA 14 EAP.app/Contents/bin -Dfile.encoding=UTF-8
-Dfile.encoding=UTF-8 -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -Djsse.enableSNIExtension=false -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -XX:+HeapDumpOnOutOfMemoryError -Xverify:none -Xbootclasspath/a:../lib/boot.jar -Xms128m -Xmx750m -XX:MaxPermSize=350m -XX:ReservedCodeCacheSize=225m -XX:+UseCompressedOops -agentlib:yjpagent=probe_disable=*,disablealloc,disabletracing,onlylocal,disableexceptiontelemetry,delay=10000,sessionname=IntelliJIdea14 -Didea.java.redist=NoJavaDistribution -Didea.home.path=/Applications/IntelliJ IDEA 14 EAP.app/Contents -Didea.paths.selector=IntelliJIdea14
5930 sun.tools.jps.Jps -mlvV -Dapplication.home=/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home -Xms8m
我们发现大多数情况下,“-mlv” 参数组合起来最好用。它会打印main方法的参数、完整包名、JVM 相关参数。这样你就可以在一大堆相似的进程中找到你想要的那个。
现在有了 dump 得到的文件 heap.bin,就可以用你喜欢的内存分析工具来分析。
jstack 是一个生成指定 JVM 进程的线程堆栈工具。当你程序一直在那里转圈圈,而你想找到线程到底做了什么导致死锁,那么 jstack 最适合。
jstack 只有几个参数选项,如果你拿不准,把它们都加上。如果后面发现有些信息对你意义不大时可以调整参数限制它的输出。
-F 选项可以用来强制 dump,这在进程挂起时非常有用,-I 选项可以打印同步和锁的信息。
$ jstack -F -l 9153
Attaching to process ID 9153, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.0-b70
Deadlock Detection:
No deadlocks found.
上面的输出虽然看起来简单,但是它包含了每个线程的状态和它当前的堆栈的信息。
jstack 非常有用,我们在日常工作中使用非常频繁,特别是我们负责启动停止应用服务器的测试引擎。测试工作往往不顺利,jstack 可以让我们知道 JVM 内部的运行状态且没有什么负面的影响。
— Neeme Praks(ZeroTurnaround资深产品工程师)
还有其它的吗?
今天我们介绍了 JDK 发行预装的超棒工具。相信我,将来某天你肯定会用到它们中的一些。所以,如果你有时间,你可以翻一翻它们的官方文档。
试着在不同的场景使用并爱上它们。
如果你想学一些超棒的非 JDK 附带的工具,可以看看 JRebel ,它可以让你马上看到代码的改动效果,还可以看到我们新的产品 XRebel ,它可以像X光眼镜一样扫描你的 web 应用。
如果你知道开发最佳实践中至关重要的小工具,在本文末尾发表评论或者在 twitter上@shelajev 分享一下这个工具的细节。
Bonus Section: References
奖励环节:参考
下面是一个更加完整的 JDK 工具可用列表。虽然这不是一个完整的列表,为了节省篇幅,我们省掉了加密、web-services 相关的工具等。谢谢
提供的资源。
— 一个创建和管理 jar 文件的工具。
— Java 应用启动器。在这篇文章里,开发和部署都是用的这个启动器。
— Java 编译器。
— API 文档生成器。
— native 本地方法中用于生成 C 语言头文件和源文件。
— class 文件反编译器。
— JVM 命令行诊断工具,可发送诊断命令请求到 JVM 中。
— 一个兼容 JMX 的监控 JVM 的图形化工具。可以监控本地和远程 JVM,也可以监控和管理单独的一个应用。
— Java 调试器。
— JVM 进程查看工具,列出了系统运行的所有 hotspot JVM 进程。
— JVM 状态。它可以收集和打印指定的 JVM 进程性能状态。
— 堆 dump 信息的浏览器,启动一个 web 服务器来显示你用诸如 jmap -dump 得到的堆 dump 信息。
— Java 内存映射工具,打印指定进程、核心文件、远程调试服务器共享内存映射或者堆内存详细信息。
— Java 服务调试守护进程—依附到一个 Java 进程或核心文件并且担当一个调试服务器的作用。
—Java 堆栈信息工具——打印指定进程或核心文件或者远程调试服务器的线程堆栈。
— 运行 Nashorn 命令行脚本 shell。
— Java 脚本运行工具。不过你要心里有数,这实际上是一个还没支持的测试功能。未来的 JDK 版本里面可能会移除它。
希望上面的内容对你们有帮助,你可以在 twitter 上 @ 留下你宝贵的评论。如果你知道一些我没有提及的重要工具,请让我知道。}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信