精华内容
下载资源
问答
  • JVM-为什么要JVM

    千次阅读 多人点赞 2017-02-23 15:37:11
    好久没有写博客了,先水一帖,也借此作为JVM学习笔记整理的一个开篇。

    JVM-为什么要学JVM

    简介

    好久没有写博客了,先水一帖,也借此作为JVM学习笔记整理的一个开篇。
    

    为什么要学

    从知乎上贴两个回答过来来证明我的懒。
    

    总有人问这个东西好像用不上,于是要不要学这样的问题. 然后又总有人担心一直搬砖成天做些重复没提升的东西.
    于是这个逻辑就很有意思咯,一方面是工作上面学不到东西,一方面是不愿意学工作上用不到的东西.
    其实前人已经早就说过了”功夫在诗外”这样的话,奈何我们总是太急.


    如果你这辈子只甘心做一个平庸的Java码农,那么你完全没有必要去学习JVM相关的知识,学习JVM对于一个Java程序员的好处大概可以概括为下几点:

    1. 你能够明白为什么Java最早期被称为解释型语言,而后来为什么又被大家叫做解释与编译并存的语言(了解JVM中解释器以及即时编译器就可以回答这个问题);

    2. 你能够理解动态编译与静态编译的区别,以及动态编译相对于静态编译到底有什么好处(JVM JIT);

    3. 你能够利用一些工具,jmap, jvisualvm, jstat, jconsole等工具可以辅助你观察Java应用在运行时堆的布局情况,由此你可以通过调整JVM相关参数提高Java应用的性能;
    4. 可以清楚知道Java程序是如何执行的;
    5. 可以明白为什么Java等高级语言具有可移植性强的特性。 其实这个问题相当于“为什么C/C++程序员需要学体系结构与编译原理?“

    补充

    后续文章多是学习过程的整理,同时会分门别类的收录到我的个人知识图谱中。有转载或者引用的地方都会标明出处。
    
    展开全文
  • 一图就可以搞明白:

    0.JVM课程总体介绍

     

    一图就可以搞明白:

    展开全文
  • 面试为什么需要了解JVM

    千次阅读 2018-03-06 08:21:00
    如果你经常注意面试题,你会发现现在面试题多多少少会含有jvm相关的面试题,之前也把一些jvm面试题汇总了下:面试题系列一,那么为什么现在面试需要了解或者问面试题呢? 主题 谈谈自己的理解,概括为以下几个...

    匠心零度 转载请注明原创出处,谢谢!

    说在前面

    如果你经常注意面试题,你会发现现在面试题多多少少会含有jvm相关的面试题,之前也把一些jvm面试题汇总了下:面试题系列一,那么为什么现在面试需要了解或者问面试题呢?

    主题

    谈谈自己的理解,概括为以下几个方面:
    - 的确很重要。
    - 供大于求。
    - 面试风气。

    下面就针对这几点谈谈。

    的确很重要

    随着互联网的发展,高并发高可用、快速响应成为软件的必须,而JVM与这些有着密切关联。之前JVM系列好多都是一些由于STW影响到快速响应问题,忽然网站慢一下(抖动下)等问题,下面谈谈最近通过JVM排查到的高并发高可用问题。(在高可用高并发下面问题原因可能会很多,比如cpu异常高、磁盘IO高、SWAP空间等,有可能很多问题都是综合性的问题)

    以前在我的认知里面,如果服务运行有问题,最简单有效快速地办法就是重启,最近遇到了问题打破了我对该方法的认知。

    某业务线最近集群服务升级忽然上线上去不能提供服务,之后影响到整个集群,查看当时服务器情况,负载、cpu、io、swap等都正常,查看日志就是卡在最后一行不动了(也没有发现OOM,等任何异常)。

    如果是之前估计这个问题我也就排查不了了,现在排查问题多了一个维度JVM(的确有时候需要考虑的,并且现在很多监控工具都会考虑到JVM的),查看gcutil查看比例,发现from 100% eden 100% old 100%但是服务就是没有OOM,执行任何都命令都非常缓慢了(更别谈访问请求了),查看具体gc日志发现concurrent mode failure 并且时间很长,猜测就是一瞬间量把内存给用完了,导致from 100% eden 100% old 100%现象,最终不能提供服务,之后其他集群节点也陆续出现了此类情况,重启无效,现象一样很快就from 100% eden 100% old 100% 不能提供服务,没办法,一直重启直到都启动好了可以正常提供服务。

    留了一台进行排查问题,执行jmap -histo pid无果,加-F也无果,后来执行jmap -dump:format=b,file=heap.bin pid (6G堆执行了3-4个小时左右)通过MAT分析查看,发现都是某个逻辑产生的数据,占用了5G左右(char[]、String、Map、List等都与某个逻辑代码有关)猜测是该问题(由于涉及到公司具体业务不方便截图,只能大概说明下),很容易定位到代码最后是由于并发没有考虑好,逻辑写的也有点问题导致的,进行修改处理,问题解决,出了JVM相关问题可以进行排查解决。

    很能很多人认为线上出现问题可以排查继续解决问题的人牛逼,其实错了,真正牛逼的人都是在问题产生前就解决了(需要意识里面转变和学习思考提高的地方)。

    下面看个例子就明白了,是Charles告诉我的,我觉得放在这里特别合适:

    春秋战国时期,有位神医被尊为“医祖”,他就是“扁鹊”。一次,魏文王问扁鹊说:“你们家兄弟三人,都精于医术,到底哪一位最好呢?”扁鹊答:“长兄最好,中兄次之,我最差。”文王又问:“那么为什么你最出名呢?”扁鹊答:“长兄治病,是治病于病情发作之前,由于一般人不知道他事先能铲除病因,所以他的名气无法传出去;中兄治病,是治病于病情初起时,一般人以为他只能治轻微的小病,所以他的名气只及本乡里;而我是治病于病情严重之时,一般人都看到我在经脉上穿针管放血,在皮肤上敷药等大手术,所以以为我的医术高明,名气因此响遍全国。”

    如果能在编码时候就考虑到JVM,做到面向JVM编程那就更牛逼了,如果能在上线前查阅到此类JVM问题或者是OOM问题以及一些其他问题那也就好了。

    综述:因此这些成为必不可少的技能,所以面试需要了解,因为公司可能会面临该问题。

    供大于求

    现在不像以前了,以前会点html都好找工作,现在由于学习软件的人越来越多,而且每年大学生都在毕业(而老一辈的也很少换工作)人只会越来越多,有个笑话,随便在大街上扔硬币砸到的那个可能就是搞软件的,现在人员太多,公司为了区分,会多添加维度,每多一个维度可能就会刷掉一批人,核心供大于求,所以我们也必须朝着这些大的方向努力,使得自己的竞争力比别人强。

    面试风气

    简单的问题都不好意思问,怕面试者鄙视面试公司问的问题。现在有一股妖风,不管啥公司都慢慢像阿里这样的公司靠近,面试不问点jvm、并发、分布式都不好意(虽然公司可能没有用到,虽然可能仅仅CURD),老是觉得问问这些显得逼格高点,不管处于什么原因很多公司的确都在学习他们,都在问这些问题,那么我们就朝着这些大的方向努力也是没错的,如果朝着这些方向努力就是他们需要的人才,那么也就对了。

    类似其他,比如高并发 锁、分布式、缓存等都可以考虑考虑这样思考,你会有不一样的收获的。


    如果读完觉得有收获的话,欢迎点赞、关注、加公众号【匠心零度】,查阅更多精彩历史!!!

    展开全文
  • 不管啥公司都慢慢像阿里这样的大公司靠近,面试不问点jvm、并发、分布式都不好意思(虽然公司可能没有用到,虽然可能仅仅CURD),老是觉得问问这些显得逼格高点,不管处于什么原因很多公司的确都是这样的!

    前言
    本来想着关于写JVM这个专栏,直接写知识点干货的,但是想着还是有必要开篇讲一下为什么要学习JVM,这样的话让一些学习者心里有点底的感觉比较好…

    原因一:面试

    不得不说,随着互联网门槛越来越高,JVM知识也是中高级程序员阶段必问的一个话题!现在不像以前了,以前会点HelloWorld都好找工作,现在由于学习软件的人越来越多,特别是Java语言这个行业,而且每年大学生都在毕业,不是我说的浮夸,就连土木工程的大学生都可能转IT这一行,IT行业工资高现在已经是妇孺皆知了,稍微毕业后加入某某培训机构半年,总之学IT的人只会越来越多,随便在大街上拉一个头发茂盛的大叔都可能就是搞软件的,现在有一股妖风,不管啥公司都慢慢像阿里这样的大公司靠近,面试不问点jvm、并发、分布式都不好意思,面试通过之后你的岗位可能仅仅是CURD,老是觉得问问这些显得逼格高点,不管处于什么原因很多公司的确都是这样的!

    所以我不得不相信很多人一开始接触 Java 虚拟机只是因为面试需要用到,所以硬着头皮去学。所以很多人对于为什么要学虚拟机这个问题,一致的答案皆是:因为面试。

    其实学习JVM并不仅仅在于面试,而在于更深入地理解 Java 这门语言,以及为未来排查线上问题打下基础。其实说白了,还是得先 好(通)好(过)学(面)java(试)…

    然而现实就是这样,毕竟现实源于生活!也正是因为生活学习JVM为了面试的同时也为今后更好的学习java打下了基础!

    原因二:为了深入地理解 Java 这门语言

    学习 Java 虚拟机能深入地理解 Java 这门语言。对于刚刚工作一两年的朋友来说,各个 API 都没用熟,自然不会去深入研究 Java 中的各种细节。如果你这辈子只甘心做一个平庸的Java码农,那么你完全没有必要去学习JVM相关的知识。

    但对于工作了三年以后的朋友来说,很多时候你要解决一个问题必须深入到字节码层次去分析,你才能得到准确的结论,而字节码就是虚拟机的一部分。

    深入地理解 Java 这门语言实例:

    1、我们常用的布尔型 Boolean,我们都知道它有两个值,true 和 false。但你们知道其实在运行时,Java 虚拟机是没有布尔型 Boolean 这种类型的。Boolean 型在虚拟机中使用整型的 1 和 0 表示。

    2、我们都知道类路径和类名唯一确定一个类,但事实上并不是这样。或者说,我们前面说的结论只是表面上的。如果深入到虚拟机层面来说,类加载器、类路径、类名才唯一决定一个类。也就是说,如果两个不同的类加载器它们加载同一个 class 类文件,那这两个类加载器加载的类就是不同的。

    以上两个例子如果你不懂虚拟机的一些基础知识,那么你就很难深入理解一些细节。

    不说别的,就光和同事聊天,同事说到什么新生代老年代问你一个GC日志排查,你没有JVM基础,贼尬,那个时候你就只会喊我C牛B…

    原因三:学习虚拟机是为了今后更好的解决线上排查问题

    学习虚拟机是为线上排查问题打下基础。我们知道我们一个 Java 应用部署在线上机器上,肯定时不时会出现问题。除去网络、系统本身问题,很多时候 Java 应用出现问题,就是 Java 虚拟机的内存出现了问题。要么是内存溢出了,要么是 GC 频繁导致响应慢等等。

    那如何解决这些问题呢?首先,你必须学会看懂日志吧。那么你就必须要看得懂 GC 日志,这是 Java 虚拟机内容的一部分。你看懂了 GC 日志,那么你就得明白什么是年轻代、老年代、永久代、元数据区等,这些就是 Java 虚拟机的内存模型。你懂了 Java 虚拟机的内存模型,那你就得知道 Java 虚拟机是如何进行垃圾回收的,它们使用的垃圾回收算法是怎样的,它们有何优缺点。接下来就是各种垃圾回收器的特性。

    你看,这一切东西都是相关联的。你想要解决线上的 Java 应用崩溃问题,那么你就必须学会 GC 日志。要看懂 GC 日志,就必须学习 Java 虚拟机内存模型。要看懂 Java 虚拟机内存模型,你就要学会垃圾回收机制等等。

    学习JVM的好处

    学习JVM对于一个Java程序员的好处大概可以概括为下六点:

    1、能够明白为什么Java最早期被称为解释型语言,而后来为什么又被大家叫做解释与编译并存的语言(了解JVM中解释器以及即时编译器就可以回答这个问题);
    2、你能够理解动态编译与静态编译的区别,以及动态编译相对于静态编译到底有什么好处(JVM JIT);
    3、能够利用一些工具,jmap, jvisualvm, jstat, jconsole等工具可以辅助你观察Java应用在运行时堆的布局情况,由此你可以通过调整JVM相关参数提高Java应用的性能;
    4、可以清楚知道Java程序是如何执行的;
    5、可以明白为什么Java等高级语言具有可移植性强的特性。 其实这个问题相当于“为什么C/C++程序员需要学体系结构与编译原理?“
    6、能够知道你的头发是怎么没有的

    关于我之后的JVM专栏

    其实在开始写JVM专栏之前就很想写一个并发编程专栏了,想了很久,最后还是决定先写一个JVM专栏!学习JVM有一个最大的特点就是…学了就忘,嗯哼~

    由于虚拟机种类繁多这里就不一一列举,最常用的就是Hotspot虚拟机(翻译过来就是 热 地点、斑点,理解为热点也行)以后该专栏都是以Hotspot虚拟机为准的文章。

    如果想要更深入的理解JVM推荐看周志明老师的《深入理解Java虚拟机》。实战类型的,可以看葛一鸣老师的《实战Java虚拟机》

    为了方便大家学习JVM,不用去网上找相关书籍,博主准备了周志明老师的《深入理解Java虚拟机》电子书,慢慢啃吧hhhhhhhh…

    周志明老师的《深入理解Java虚拟机》:https://pan.baidu.com/s/1JoNm7LWKJNyF6bGX3j6MuQ
    提取码:i3xz

    以下是本JVM专栏的文章:

    别翻了,这篇文章绝对让你深刻理解java类的加载机制【JVM篇二】

    尽量抽空更新…

    再次提醒:学习JVM有一个最大的特点就是…学了就忘,嗯哼~

    最后,欢迎各位关注我的公众号,一起探讨技术,向往技术,追求技术…
    在这里插入图片描述
    参考:
    《深入理解Java虚拟机》
    https://www.cnblogs.com/chanshuyi/p/jvm_serial_00_why_learn_jvm.html

    展开全文
  • 为什么JVM中的新生代要有两个Survivor区?

    千次阅读 多人点赞 2018-04-02 08:58:58
    转自...1 为什么有Survivor区先不去想为什么有两个Survivor区,第一个问题是,设置Survivor区的意义在哪里? 如果没有Survivor,Eden区每进行一次Minor GC,存活的对象
  • JVM

    千次阅读 2018-08-06 19:47:22
    JVM JDK1.8 JVM内存模型 JVM(1):Java 类的加载机制 JVM(2):JVM内存结构 JVM(3):Java GC算法 垃圾收集器 JVM(4):Jvm调优-命令篇 JVM(5):tomcat性能调优和性能监控(visualvm) JVM(6):JVM调优-...
  • JVM详解——什么JVMJVM优点

    千次阅读 2019-06-11 01:12:52
    并且JVM的知识在Java面试中也是非常受面试官青睐的知识点,那对于JVM我们到底掌握哪些呢? 1、JVM概念 JVM是Java Virtual Machine(Java虚拟机)的缩写。 1.1、什么是Java虚拟机呢?Java虚拟机的好处是什么呢? ...
  • jvm 为什么要分方法区,堆,栈 求大神解疑 数据存储的结构是什么样的呀 什么好处
  • Java-什么JVMJVM有什么作用?

    千次阅读 2019-01-12 15:20:04
    JVM全称Java Virtual MAchine-Java虚拟机,我们可以直观的从名字上得出一个定义:JVM是java上的一个虚构出来的计算机,是一个位于Java与操作系统之间的中间态。自己完善的硬件结构,如处理器、...
  • 什么JVM

    万次阅读 多人点赞 2019-07-30 15:21:01
    什么JVM ? 解析:不仅仅是基本概念,还有 JVM 的作用。 答:JVM,即 Java Virtual Machine,Java 虚拟机。它通过模拟一个计算机来达到一个计算机所具有的的计算功能。JVM 能够跨计算机体系结构来执行 Java 字节...
  • 什么JVM

    千次阅读 2018-05-18 16:44:09
    说明:做java开发的几乎都知道jvm这个名词,但是由于jvm对实际的简单开发的来说关联的还是不多,一般工作个一两年(当然不包括爱学习的及专门做性能优化的什么的),很少人能很好的去学习及理解什么jvm,以及弄...
  • # 面试官问了2个问题。 ## 1:内存溢出如何造成的 ## 2:内存溢出前,为什么jvm没去回收。
  • jvm调优到底是什么

    万次阅读 多人点赞 2018-10-30 17:40:30
    面试总问的jvm调优到底是什么 请注意,jvm调优,调的是稳定,并不能带给你性能的大幅提升。服务稳定的重要性就不用多说了,保证服务的稳定,gc永远会是Java程序员需要考虑的不稳定因素之一。复杂和高并发下的...
  • 什么JVM

    万次阅读 多人点赞 2018-04-20 16:05:05
    说明:做java开发的几乎都知道jvm这个名词,但是由于jvm对实际的简单开发的来说关联的还是不多,一般工作个一两年(当然不包括爱学习的及专门做性能优化的什么的),很少人能很好的去学习及理解什么jvm,以及弄...
  • jvm虚拟机-什么jvm

    千次阅读 多人点赞 2016-12-30 17:23:39
    以前只是看博客什么的对jvm有一个大概的了解,但是没有深入研究。经过一段时间的研究深入理解java虚拟机后>>,才决定写一些关于jvm的文章,不别的只为了同为技术的程序员们少走一些弯路,因为这本书第一遍读起来...
  • JVM——(1)为什么学习虚拟机

    千次阅读 2021-04-18 21:14:05
    文章目录1、为什么要学习JVM虚拟机?前言一、开发人员如何看待上层框架二、架构师每天都在思考什么?知乎上条帖子:应该如何看招聘信息,直通年薪50万+?三、JVM与你啥相关?面试的需要(BATJ、TMD,PKQ等面试都...
  • 这是全网最硬核 JVM 系列的开篇,首先从 TLAB 开始。由于文章很长,每个人阅读习惯不同,所以特此拆成单篇版和多篇版 全网最硬核 JVM TLAB 分析(单篇版不包含额外加菜) 全网最硬核 JVM TLAB 分析 1. 内存分配...
  • JVM 相关 - 深入 JVM 的钥匙 WhiteBox API

    万次阅读 2020-12-25 17:07:54
    WhiteBox API 是 HotSpot VM 自带的白盒测试工具,将内部的很多核心机制的 API 暴露出来,用于白盒测试 JVM,压测 JVM 特性,以及辅助学习理解 JVM 并调优参数。WhiteBox API 是 Java 7 引入的,目前 Java 8 LTS ...
  • 什么jvm?

    万次阅读 多人点赞 2016-04-17 01:28:29
    说明:做java开发的几乎都知道jvm这个名词,但是由于jvm对实际的简单开发的来说关联的还是不多,一般工作个一两年(当然不包括爱学习的及专门做性能优化的什么的),很少人能很好的去学习及理解什么jvm,以及弄...
  • Microsoft JVM 以及 Taobao JVM 的介绍

    万次阅读 2020-09-14 02:16:36
    Microsoft JVM 微软为了在IE3浏览器中支持Java Applets,开发了Microsoft JVM。 Microsoft JVM只能在windows平台下运行,但确实是当时windows平台上性能最好的java虚拟机。 1997年,Sun指控微软侵犯商标成功,微软赔...
  • 1、Minor GC是发生在新生代中的垃圾收集,采用的复制算法; 2、新生代中每次使用的空间不超过90%,主要用来存放新生的对象; 3、Minor GC每次收集后Eden区和一块Survivor区都被清空; 4、老年代中使用Full GC,采用...
  • 这里就写篇文章分析一下,JVM的Xms和Xmx参数设置相同的值有什么好处?首先来了解一下相关参数的概念及功能。 Xms和Xmx参数定义 在启动Java应用程序时,我们通常可以通过参数Xms和Xmx来配置JVM的堆信息。不配置虽然...
  • JVM理解

    千次阅读 2017-03-04 11:55:41
    一台机器(操作系统)能启动多个JVM进程,各个JVM进程独自的数据空间和代码空间,互不影响,并且每调用java命令之后(执行启动类的main函数),就是启动一个JVM实例 只要你内存够大,配置足够高,可以启动多个JVM...
  • JVMJVM系列

    千次阅读 多人点赞 2017-08-06 21:25:38
    JVMJVM系列【JVM】Java虚拟机简介【JVMJVM类加载机制【JVMJVM内存区域【JVMJVM垃圾回收机制【JVMJVM执行引擎【JVMJVM沙箱机制【JVM】G1垃圾回收器
  • 杂谈JVM

    千次阅读 多人点赞 2020-11-21 10:21:06
    Jvm学习总结序jvm入门之运行时内存 序 学习jvm半月,为了防止自己学完就忘记,写此博客. ...一个虚拟机栈中又有什么呢,看看老大哥的栈中,是一个一个的栈帧,jvm自然也是栈帧了.除了栈帧,jvm还有一个小的可以忽略
  • JVM什么

    千次阅读 2019-03-03 14:24:25
    JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 Java语言的一个非常重要的特点就是与平台的...
  • jvm 内存模型

    万次阅读 多人点赞 2019-08-15 14:28:51
    是当前线程锁执行字节码的行号治时期,每条线程都一个独立的程序计数器,这类内存也称为“线程私有”的内存。正在执行java方法的话,计数器记录的是虚拟机字节码指令的地址(当前指令的地址)。如果是Natice...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 907,923
精华内容 363,169
关键字:

为什么要有JVM