The Java® Virtual Machine Specification Java SE 11 Edition
Total Page:16
File Type:pdf, Size:1020Kb
The Java® Virtual Machine Specification Java SE 11 Edition Tim Lindholm Frank Yellin Gilad Bracha Alex Buckley Daniel Smith 2018-08-21 Specification: JSR-384 Java SE 11 (18.9) ("Specification") Version: 11 Status: Final Release Specification Lead: Oracle America, Inc. ("Specification Lead") Release: September 2018 Copyright © 1997, 2018, Oracle America, Inc. All rights reserved. The Specification provided herein is provided to you only under the Limited License Grant included herein as Appendix A. Please see Appendix A, Limited License Grant. Table of Contents 1 Introduction 1 1.1 A Bit of History 1 1.2 The Java Virtual Machine 2 1.3 Organization of the Specification 3 1.4 Notation 4 1.5 Feedback 4 2 The Structure of the Java Virtual Machine 5 2.1 The class File Format 5 2.2 Data Types 6 2.3 Primitive Types and Values 6 2.3.1 Integral Types and Values 7 2.3.2 Floating-Point Types, Value Sets, and Values 8 2.3.3 The returnAddress Type and Values 10 2.3.4 The boolean Type 10 2.4 Reference Types and Values 11 2.5 Run-Time Data Areas 11 2.5.1 The pc Register 12 2.5.2 Java Virtual Machine Stacks 12 2.5.3 Heap 13 2.5.4 Method Area 13 2.5.5 Run-Time Constant Pool 14 2.5.6 Native Method Stacks 14 2.6 Frames 15 2.6.1 Local Variables 16 2.6.2 Operand Stacks 17 2.6.3 Dynamic Linking 18 2.6.4 Normal Method Invocation Completion 18 2.6.5 Abrupt Method Invocation Completion 18 2.7 Representation of Objects 19 2.8 Floating-Point Arithmetic 19 2.8.1 Java Virtual Machine Floating-Point Arithmetic and IEEE 754 19 2.8.2 Floating-Point Modes 20 2.8.3 Value Set Conversion 20 2.9 Special Methods 22 2.9.1 Instance Initialization Methods 22 2.9.2 Class Initialization Methods 22 2.9.3 Signature Polymorphic Methods 23 2.10 Exceptions 23 iii The Java® Virtual Machine Specification 2.11 Instruction Set Summary 26 2.11.1 Types and the Java Virtual Machine 26 2.11.2 Load and Store Instructions 29 2.11.3 Arithmetic Instructions 30 2.11.4 Type Conversion Instructions 32 2.11.5 Object Creation and Manipulation 34 2.11.6 Operand Stack Management Instructions 34 2.11.7 Control Transfer Instructions 34 2.11.8 Method Invocation and Return Instructions 35 2.11.9 Throwing Exceptions 36 2.11.10 Synchronization 36 2.12 Class Libraries 37 2.13 Public Design, Private Implementation 37 3 Compiling for the Java Virtual Machine 39 3.1 Format of Examples 39 3.2 Use of Constants, Local Variables, and Control Constructs 40 3.3 Arithmetic 45 3.4 Accessing the Run-Time Constant Pool 46 3.5 More Control Examples 47 3.6 Receiving Arguments 50 3.7 Invoking Methods 51 3.8 Working with Class Instances 53 3.9 Arrays 55 3.10 Compiling Switches 57 3.11 Operations on the Operand Stack 59 3.12 Throwing and Handling Exceptions 59 3.13 Compiling finally 63 3.14 Synchronization 66 3.15 Annotations 67 3.16 Modules 68 4 The class File Format 71 4.1 The ClassFile Structure 72 4.2 Names 77 4.2.1 Binary Class and Interface Names 77 4.2.2 Unqualified Names 78 4.2.3 Module and Package Names 78 4.3 Descriptors 79 4.3.1 Grammar Notation 79 4.3.2 Field Descriptors 79 4.3.3 Method Descriptors 81 4.4 The Constant Pool 82 4.4.1 The CONSTANT_Class_info Structure 85 4.4.2 The CONSTANT_Fieldref_info, CONSTANT_Methodref_info, and CONSTANT_InterfaceMethodref_info Structures 86 4.4.3 The CONSTANT_String_info Structure 87 iv The Java® Virtual Machine Specification 4.4.4 The CONSTANT_Integer_info and CONSTANT_Float_info Structures 87 4.4.5 The CONSTANT_Long_info and CONSTANT_Double_info Structures 89 4.4.6 The CONSTANT_NameAndType_info Structure 90 4.4.7 The CONSTANT_Utf8_info Structure 91 4.4.8 The CONSTANT_MethodHandle_info Structure 93 4.4.9 The CONSTANT_MethodType_info Structure 95 4.4.10 The CONSTANT_Dynamic_info and CONSTANT_InvokeDynamic_info Structures 95 4.4.11 The CONSTANT_Module_info Structure 96 4.4.12 The CONSTANT_Package_info Structure 97 4.5 Fields 98 4.6 Methods 100 4.7 Attributes 103 4.7.1 Defining and Naming New Attributes 110 4.7.2 The ConstantValue Attribute 110 4.7.3 The Code Attribute 111 4.7.4 The StackMapTable Attribute 115 4.7.5 The Exceptions Attribute 122 4.7.6 The InnerClasses Attribute 123 4.7.7 The EnclosingMethod Attribute 126 4.7.8 The Synthetic Attribute 127 4.7.9 The Signature Attribute 128 4.7.9.1 Signatures 129 4.7.10 The SourceFile Attribute 133 4.7.11 The SourceDebugExtension Attribute 133 4.7.12 The LineNumberTable Attribute 134 4.7.13 The LocalVariableTable Attribute 135 4.7.14 The LocalVariableTypeTable Attribute 137 4.7.15 The Deprecated Attribute 139 4.7.16 The RuntimeVisibleAnnotations Attribute 140 4.7.16.1 The element_value structure 142 4.7.17 The RuntimeInvisibleAnnotations Attribute 145 4.7.18 The RuntimeVisibleParameterAnnotations Attribute 146 4.7.19 The RuntimeInvisibleParameterAnnotations Attribute 147 4.7.20 The RuntimeVisibleTypeAnnotations Attribute 149 4.7.20.1 The target_info union 155 4.7.20.2 The type_path structure 159 4.7.21 The RuntimeInvisibleTypeAnnotations Attribute 163 4.7.22 The AnnotationDefault Attribute 164 4.7.23 The BootstrapMethods Attribute 165 4.7.24 The MethodParameters Attribute 167 4.7.25 The Module Attribute 169 4.7.26 The ModulePackages Attribute 176 4.7.27 The ModuleMainClass Attribute 177 4.7.28 The NestHost Attribute 178 4.7.29 The NestMembers Attribute 178 v The Java® Virtual Machine Specification 4.8 Format Checking 180 4.9 Constraints on Java Virtual Machine Code 180 4.9.1 Static Constraints 181 4.9.2 Structural Constraints 184 4.10 Verification of class Files 188 4.10.1 Verification by Type Checking 189 4.10.1.1 Accessors for Java Virtual Machine Artifacts 192 4.10.1.2 Verification Type System 196 4.10.1.3 Instruction Representation 200 4.10.1.4 Stack Map Frames and Type Transitions 202 4.10.1.5 Type Checking Abstract and Native Methods 207 4.10.1.6 Type Checking Methods with Code 210 4.10.1.7 Type Checking Load and Store Instructions 219 4.10.1.8 Type Checking for protected Members 221 4.10.1.9 Type Checking Instructions 224 4.10.2 Verification by Type Inference 343 4.10.2.1 The Process of Verification by Type Inference 343 4.10.2.2 The Bytecode Verifier 343 4.10.2.3 Values of Types long and double 347 4.10.2.4 Instance Initialization Methods and Newly Created Objects 347 4.10.2.5 Exceptions and finally 349 4.11 Limitations of the Java Virtual Machine 351 5 Loading, Linking, and Initializing 353 5.1 The Run-Time Constant Pool 353 5.2 Java Virtual Machine Startup 356 5.3 Creation and Loading 357 5.3.1 Loading Using the Bootstrap Class Loader 359 5.3.2 Loading Using a User-defined Class Loader 359 5.3.3 Creating Array Classes 360 5.3.4 Loading Constraints 361 5.3.5 Deriving a Class from a class File Representation 362 5.3.6 Modules and Layers 364 5.4 Linking 366 5.4.1 Verification 367 5.4.2 Preparation 367 5.4.3 Resolution 368 5.4.3.1 Class and Interface Resolution 370 5.4.3.2 Field Resolution 371 5.4.3.3 Method Resolution 372 5.4.3.4 Interface Method Resolution 374 5.4.3.5 Method Type and Method Handle Resolution 375 5.4.3.6 Dynamically-Computed Constant and Call Site Resolution 379 5.4.4 Access Control 384 5.4.5 Method Overriding 386 vi The Java® Virtual Machine Specification 5.4.6 Method Selection 387 5.5 Initialization 387 5.6 Binding Native Method Implementations 390 5.7 Java Virtual Machine Exit 391 6 The Java Virtual Machine Instruction Set 393 6.1 Assumptions: The Meaning of "Must" 393 6.2 Reserved Opcodes 394 6.3 Virtual Machine Errors 394 6.4 Format of Instruction Descriptions 395 mnemonic 396 6.5 Instructions 398 aaload 399 aastore 400 aconst_null 402 aload 403 aload_<n> 404 anewarray 405 areturn 406 arraylength 407 astore 408 astore_<n> 409 athrow 410 baload 412 bastore 413 bipush 414 caload 415 castore 416 checkcast 417 d2f 419 d2i 420 d2l 421 dadd 422 daload 424 dastore 425 dcmp<op> 426 dconst_<d> 428 ddiv 429 dload 431 dload_<n> 432 dmul 433 dneg 435 drem 436 dreturn 438 dstore 439 dstore_<n> 440 dsub 441 vii The Java® Virtual Machine Specification dup 442 dup_x1 443 dup_x2 444 dup2 445 dup2_x1 446 dup2_x2 447 f2d 449 f2i 450 f2l 451 fadd 452 faload 454 fastore 455 fcmp<op> 456 fconst_<f> 458 fdiv 459 fload 461 fload_<n> 462 fmul 463 fneg 465 frem 466 freturn 468 fstore 469 fstore_<n> 470 fsub 471 getfield 472 getstatic 473 goto 475 goto_w 476 i2b 477 i2c 478 i2d 479 i2f 480 i2l 481 i2s 482 iadd 483 iaload 484 iand 485 iastore 486 iconst_<i> 487 idiv 488 if_acmp<cond> 489 if_icmp<cond> 490 if<cond> 492 ifnonnull 494 ifnull 495 iinc 496 iload 497 iload_<n> 498 viii The Java® Virtual Machine Specification imul 499 ineg 500 instanceof 501 invokedynamic 503 invokeinterface 505 invokespecial 509 invokestatic 513 invokevirtual 516 ior 523 irem 524 ireturn 525 ishl 527 ishr 528 istore 529 istore_<n> 530 isub 531 iushr 532 ixor 533 jsr 534 jsr_w 535 l2d 536 l2f 537 l2i 538 ladd 539 laload 540 land 541 lastore 542 lcmp 543 lconst_<l> 544 ldc 545 ldc_w 547 ldc2_w 549 ldiv 551 lload 552 lload_<n> 553 lmul 554 lneg 555 lookupswitch 556 lor 558 lrem 559 lreturn 560 lshl 561 lshr 562 lstore 563 lstore_<n> 564 lsub 565 lushr 566 lxor 567 ix The Java® Virtual Machine Specification monitorenter 568 monitorexit 570 multianewarray 572 new 574 newarray 576 nop 578 pop 579 pop2 580 putfield 581 putstatic 583 ret 585 return 586 saload 587 sastore 588 sipush 589 swap 590 tableswitch 591 wide 593 7 Opcode Mnemonics by Opcode 595 A Limited License Grant 599 x CHAPTER 1 Introduction 1.1 A Bit of History The Java® programming language is a general-purpose, concurrent, object-oriented language.