`

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,它生在量上的束在文档中也有详细明。因复杂,考到篇幅笔者就不打算解一遍了。

分享到:
评论

相关推荐

    jdk,jvm源码

    Java虚拟机(JVM)是Java程序运行的核心,它负责解释和执行字节码,为Java应用程序提供了一个跨平台的运行环境。JDK(Java Development Kit)包含了开发和运行Java程序所需的所有工具,包括JVM。当我们谈论"jdk,jvm...

    推荐一些JVM原理,JVM调优,JVM内存模型,JAVA并发 电子书1

    标题中提到了JVM原理、JVM调优、JVM内存模型和JAVA并发,这些都是Java虚拟机(JVM)相关的核心概念。JVM是运行Java字节码的虚拟计算机,为Java提供了一个跨平台的环境,确保Java程序可以在不同的操作系统上运行而...

    SAP JVM 8.1 64 bits

    SAP JVM 8.1 64位是一个专为SAP系统设计的Java虚拟机,它基于Oracle的Java Development Kit (JDK) 进行优化,以满足SAP应用程序的特定需求。SAP JVM旨在提高性能、可靠性和安全性,同时确保与SAP产品的无缝集成。...

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

    ### JVM 详细介绍:掌握 JVM 的各个组成部分与功能 #### 一、Java 源文件编译及执行 Java 应用程序的核心在于源文件的编译与执行。不同于 C/C++ 这类需要针对不同平台进行编译的语言,Java 采用了一种更为灵活的...

    JVM中文指令手册.pdf

    JVM(Java Virtual Machine,Java虚拟机)是运行所有Java程序的假想计算机,是Java程序的运行环境,负责执行指令、管理数据、内存、寄存器等,是实现Java跨平台特性的关键部分。JVM指令手册详细记录了JVM的所有操作...

    深入JVM内核—原理、诊断与优化视频教程-3.常用JVM配置参数

    在Java开发领域,JVM(Java Virtual Machine)是运行所有Java程序的核心,它负责解析字节码并执行程序。深入理解JVM的内核原理、诊断技巧以及优化方法对于提升应用性能至关重要。本教程——“深入JVM内核—原理、...

    JVM必知必会

    ### JVM必知必会知识点梳理 #### 1. JVM的定义与层次 Java虚拟机(JVM)具有多重含义: - **一套规范**:即Java虚拟机规范,定义了Java虚拟机应该具有的行为。 - **一种实现**:例如HotSpot、J9、JRockit,它们都是...

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

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

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

    《深入JVM内核—原理、诊断与优化》是一份深度探索Java虚拟机(JVM)的视频教程,旨在帮助开发者全面理解JVM的工作机制,掌握性能诊断技巧,并能进行有效的优化。本教程覆盖了从基础到高级的JVM主题,不仅适用于Java...

    监测JVM各项性能指标

    在Java开发领域,JVM(Java Virtual Machine)是运行Java应用程序的关键组件,它负责解析字节码并执行程序。为了确保应用的高效运行和优化,开发者需要了解如何监测JVM的各项性能指标。JVM自带了一些工具,可以帮助...

    R大(国内JVM权威)资料合集

    R大作为国内JVM领域的权威专家,分享了一系列与JVM相关的知识点,涉及高级语言虚拟机的基础概念、重要书籍推荐、编译器设计与优化等多个方面。这些内容不仅对初学者友好,也为专业人士提供了深入理解JVM机制的机会。...

    jvm crash的崩溃日志详细分析及注意点

    JVM(Java Virtual Machine)是Java程序运行的核心组件,它负责解释和执行字节码。然而,当JVM出现严重错误或无法恢复的问题时,它可能会崩溃并生成一个崩溃日志,这通常被称为`hs_err_pid.log`文件。这篇内容将深入...

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

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

    JVM图解-JVM指令-JVM原型图.rar

    在这个压缩包中,"JVM图解.png"可能是对JVM内部结构的可视化表示,"JVM图解"可能是一个详细的文档,解释了JVM的工作原理,而"JVM指令手册 中文版"则提供了JVM可执行的所有指令的详细信息。下面,我们将深入探讨JVM的...

    idea插件JVM内存工具JProfiler11

    5. **JVM配置调整**:JProfiler11还可以提供JVM参数建议,帮助开发者正确设置JVM初始堆大小、最大堆大小、内存池等关键参数,确保应用程序稳定运行。 在实际使用中,JProfiler11的详细报告和可视化界面使得问题定位...

    狂神说JVM探究.rar

    【狂神说JVM探究】是一份集合了多种格式的学习资料,主要涵盖了Java虚拟机(JVM)的基础知识。这份资料出自B站上的【狂神说Java】系列教程,为快速入门JVM提供了详实的笔记。以下是根据这些资源可能包含的一些关键...

    jvm 启动过程 JVM 原理

    Java虚拟机(JVM)是Java程序运行的基础,它是一个抽象的计算机系统,负责执行Java字节码。本文将深入探讨JVM的启动过程及其基本原理。 首先,我们需要理解JVM的基本概念。JVM是Java Virtual Machine的缩写,它是...

    SAP JVM 4.1 64 bits

    SAP JVM 4.1 64位是一个专为SAP系统设计的Java虚拟机,它主要用于运行SAP的应用程序和服务。此版本是为64位操作系统优化的,旨在提供更好的性能和内存管理能力,特别是在处理大数据量和复杂计算场景时。 首先,我们...

    马士兵jvm调优笔记.docx

    ### 马士兵JVM调优笔记知识点梳理 #### 一、Java内存结构 Java程序运行时,其内存被划分为几个不同的区域,包括堆内存(Heap)、方法区(Method Area)、栈(Stack)、程序计数器(Program Counter Register)以及...

    深入JVM内核—原理、诊断与优化视频教程-2.JVM运行机制

    【JVM运行机制详解】 Java虚拟机(JVM)是Java平台的核心组成部分,它负责执行字节码,为Java程序提供跨平台的运行环境。在深入理解JVM内核的运行机制时,我们需要关注以下几个关键点: 1. **类加载机制**:JVM...

Global site tag (gtag.js) - Google Analytics