我是大名鼎鼎的Java 虚拟机,  据说这个星球上每天有900多万程序员和我打交道,这真是一个惊人的数字. 这900多万人中不少人对我的技术内幕非常感兴趣, 有事儿没事儿都要把我“大卸八块”, 深入了解一下.甚至还有人从我的出生地--源代码--开始看起,弄得人家连一点隐私都没有了. 当然也有很多人对我的运行机理爱理不理, 理由很简单: Java虚拟机相关的事情只有在面试时才会问道,背诵一下那些垃圾回收算法,应付过去就可以了! 真的是这样吗?  面试官为什么喜欢问JVM原理? 难道他们没什么可问的…
相信大家已经了解到Java具有跨平台的特性,可以“一次编译,到处运行”,在Windows下编写的程序,无需任何修改就可以在Linux下运行,这是C和C++很难做到的. 那么,跨平台是怎样实现的呢?这就要谈及Java虚拟机(Java Virtual Machine,简称 JVM). JVM也是一个软件,不同的平台有不同的版本.我们编写的Java源码,编译后会生成一种 .class 文件,称为字节码文件.Java虚拟机就是负责将字节码文件翻译成特定平台下的机器码然后运行.也就是说,只要在不同平台上安…
之前由于考研,对于虚拟机的认识疏忽了太多,现在重新整理回顾一下. 如上图所示,jvm的内存区域(运行时数据区)共分为5处:方法区(Method Area).虚拟机栈(vm Stack).本地方法栈(Native Method Stack).堆(Heap)和程序计数器(Program Counter Register) 程序计数器:它是一块内存较小的区域,可以看成是线程所执行的字节码的行号指示器,字节码解释器运行时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令.在java虚拟机中,多线…
虚拟机jvm 包括 类加载机制 ,运行时数据区域 运行时数据区域包括 ,程序计数器,虚拟机栈和本地方法栈,堆,方法区. 程序计数器是一块较小的内存控件, 用来指定当前字线程执行节码的行数 ,每个程序计数器都是线程私有的. 虚拟机栈,每个方法执行的同时都会创建一个栈帧,用于存储局部变量表.操作数栈.方法出入口等信息. 每个方法的调用到执行过程就是一个栈帧从入栈道出栈的过程.局部变量包括基本数据.对象引用和返回地址等. 本地方法栈和虚拟机栈存的东西是一样的,只不过本地方法栈存的执行java方法的,本…
一.学习java虚拟机的原因 二.java代码的运行 java -c 编译成.class 文件(java字节码) java字节码(.class文件)无法直接执行,因此,java虚拟机需要将字节码编译成机器码.在HotSpot里面,上述翻译过程有两种方式:(1)解释执行:即逐条将字节码翻译成机器码并执行(2)即时编译JIT:即将一个方法中包含的所有字节码编译成机器码后再执行. 前者的优势在于无需等待编译,而后者的优势在于实际运行速度更快.HotSpot 默认采用混合模式,综合了解释执行和即时编译,…
为什么要学习java虚拟机 1.学习java虚拟机的本质,是了解java程序是如何被执行且优化的.这样一来,才可以从内部入手,达到高效编程的目的.与此同时,你也可以为学习更深层级.更为核心的java技术打好基础. 2.学习java虚拟机的好处 (一)可以针对自己的应用,最优化匹配运行参数. (二)可以更好地规避虚拟机在使用中的bug,也可以更快地识别出java虚拟机中的错误. (三)学习最前沿.最成熟的垃圾回收算法实现以及及时编译器的实现,对以后学习其他的代码托管技术很有帮助. (四)虚拟机也可…
大家好,我是极客时间<深入拆解Java虚拟机>作者.Oracle Labs高级研究员郑雨迪.有幸借这个专题的机会,能和大家分享为何Java工程师要学Java虚拟机?如何掌握Java虚拟机? 工欲善其事,必先利其器 "为什么学Java虚拟机"这个问题,就和"为什么要学习数据结构和算法"是一个道理:工欲善其事,必先利其器. 我总结了三点必须要学好Java虚拟机的理由: Java已然是一门主流的工程语言,拥有大量的应用.作为Java语言的执行引擎,Java虚拟…
毕业8年,前5年的职业规划是做计算广告,后来感觉计算广告这一行更注重的是业务而非技术,而自己的性格更适合做技术,所以毅然决然的辞职, 全职1年半时间写了2本关于Java编译器与虚拟机的书,今年年初来到杭州做Java虚拟机开发相关的工作,也算是顺利切入Java虚拟机这一行了. 差不多从下决心研究Java虚拟机开始已经过去了3年多的时间,期间还研究了Java前端编译器,这一块也花费了我好多精力,着实有些不值,因为Java前端编译器相对虚拟机来说并不显的那么重要,而且目前也没有公司有Java前端编译器…
前言 本来想着关于写JVM这个专栏,直接写知识点干货的,但是想着还是有必要开篇讲一下为什么要学习JVM,这样的话让一些学习者心里有点底的感觉比较好... 原因一:面试 不得不说,随着互联网门槛越来越高,JVM知识也是中高级程序员阶段必问的一个话题!现在不像以前了,以前会点html都好找工作,现在由于学习软件的人越来越多,而且每年大学生都在毕业(而老一辈的也很少换工作)人只会越来越多,随便在大街上拉一个头发茂盛的大叔都可能就是搞软件的,现在有一股妖风,不管啥公司都慢慢像阿里这样的大公司靠近,面试不…
转行学java之前,总是听着大佬们说着java像个渣男一样可以跨平台,一次编译到处运行,瞬间,我就坚定了学java的信念,哎呀妈呀,得劲.真的学java之后,好像渣男也不是那么好学的,尤其这货的必杀技,各年龄段(操作系统)通杀太难了,这可激起了我的小暴脾气,还有能难倒小灏哥的,终于在我兢兢业业的努力下,发现了一个道理,还真有.随着慢慢攻克,看书,看看视频课,也了解了些皮毛,写出来当做个笔记吧. 学习的第一步,就是去oracle官网下载,下载完打开发现有俩目录jdk和jre,这就尴尬了,我要学的不…