您好,欢迎访问三七文档
Java虚拟机基础温绍锦11年8月25日星期四提纲•HotSpot•ClassFile•ClassLoader•内存模型、锁、同步•JVM内存管理和垃圾收集11年8月25日星期四HotSpot介绍•Java发展历程•JVM列表•OpenJDK•编译执行过程•解析执行和JIT编译11年8月25日星期四Java发展历程1995200020052010JDK1.0JDK1.1J2SE1.2J2SE1.3J2SE1.4J2SE5.0JavaSE6JavaSE72004-‐10-‐30泛型For-‐EachAutoboxing变长参数u6l.concurrentJMX2002-‐2-‐6正则表达式NIOExcep6on ChainJAXP (XML)Java Web Start2011-‐7-‐28NIO 2.0Invoke DynmaicString-‐SwitchTry-‐With-‐Resource2006-‐10-‐11Annota6onSwing增强JPDA增强JM Tool Interface1998-‐10-‐8SE、ME、EE反射集合框架Java IDLSwingPlugin-‐inJIT Compiler1997-‐2-‐19AWTInner ClassJavaBeansJDBC2000-‐5-‐8HotSpotJava SoundJNDIJPDA (Debug)阿里巴巴B2B主流版本1995年,Sun发布Java1.0,承诺:WriteOnce,RunAnywhere11年8月25日星期四Java平台11年8月25日星期四Java是最通用的业务编程语言11年8月25日星期四Java虚拟机列表虚拟机描述OracleHotSpot原来属于SUN,SUN被Oracle收购之后属于Oracle,是目前最流行的JVMOracleJRockit原来属于BEA,BEA被Oracle收购之后属于Oracle,拥有⼀一些优秀特性,将会和HotSpot合并IBMJ9IBM的JDKAppleMacOSRuntimeforJavaApple公司开发的虚拟机,运行在MacOSX系统上ApacheHarmonyApache组织开发的虚拟机,基于ApacheLicense2.0DalvikGoogle实现的JVM,Android的虚拟机。MaxineOracle的⼀一个用Java编写的Java虚拟机,用于研究目的其它有很多虚拟机的实现合并11年8月25日星期四HotSpot•Oracle(SUN)的JVM实现•主要用C++实现•解析器和编译器混合执行模式•默认解析执行,对执行频率高(热点)的代码做动态编译•2006年开源11年8月25日星期四OpenJDK•Sun在2006年11月13日把HotSpot及编译器通过GPL协议开源,称为OpenJDK•这是自由软件社区的重要里程碑•加入OpenJDK的厂商包括:Oracle、IBM、Apple、SAP•支持的操作系统包括:Windows、Linux、Solaris、BSD、MacOS、Haiku。•支持的硬件体系架构包括:x86、adm64、sparc、PowerPC、mips、IA64、ARM11年8月25日星期四•⼀一个ByteCode Interpreter•两个 JIT Compiler:•C1 (client编译器)•轻量级•编译时间更短 ,占用内存少,适合GUI•C2 (server编译器)•重量级•执行效率更高,大量编译优化,适合服务器HotSpot包括:11年8月25日星期四$java-versionjavaversion1.6.0_26Java(TM)SERuntimeEnvironment(build1.6.0_26-b03-383-11A511)JavaHotSpot(TM)64-BitServerVM(build20.1-b02-383,mixedmode)解析和编译混合模式java-Xint-versionjavaversion1.6.0_26Java(TM)SERuntimeEnvironment(build1.6.0_26-b03-383-11A511)JavaHotSpot(TM)64-BitServerVM(build20.1-b02-383,interpretedmode)java-Xcomp-versionjavaversion1.6.0_26Java(TM)SERuntimeEnvironment(build1.6.0_26-b03-383-11A511)JavaHotSpot(TM)64-BitServerVM(build20.1-b02-383,compiledmode)纯解析模式纯编译模式HotSpot三种执行模式从Java5开始,SunHotSpotVM可以根据环境自动选择启动参数,在“服务器级”机器上会自动选用-server模式(但在32位Windows上总是默认使用-client模式)。“服务器级”指CPU为2核或以上(或者2CPU或以上),并且内存有2GB或更多的机器。11年8月25日星期四⼀一些关于JIT的参数OptionFeature-Xintjvm选择纯解析模式,缺省是混合模式-Xcompjvm选择纯编译模式,缺省是混合模式-XX:+AggressiveOpts采用激进的优化办法-XX:+CompileThreshold=1000判断是否热点进行编译的调用次数-XX:+CITime输出JIT编译所耗费的时间-XX:+PrintCompilation当⼀一个方法被编译时,打印信息。这个参数对于调优基础组件有用。-XX:InlineSmallCode-XX:MaxInlineSize=35-XX:FreqInlineSize=代码内联的判断依据,调整编译后代码的字节大小是判断条件-XX:LoopUnrollLimit=编译优化时将循环展开的上限值11年8月25日星期四Class文件格式•Java编译执行流程•ClassFile的格式介绍•ClassFile中FieldInfo和MethodInfo介绍•类型描述Descriptor介绍•ClassFile中的Attribute介绍•JVM指令介绍11年8月25日星期四PCOperatingSystemclassFoo{/*..*/}classFoo{/*..*/}classFoo{/*..*/}classFoo{/*..*/}classFoo{/*..*/}classFoo{/*..*/}classFoo{/*..*/}...iconst_0iloadistore_1...内存管理ByteCodeVerifierInterpreter/JITCompilerJavaAPIIntelX86JVMPCOperatingSystem内存管理ByteCodeVerifierInterpreter/JITCompilerJavaAPIAMD64JVMJREJREclassFoo{/*..*/}classFoo{/*..*/}classFoo{/*..*/}deff(x):printx...classFoo{/*..*/}classFoo{/*..*/}classFoo{/*..*/}...iconst_0iloadistore_1...javacjythonjavabytecodefile(.class/.jar)javabytecodefile(.class/.jar)javasourcefile(.java)Pythonsourcefile(.py)源码字节码执行字节码是实现跨平台的基础编译执行流程11年8月25日星期四ClassFileFormatMagicNumberVersionConstantPoolAccessFlagsThisClassNameSuperClassNameInterfacesFieldsMethodsAttributes魔数,值为0xCAFEBABE,Java创始人JamesGosling制定包括minor_version和major_version,minor_version:1.1(45),1.2(46),1.3(47),1.4(48),1.5(49),1.6(50),1.7(51)。指令集多年不变,但是版本号每次发布都变化。包括字符串常量、数值常量等4个字节2+2个字节2+n个字节2个字节2个字节2个字节2+n个字节2+n个字节2+n个字节2+n个字节11年8月25日星期四AccessFlagsNameIndexDescriptorIndexAttributesAccessFlagsNameIndexDescriptorIndexAttributes字段方法privatepubicprotectedstatic...真正的名称存在常量池中,这里保存⼀一个Index...真正的描述信息存在常量池中,这里保存⼀一个Index...访问标识名称类型信息属性信息包括:泛型信息异常信息调试信息字段和方法11年8月25日星期四DescriptorTypeBbyte带符号的byteCcharUnicode字符Ddouble双精度浮点数Ffloat单精度浮点数Iint32位整数Jlong64位整数Sshort16位整数ZbooleantrueorfalseLClassname;reference引用类型,Ljava/lang/String;表示StringLjava/lang/Integer;表示Integer[reference数组类型,例如:[I表示int[],[Ljava/lang/Object;表示Object[],[[[D表示double[][][]11年8月25日星期四Attribute类型使用范围ConstantValueFieldInfo定义字段的初始值CodeMethodInfo方法的代码StackMapTableCodeAttribute调试信息ExceptionMethodInfo异常信息InnerClassClassFile内嵌类EnclosingMethodClassFile匿名类SyntheticClassFile/MethodInfo/FieldInfo缺省构造函数等SignatureClassFile/MethodInfo/FieldInfo泛型信息SourceFileClassFile源码信息SourceDebugExtensionClassFile调试信息LineNumberTableCodeAttribute调试信息LocalVariableTableCodeAttribute调试信息LocalVariableTypeTableCodeAttribute调试信息DeprecatedClassFile/MethodInfo/FieldInfoRuntimeVisibleAnnotationsClassFile/MethodInfo/FieldInfoAnnotation信息RuntimeInvisibleAnnotationsClassFile/MethodInfo/FieldInfoAnnotation信息RuntimeVisibleParameterAnnotationsMethodInfoAnnotation信息RuntimeInvisibleParameterAnnotationsMethodInfoAnnotation信息AnnotationDefaultMethodInfoAnnotation信息11年8月25日星期四publicstaticf()IICONST_1ISTORE0ICONST_2ISTORE1ILOAD0ILOAD1IADDBIPUSH10IMULISTORE2ILOAD2IRETURNMAXSTACK=2MAXLOCALS=3
本文标题:Java虚拟机基础
链接地址:https://www.777doc.com/doc-5055726 .html