`

JVM

    博客分类:
  • JAVA
阅读更多

一个Java程序,如果不了解JVM的工作原理,就很从底去把握Java言和Java程序的运作机制。里先推荐一个最威的JVM的文档,大家只要查过Java API的可以在里面的一个叫“API, Language, and Virtual Machine Document”标题下看到四个子标题,第一个是我最熟悉的Java API Specification,很少会有人注意到第三和第四个子标题,分是“The Java Language Specification”和“The Java Machine Specification”后面都有(Download)字JVM的那个URL直接接到http://java.sun.com/docs/books/vmspec/2nd-edition/里地址。我可以下到一份非常详细JVM原理的官方文档。笔者时间花了1个星期来阅读里把自己的收跟大家来分享一下,大概从这么几个方面来  

1   JVM实现机制

Java机就是一个小的算机,有自己的指令集,有自己的文件系,管理内部的表和数据,负责读class文件里面字节码,然后转换成不同操作系CPU指令,从而使得Java程序在不同的操作系利的跑起来。所以WindowJVM能把字节码转换Window的指令集,LinuxJVM能把字节码转换Linux的字,同理Solaris,它彼此之是不能通用的。最早一款的原型然是Sun公司开发的,但展到在其任何厂商都可以自己去实现一个虚机,用来取字节码转换OS指令。甚至我可以认为JVMJava言都没有系,因你自己哪怕用事本写一串字节码,也可以JVM来解析运行,只要你的字节码能通JVM验证  

JVM验证是很格的,里只一些有趣的地方。大家还记Java图标是一个杯咖啡?究其史我可以,但有更而易的方式是JVM判断一个文件是否是class文件?JVM的做法是取前4个字节转换16制数,判断是否等于0xCAFEBABE个数。注意到单词?“cafebabe”,代表着国外一咖啡品牌,似乎叫做Peet’s       coffee-baristasJava的人了方便记忆选择这样一个16制数作为标class文件的,所以任何class文件都必具有4个字部。我可以用DataInput个接口的实现类验证一下,取任何一个class文件的第一个intintJava里面是四个字转换16制一定会是0xcafebabe的。  

所以里想告大家的是,JVM并没有那神秘,我完全可以理解它的构造。  

 

2   Java的基概念  

配合JVM构,在Java言中也会有很多特点比较鲜明的地方。比如值计算从来不会检查位溢出。任何量存的二制即使位全部1了仍然可以加,全部0了仍然可以减。大家只要稍微测试一下就知道了,看几个例子:  

                int  max       =       Integer.MAX_VALUE;  

                int  min       =       Integer.MIN_VALUE;  

                max+1  == min;   //true  

                min-1 ==  max;  //true  

                0.0/0.0   //得到“NaN(Not       a       number)  

                1/0.0   //Infinity  

                -1/0.0  //-Infinity  

                1-1/0   //ArithmeticException唯一的异常情况  

看完几个例子,大家是否能更好的把握Java的数运算呢?Java完全遵照IEEE-754准来定义单双精度浮点数以及其他的数方式。  

另外Java里面有一个概念叫做Daemon Thread(守护线程),知道它的存在主要是了理解虚机的生命周期。当我运行java命令,从main函数入的那一刻起,虚机就始启运行了。Main所在的主线程也会启起来,它属于非守护线程。与之同一些守护线程也会同,最典型的守护线程代表就是GC(垃圾收集器)线程。JVM机什么时候退出呢?是在所有的非守护线束的那一刻,JVMexit。注意候守护线程并未退出,很可能继续完成它的本工作之后才会束,但虚机的生命周期已提前于它束了。  

 

3   JVM内部的基本概念  

机内部有一些概念,全部列是不现实的,太繁也没有意。除非您真的想自己去做一个JVM。笔者只列部分概念:  

首先我来看一个叫做ReturnAddress量,它是JVM用来存方法出口或者说进行跳的依据,把任何地址存入量就一定会按照个地址来跳。我需要注意的就是finally有比方法return更高的赋值给ReturnAddress。同存在方法returnfinally return,一定是按照finally里面的return准。  

JVM有自己的Heap,能被所有线程共享,存着所有的象,内存是动态被分配的。线程,有自己的Stack里面存位叫做Frame)。里面就记录着零时变量、象引用地址、方法返回等数据。JVM有一个叫做Method       Area的地方,存着一段一段的可行代一段就是一个方法体,也能被所有线程共享。所以我们说一个线程其run方法跑起来,跟它的中声明的其他方法是两个概念。因其他的方法包括的所有的象,候都充当为资源被线程使用。  

JVM有自己管理内存的方案,因它具有文件系的功能,我可以看成一个小型的数据,内部有许许多多不同的表。表的字段可能是另外一表的地址,也可以直接就是一个存数据的地址JVM所有运行的解析验证计算等管理工作,实际上都是在管理些表的变动,如果我从数据的角度来看,JVM所做的就是根据你的代来操作那多个表最后返回果的程。里面的表构包括class的表、field表、method表、attribute表等。  

 

4   JVM的指令集   

JVM有自己的指令集,笔者从前也看一些算机构和汇编语言的数,建大家也稍微看看,了解设计一个高效可用的算机指令集是多么复杂又多重要的程。JVM的指令集,职责是管理好Java程序编译出来的字节码,相而言指令集的名称就多少和Java言相了,比如指令集里就有sastore,saload表示array里面short的存和取、d2i表示从double转换intmonitorenter表示synchronizedgetstaticputstatic表示态标量的存取、jsrret等跳指令……  

了便于记忆设计JVM指令集的人们约f开头的跟floatddoubleiintsshortaarray。有趣的可以细读文档里面的一个指令的作用。因只是作了解,里就不多了。  

 

5   一些Java关键字的实现原理  

文档详细的列了很多加、初始化、加等操作的程。笔者得比有用的第一是Java里面只有Array不是由ClassLoader象,其他的象全部都必由一个ClassLoader来加。另外package的概念除了似于C++namespace,是一命名空之外,底实现定同一个package下的由同一个器来加,所以package的概念可以认为是被同一个器加  

另外在多线程中,有很多细节值得去体会。线程有自己的Working memory,它从能被共享的Main Memory中去数据、修改、然后再存回去。笔者一直认为线程就是数据里面事的前身或者祖先。我只要稍微比一下它的行,就会发现很多一致性。事也是操作被事共享的表数据,你改完我改,序不一致就会出现脏数据,而线程同会出现脏数据。我们对线程加的策略,同在事中也有适用。当然多事的情况然比多线程更加复杂,但我只要理解了多线程,相信数据的效果也是非常有帮助的。Java里面除了synchronized帮助同线程之外,有一个弱同的操作关键字是volatile,它生在量上的束在文档中也有详细明。因复杂,考到篇幅笔者就不打算解一遍了。

分享到:
评论

相关推荐

    JVM入门实战/arthas实战/垃圾回收算法/垃圾回收器/jvm内存模型分析

    本系列课程从JVM基础到高级实战,老师手把手教你如何进行JVM调优,思路清晰,没有废话,旨在挑战高薪。 课程亮点: 1、基于阿里arthas进行JVM调优; 2、基于代码排查OOM问题,拒绝空讲; 3、总结JVM通用的调优思路;...

    JVM基础.doc

    学习关于JVM基础,java内模型的全面透析,Jar hell问题以及解决办法,Class文件格式 • Java编译执行流程 • ClassFile的格式介绍 • ClassFile中FieldInfo和MethodInfo介绍 • 类型描述Descriptor介绍 • ClassFile...

    jvm指令手册 +JVM必知必会,掌握虚拟机编译过程.rar

    JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 引入Java语言虚拟机后,Java语言在不同平台...

    jvm

    jvm

    涨见识!JVM性能监控与调优实战 一线大厂大牛讲师的JVM优化案例与解决方案课程

    JVM性能监控与调优实战课程,作为整篇课程的重中之重,非常值得同学们参考学习。课程前端讲解了JVM的性能监控和调优的概述,对调优的的方法和工具进行讲解学习,让同学们掌握方法,理解知识。课程的中间阶段我们进行...

    jdk,jvm源码

    jvm源码,jvm-native的源码,jvm支行机制,可对jvm的运行过程进行分析 个人网站:https://www.zhangjunbk.com

    Introduction to JVM Languages

    Introduction to JVM Languages English | 2017 | ISBN-10: 178712794X | 390 pages | PDF/MOBI/EPUB (conv) | 6.42 Mb Key Features This guide provides in-depth coverage of the Java Virtual Machine and its ...

    JVM与GC调优课程视频

    JVM与GC调优课程视频 〖课程介绍〗: JVM与GC调优课程视频 〖课程目录〗: 1.笔记/ ├── 第1篇-字节码篇.png?x-oss-process=style/pnp8 ├── 第2篇-类的加载篇.png?x-oss-process=style/pnp8 ├── 第3篇-运行时...

    (46页完整版)JVM体系结构与GC调优.zip

    46页PPT详解JVM,46页PPT详解JVM,46页PPT详解JVM,46页PPT详解JVM,46页PPT详解JVM,46页PPT详解JVM,46页PPT详解JVM,46页PPT详解JVM,46页PPT详解JVM,46页PPT详解JVM,46页PPT详解JVM,46页PPT详解JVM,46页PPT...

    JVM面试资料:JVM结构、JVM调优、四大垃圾回收算法、七大垃圾回收器

    JVM面试资料。 JVM结构:类加载器,执行引擎,本地方法接口,本地内存结构; 四大垃圾回收算法:复制算法、标记-清除算法、标记-整理算法、分代收集算法 七大垃圾回收器:Serial、Serial Old、ParNew、CMS、Parallel...

    nginx-upstream-jvm-route 和 nginx 对应版本,亲测可用

    此资源有两个文件,含 nginx-upstream-jvm-route 和 nginx 对应版本,都是tar.gz文件。 安装方法网上很多就不写了,亲测可用。 不用担心版本不匹配造成安装失败,再浪费积分去到处下载尝试的烦恼。 此资源有两个文件...

    metrics-jvm-3.1.5-API文档-中文版.zip

    赠送jar包:metrics-jvm-3.1.5.jar; 赠送原API文档:metrics-jvm-3.1.5-javadoc.jar; 赠送源代码:metrics-jvm-3.1.5-sources.jar; 赠送Maven依赖信息文件:metrics-jvm-3.1.5.pom; 包含翻译后的API文档:...

    Android Studio 报错failed to create jvm error code -4的解决方法

    代码如下:failed to create jvm error code -4 这一般应是内存不够用所致,解决方法参考如下。 打开 Android Studio 安装目录下的bin目录,查找并打开文件 studio.exe.vmoptions,修改代码: 代码如下:-Xmx512m 为...

    jvm 详细介绍,了解jvm各个组成部分和功能

    jvm 详细介绍,了解jvm各个组成部分和功能

    JVM调优实践 ⼀、JVM调优准备⼯作 实验报告 pdf

    JVM调优实践 ⼀、JVM调优准备⼯作 1. 机器环境: 机器 CPU 内存 单机 4C 16G 2. 默认启动参数 JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256 -XX:MetaspaceSiz e=128m -XX:MaxMetaspaceSize=320m" JAVA_...

    jvm内存参数调优

    其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容; 其三是非Stable参数(-XX),此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用; 本文...

    jvm内存状况查看

    Java 本身提供了多种丰富的工具来帮助开发人员查看和分析 GC 以及 JVM 内存的状况。 输出GC日志 输出 GC 日志对于跟踪分析 GC 的状况,无疑是最明显和直接的分析内存回收状况的方 法,只是 GC 日志输出后需要人肉的...

    深入JVM内核 - 原理、诊断与优化

    目前,Java是最为流行的编程语言之一,它的基础平台就是JVM。除了Java,如JRuby、Scala、Clojure等语言也运行在JVM平台。熟悉和掌握JVM平台有着重要的实用价值和意义。 在本课程中个,将详细介绍JVM的基本原理、...

    JVM内存空间分配笔记

    主要是JVM内存分配及简单的JVM性能调优

    JVM规范--高手总结

    JVM规范--高手总结 Java相关 1 1.1Java定义 1 1.2Java的开发流程 1 1.3Java运行的原理 2 1.4半编译半解释 3 1.5平台无关性 4 JVM内存模型 4 2.1 JVM规范 5 2.2 Sun JVM 8 2.3 SUN JVM内存管理(优化) 10 2.4 SUN JVM...

Global site tag (gtag.js) - Google Analytics