精华内容
下载资源
问答
  •  OxCAFEBABE,小版本号,大版本号,常量池大小,常量池数组,访问控制标记,当前信息,父类信息,实现的接口个数,实现的接口信息数组,域个数,域信息数组,方法个数,方法信息数组,属性个数,属性信息数组 ...

                挺好的备份一个

     

            Java字节码深入解析
    一:Java字节代码的组织形式

      类文件{

      OxCAFEBABE,小版本号,大版本号,常量池大小,常量池数组,访问控制标记,当前类信息,父类信息,实现的接口个数,实现的接口信息数组,域个数,域信息数组,方法个数,方法信息数组,属性个数,属性信息数组

      }

      二:查看方法 --- javap命令

      例子:有一个Java类Demo.java

    public class Demo {     private String str1;     private String str2;     private int num1;     private int num2;     public static final String STATIC_DATA = "hello world";          private void sayHello1(){         System.out.println("this is method1...");     }     private void sayHello2(){         System.out.println("this is method2...");     }     public void sayHello3(){         System.out.println("this is method3...");     } }
      通过jdk自带的反编译工具命令 javap 可以查看class文件的字节码信息

    D:\>javap -verbose Demo >> Demo.txt
      Demo.txt:

    Compiled from "Demo.java" public class Demo extends java.lang.Object   SourceFile: "Demo.java"   minor version: 0   major version: 49       Constant pool: const #1 = class      #2;   //  Demo const #2 = Asciz     Demo; const #3 = class      #4;   //  java/lang/Object const #4 = Asciz     java/lang/Object; const #5 = Asciz     str1; const #6 = Asciz     Ljava/lang/String;; const #7 = Asciz     str2; const #8 = Asciz     num1; const #9 = Asciz     I; const #10 = Asciz   num2; const #11 = Asciz   STATIC_DATA; const #12 = Asciz   ConstantValue; const #13 = String  #14; //  hello world const #14 = Asciz   hello world; const #15 = Asciz   <init>; const #16 = Asciz   ()V; const #17 = Asciz   Code; const #18 = Method       #3.#19;   //  java/lang/Object."<init>":()V const #19 = NameAndType    #15:#16;//  "<init>":()V const #20 = Asciz   LineNumberTable; const #21 = Asciz   LocalVariableTable; const #22 = Asciz   this; const #23 = Asciz   LDemo;; const #24 = Asciz   sayHello1; const #25 = Field   #26.#28;  //  java/lang/System.out:Ljava/io/PrintStream; const #26 = class    #27; //  java/lang/System const #27 = Asciz   java/lang/System; const #28 = NameAndType    #29:#30;//  out:Ljava/io/PrintStream; const #29 = Asciz   out; const #30 = Asciz   Ljava/io/PrintStream;; const #31 = String  #32; //  this is method1... const #32 = Asciz   this is method1...; const #33 = Method       #34.#36;  //  java/io/PrintStream.println:(Ljava/lang/String;)V const #34 = class    #35; //  java/io/PrintStream const #35 = Asciz   java/io/PrintStream; const #36 = NameAndType    #37:#38;//  println:(Ljava/lang/String;)V const #37 = Asciz   println; const #38 = Asciz   (Ljava/lang/String;)V; const #39 = Asciz   sayHello2; const #40 = String  #41; //  this is method2... const #41 = Asciz   this is method2...; const #42 = Asciz   sayHello3; const #43 = String  #44; //  this is method3... const #44 = Asciz   this is method3...; const #45 = Asciz   SourceFile; const #46 = Asciz   Demo.java;   { public static final java.lang.String STATIC_DATA;   Constant value: String hello world public Demo();   Code:    Stack=1, Locals=1, Args_size=1    0:      aload_0    1:      invokespecial  #18; //Method java/lang/Object."<init>":()V    4:      return   LineNumberTable:    line 2: 0   LocalVariableTable:    Start  Length  Slot  Name   Signature    0      5      0    this       LDemo;   public void sayHello3();   Code:    Stack=2, Locals=1, Args_size=1    0:      getstatic   #25; //Field java/lang/System.out:Ljava/io/PrintStream;    3:      ldc   #43; //String this is method3...    5:      invokevirtual  #33; //Method java/io/PrintStream.println:(Ljava/lang/String;)V    8:      return   LineNumberTable:    line 17: 0    line 18: 8   LocalVariableTable:    Start  Length  Slot  Name   Signature    0      9      0    this       LDemo; }
    解析:

      1、版本号 major version: 49 //java版本 jdk1.6显示的是50, jdk1.5显示的是49,jdk1.4显示的是58 , 高版本能执行低版本的class文件

      2、常量池Constant pool

      Method:方法

      Field:字段

      String:字符串

      Asciz:签名如<init>由jvm调用,其他是不能够去调用它的

      NameAndType:变量名的类型

      Class:类

      通过字节码,我们可以看到Demo类 继承于java.lang.Object,如果类中没有显式声明构造函数的话,编译器会插入一个缺省无参的构造函数(构造函数在JVM级别是显示成<init>的普通函数)。

      三:检测代码的效率问题

      学习Java的过程中,都会了解到字符串合并时要用到StringBuffer 来代替String,那下面就来通过Java字节码来验证两种方式的效率性。

      例子:一个Java类 TestString.java

    <strong>public class TestString {     public String testString(String str1, String str2){        return str1 + str2;     }     public String testStringBuffer(StringBuffer sb, String str){        return sb.append(str).toString();     } }  </strong>
      javap –c TestString 后字节码信息:

    Compiled from "TestString.java" public class TestString extends java.lang.Object{ public TestString();   Code:    0:      aload_0    1:      invokespecial  #8; //Method java/lang/Object."<init>":()V    4:      return   public java.lang.String testString(java.lang.String, java.lang.String);   Code:    0:      new #16; //class java/lang/StringBuilder    3:      dup    4:      aload_1    5:      invokestatic    #18; //Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;    8:      invokespecial  #24; //Method java/lang/StringBuilder."<init>":(Ljava/lang/String;)V    11:     aload_2    12:    invokevirtual  #27; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;    15:    invokevirtual  #31; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;    18:    areturn   public java.lang.String testStringBuffer(java.lang.StringBuffer, java.lang.String);   Code:    0:      aload_1    1:      aload_2    2:      invokevirtual  #40; //Method java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer;    5:      invokevirtual  #45; //Method java/lang/StringBuffer.toString:()Ljava/lang/String;    8:      areturn }
      从上面编译后的字节码信息可以看出来,方法testString 调用了五个方法:new 、invokestatic 、invokespecial 和两个invokevirtual ; 而testStringBuffer 方法只调用了两个invokevirtual 方法。第一个方法比第二个方法多做了好多工作,其效率当然是要低的。而且我们从java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;

      可以看出来其实对于String字符串合并,内部还是转化为StringBuilder的方法调用,这是因为String是长度不可变的,所以不如直接采用StringBuilder(与StringBuffer 长度都是可变的,只不过前者是非线程安全,后者是线程安全)进行字符串合并。

           

                                                                     使用Intellij idea如何快速查看Java类字节码

    1、打开File-Settings


    2:打开Tools-External Tools,右侧点击绿色“+”

    3:填写一些内容规则:Name是在类中,右键时使用时的名称

    4:代码处右键,即可找到添加的功能

    5、通过jdk自带的反编译工具命令 javap 可以查看class文件的字节码信息

    -verbose

    或者

    -c

    都可以,详情可以查看javap命令如何使用


    --------------------- 
    作者:common_util 
    来源:CSDN 
    原文:https://blog.csdn.net/shenhonglei1234/article/details/54861958 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • 它可以动态生成二进制格式的stub或其他代理,或者在JAVA虚拟机装入内存之前,动态修改。ASM 提供了与 BCEL和SERP相似的功能,只有22K的大小,比起350K的BCEL和150K的SERP来说,是相当小巧的,并且它有更高...

    http://asm.objectweb.org/

    ObjectWeb ASM轻量级的Java字节码处理框架。它可以动态生成二进制格式的stub类或其他代理类,或者在类被JAVA虚拟机装入内存之前,动态修改类。ASM 提供了与 BCEL和SERP相似的功能,只有22K的大小,比起350K的BCEL和150K的SERP来说,是相当小巧的,并且它有更高的执行效率,是BCEL的7倍,SERP的11倍以上。

    展开全文
  • Java字节码深入解析

    2017-07-03 10:01:00
    一:Java字节代码的组织形式  类文件{  OxCAFEBABE,小版本号,大版本号,常量池大小,常量池数组,访问控制标记,当前类信息,父类信息,实现的接口个数,实现的接口信息数组... 例子:有一个Java类Demo.java ...

    一:Java字节代码的组织形式

      类文件{

      OxCAFEBABE,小版本号,大版本号,常量池大小,常量池数组,访问控制标记,当前类信息,父类信息,实现的接口个数,实现的接口信息数组,域个数,域信息数组,方法个数,方法信息数组,属性个数,属性信息数组

      }

      二:查看方法 --- javap命令

      例子:有一个Java类Demo.java

    public class Demo {      private String str1;      private String str2;      private int num1;      private int num2;      public static final String STATIC_DATA = "hello world"           private void sayHello1(){          System.out.println("this is method1...");      }      private void sayHello2(){          System.out.println("this is method2...");      }      public void sayHello3(){          System.out.println("this is method3...");      }  }

      通过jdk自带的反编译工具命令 javap 可以查看class文件的字节码信息

    D:\>javap -verbose Demo >> Demo.txt

      Demo.txt:

    Compiled from "Demo.java"  public class Demo extends java.lang.Object    SourceFile: "Demo.java"    minor version: 0    major version: 49         Constant pool:  const #1 = class      #2;   //  Demo  const #2 = Asciz     Demo;  const #3 = class      #4;   //  java/lang/Object  const #4 = Asciz     java/lang/Object;  const #5 = Asciz     str1;  const #6 = Asciz     Ljava/lang/String;;  const #7 = Asciz     str2;  const #8 = Asciz     num1;  const #9 = Asciz     I;  const #10 = Asciz   num2;  const #11 = Asciz   STATIC_DATA;  const #12 = Asciz   ConstantValue;  const #13 = String  #14//  hello world  const #14 = Asciz   hello world;  const #15 = Asciz   <init>;  const #16 = Asciz   ()V;  const #17 = Asciz   Code;  const #18 = Method       #3.#19;   //  java/lang/Object."<init>":()V  const #19 = NameAndType    #15:#16;//  "<init>":()V  const #20 = Asciz   LineNumberTable;  const #21 = Asciz   LocalVariableTable;  const #22 = Asciz   this const #23 = Asciz   LDemo;;  const #24 = Asciz   sayHello1;  const #25 = Field   #26.#28;  //  java/lang/System.out:Ljava/io/PrintStream;  const #26 = class    #27//  java/lang/System  const #27 = Asciz   java/lang/System;  const #28 = NameAndType    #29:#30;//  out:Ljava/io/PrintStream;  const #29 = Asciz   out;  const #30 = Asciz   Ljava/io/PrintStream;;  const #31 = String  #32//  this is method1...  const #32 = Asciz   this is method1...;  const #33 = Method       #34.#36;  //  java/io/PrintStream.println:(Ljava/lang/String;)V  const #34 = class    #35//  java/io/PrintStream  const #35 = Asciz   java/io/PrintStream;  const #36 = NameAndType    #37:#38;//  println:(Ljava/lang/String;)V  const #37 = Asciz   println;  const #38 = Asciz   (Ljava/lang/String;)V;  const #39 = Asciz   sayHello2;  const #40 = String  #41//  this is method2...  const #41 = Asciz   this is method2...;  const #42 = Asciz   sayHello3;  const #43 = String  #44//  this is method3...  const #44 = Asciz   this is method3...;  const #45 = Asciz   SourceFile;  const #46 = Asciz   Demo.java;     public static final java.lang.String STATIC_DATA;    Constant value: String hello world  public Demo();    Code:     Stack=1, Locals=1, Args_size=1     0:      aload_0     1:      invokespecial  #18//Method java/lang/Object."<init>":()V     4:      return    LineNumberTable:     line 20    LocalVariableTable:     Start  Length  Slot  Name   Signature     0      5      0    this       LDemo;     public void sayHello3();    Code:     Stack=2, Locals=1, Args_size=1     0:      getstatic   #25//Field java/lang/System.out:Ljava/io/PrintStream;     3:      ldc   #43//String this is method3...     5:      invokevirtual  #33//Method java/io/PrintStream.println:(Ljava/lang/String;)V     8:      return    LineNumberTable:     line 170     line 188    LocalVariableTable:     Start  Length  Slot  Name   Signature     0      9      0    this       LDemo;  }

    解析:

      1、版本号 major version: 49 //java版本 jdk1.6显示的是50, jdk1.5显示的是49,jdk1.4显示的是58 , 高版本能执行低版本的class文件

      2、常量池Constant pool

      Method:方法

      Field:字段

      String:字符串

      Asciz:签名如<init>由jvm调用,其他是不能够去调用它的

      NameAndType:变量名的类型

      Class:类

      通过字节码,我们可以看到Demo类 继承于java.lang.Object,如果类中没有显式声明构造函数的话,编译器会插入一个缺省无参的构造函数(构造函数在JVM级别是显示成<init>的普通函数)。

      三:检测代码的效率问题

      学习Java的过程中,都会了解到字符串合并时要用到StringBuffer 来代替String,那下面就来通过Java字节码来验证两种方式的效率性。

      例子:一个Java类 TestString.java

    <strong>public class TestString {      public String testString(String str1, String str2){         return str1 + str2;      }      public String testStringBuffer(StringBuffer sb, String str){         return sb.append(str).toString();      }   </strong>

      javap –c TestString 后字节码信息:

    Compiled from "TestString.java"  public class TestString extends java.lang.Object{  public TestString();    Code:     0:      aload_0     1:      invokespecial  #8//Method java/lang/Object."<init>":()V     4:      return     public java.lang.String testString(java.lang.String, java.lang.String);    Code:     0:      new #16//class java/lang/StringBuilder     3:      dup     4:      aload_1     5:      invokestatic    #18//Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;     8:      invokespecial  #24//Method java/lang/StringBuilder."<init>":(Ljava/lang/String;)V     11:     aload_2     12:    invokevirtual  #27//Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;     15:    invokevirtual  #31//Method java/lang/StringBuilder.toString:()Ljava/lang/String;     18:    areturn     public java.lang.String testStringBuffer(java.lang.StringBuffer, java.lang.String);    Code:     0:      aload_1     1:      aload_2     2:      invokevirtual  #40//Method java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer;     5:      invokevirtual  #45//Method java/lang/StringBuffer.toString:()Ljava/lang/String;     8:      areturn  }

      从上面编译后的字节码信息可以看出来,方法testString 调用了五个方法:new 、invokestatic 、invokespecial 和两个invokevirtual ; 而testStringBuffer 方法只调用了两个invokevirtual 方法。第一个方法比第二个方法多做了好多工作,其效率当然是要低的。而且我们从java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;

      可以看出来其实对于String字符串合并,内部还是转化为StringBuilder的方法调用,这是因为String是长度不可变的,所以不如直接采用StringBuilder(与StringBuffer 长度都是可变的,只不过前者是非线程安全,后者是线程安全)进行字符串合并。


    本文出自seven的测试人生公众号最新内容请见作者的GitHub页:http://qaseven.github.io/

    展开全文
  • 转载地址 一:Java字节代码的组织形式  类文件{  OxCAFEBABE,小版本号,大版本号,常量池大小,常量池数组,访问控制标记,当前类信息,父类信息,实现的... 例子:有一个Java类Demo.java 1 public cl...

    转载地址

    一:Java字节代码的组织形式

      类文件{

      OxCAFEBABE,小版本号,大版本号,常量池大小,常量池数组,访问控制标记,当前类信息,父类信息,实现的接口个数,实现的接口信息数组,域个数,域信息数组,方法个数,方法信息数组,属性个数,属性信息数组

      }

    二:查看方法 --- javap命令

      例子:有一个Java类Demo.java

     1 public class Demo { 
     2     private String str1; 
     3     private String str2; 
     4     private int num1; 
     5     private int num2; 
     6     public static final String STATIC_DATA = "hello world"; 
     7      
     8     private void sayHello1(){ 
     9         System.out.println("this is method1..."); 
    10     } 
    11     private void sayHello2(){ 
    12         System.out.println("this is method2..."); 
    13     } 
    14     public void sayHello3(){ 
    15         System.out.println("this is method3..."); 
    16     } 
    17 }

    通过jdk自带的反编译工具命令 javap 可以查看class文件的字节码信息

    1 D:\>javap -verbose Demo >> Demo.txt

    Demo.txt:

     1 Compiled from "Demo.java" 
     2 public class Demo extends java.lang.Object 
     3   SourceFile: "Demo.java" 
     4   minor version: 0 
     5   major version: 49   
     6   
     7   Constant pool: 
     8 const #1 = class      #2;   //  Demo 
     9 const #2 = Asciz     Demo; 
    10 const #3 = class      #4;   //  java/lang/Object 
    11 const #4 = Asciz     java/lang/Object; 
    12 const #5 = Asciz     str1; 
    13 const #6 = Asciz     Ljava/lang/String;; 
    14 const #7 = Asciz     str2; 
    15 const #8 = Asciz     num1; 
    16 const #9 = Asciz     I; 
    17 const #10 = Asciz   num2; 
    18 const #11 = Asciz   STATIC_DATA; 
    19 const #12 = Asciz   ConstantValue; 
    20 const #13 = String  #14; //  hello world 
    21 const #14 = Asciz   hello world; 
    22 const #15 = Asciz   <init>; 
    23 const #16 = Asciz   ()V; 
    24 const #17 = Asciz   Code; 
    25 const #18 = Method       #3.#19;   //  java/lang/Object."<init>":()V 
    26 const #19 = NameAndType    #15:#16;//  "<init>":()V 
    27 const #20 = Asciz   LineNumberTable; 
    28 const #21 = Asciz   LocalVariableTable; 
    29 const #22 = Asciz   this; 
    30 const #23 = Asciz   LDemo;; 
    31 const #24 = Asciz   sayHello1; 
    32 const #25 = Field   #26.#28;  //  java/lang/System.out:Ljava/io/PrintStream; 
    33 const #26 = class    #27; //  java/lang/System 
    34 const #27 = Asciz   java/lang/System; 
    35 const #28 = NameAndType    #29:#30;//  out:Ljava/io/PrintStream; 
    36 const #29 = Asciz   out; 
    37 const #30 = Asciz   Ljava/io/PrintStream;; 
    38 const #31 = String  #32; //  this is method1... 
    39 const #32 = Asciz   this is method1...; 
    40 const #33 = Method       #34.#36;  //  java/io/PrintStream.println:(Ljava/lang/String;)V 
    41 const #34 = class    #35; //  java/io/PrintStream 
    42 const #35 = Asciz   java/io/PrintStream; 
    43 const #36 = NameAndType    #37:#38;//  println:(Ljava/lang/String;)V 
    44 const #37 = Asciz   println; 
    45 const #38 = Asciz   (Ljava/lang/String;)V; 
    46 const #39 = Asciz   sayHello2; 
    47 const #40 = String  #41; //  this is method2... 
    48 const #41 = Asciz   this is method2...; 
    49 const #42 = Asciz   sayHello3; 
    50 const #43 = String  #44; //  this is method3... 
    51 const #44 = Asciz   this is method3...; 
    52 const #45 = Asciz   SourceFile; 
    53 const #46 = Asciz   Demo.java; 
    54   
    55 { 
    56 public static final java.lang.String STATIC_DATA; 
    57   Constant value: String hello world 
    58 public Demo(); 
    59   Code: 
    60    Stack=1, Locals=1, Args_size=1 
    61    0:      aload_0 
    62    1:      invokespecial  #18; //Method java/lang/Object."<init>":()V 
    63    4:      return 
    64   LineNumberTable: 
    65    line 2: 0 
    66   LocalVariableTable: 
    67    Start  Length  Slot  Name   Signature 
    68    0      5      0    this       LDemo; 
    69   
    70 public void sayHello3(); 
    71   Code: 
    72    Stack=2, Locals=1, Args_size=1 
    73    0:      getstatic   #25; //Field java/lang/System.out:Ljava/io/PrintStream; 
    74    3:      ldc   #43; //String this is method3... 
    75    5:      invokevirtual  #33; //Method java/io/PrintStream.println:(Ljava/lang/String;)V 
    76    8:      return 
    77   LineNumberTable: 
    78    line 17: 0 
    79    line 18: 8 
    80   LocalVariableTable: 
    81    Start  Length  Slot  Name   Signature 
    82    0      9      0    this       LDemo; 
    83 }

    解析:

      1、版本号 major version: 49 //java版本 jdk1.6显示的是50, jdk1.5显示的是49,jdk1.4显示的是58 , 高版本能执行低版本的class文件

      2、常量池Constant pool

      Method:方法

      Field:字段

      String:字符串

      Asciz:签名如<init>由jvm调用,其他是不能够去调用它的

      NameAndType:变量名的类型

      Class:类

      通过字节码,我们可以看到Demo类 继承于java.lang.Object,如果类中没有显式声明构造函数的话,编译器会插入一个缺省无参的构造函数(构造函数在JVM级别是显示成<init>的普通函数)。

      三:检测代码的效率问题

      学习Java的过程中,都会了解到字符串合并时要用到StringBuffer 来代替String,那下面就来通过Java字节码来验证两种方式的效率性。

      例子:一个Java类 TestString.java

    1 <strong>public class TestString { 
    2     public String testString(String str1, String str2){ 
    3        return str1 + str2; 
    4     } 
    5     public String testStringBuffer(StringBuffer sb, String str){ 
    6        return sb.append(str).toString(); 
    7     } 
    8 } 
    9  </strong>

    javap –c TestString 后字节码信息:

    Compiled from "TestString.java" 
    public class TestString extends java.lang.Object{ 
    public TestString(); 
      Code: 
       0:      aload_0 
       1:      invokespecial  #8; //Method java/lang/Object."<init>":()V 
       4:      return 
      
    public java.lang.String testString(java.lang.String, java.lang.String); 
      Code: 
       0:      new #16; //class java/lang/StringBuilder 
       3:      dup 
       4:      aload_1 
       5:      invokestatic    #18; //Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String; 
       8:      invokespecial  #24; //Method java/lang/StringBuilder."<init>":(Ljava/lang/String;)V 
       11:     aload_2 
       12:    invokevirtual  #27; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 
       15:    invokevirtual  #31; //Method java/lang/StringBuilder.toString:()Ljava/lang/String; 
       18:    areturn 
      
    public java.lang.String testStringBuffer(java.lang.StringBuffer, java.lang.String); 
      Code: 
       0:      aload_1 
       1:      aload_2 
       2:      invokevirtual  #40; //Method java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer; 
       5:      invokevirtual  #45; //Method java/lang/StringBuffer.toString:()Ljava/lang/String; 
       8:      areturn 
    }

     

    从 上面编译后的字节码信息可以看出来,方法testString 调用了五个方法:new 、invokestatic 、invokespecial 和两个invokevirtual ; 而testStringBuffer 方法只调用了两个invokevirtual 方法。第一个方法比第二个方法多做了好多工作,其效率当然是要低的。而且我们从java/lang/StringBuilder.append: (Ljava/lang/String;)Ljava/lang/StringBuilder;

       可以看出来其实对于String字符串合并,内部还是转化为StringBuilder的方法调用,这是因为String是长度不可变的,所以不如直接 采用StringBuilder(与StringBuffer 长度都是可变的,只不过前者是非线程安全,后者是线程安全)进行字符串合并。

     
     

    转载于:https://www.cnblogs.com/royi123/p/3569926.html

    展开全文
  • 到目前为止,我已经能够在此之前解析所有内容(魔术来检查它是否是文件,主要/次要版本,常量池大小)但我仍然不明白如何解析常量池.比如,是否有用于指定方法引用和其他东西的操作码?有没有什么办法可以在以十六进制...
  • Java 字节码之解析一

    2011-12-01 15:20:59
    ,小版本号,大版本号,常量池大小,常量池数组,访问控制标记,当前信息,父类信息,实现的接口个数,实现的接口信息数组,域个数,域信息数组,方法个数,方法信息数组,属性个数,属性信息数组 }   ...
  • 可能之前是习惯了上网查看其他人的...当然更重要的原因是,我感觉网上的大部分方法都把问题给复杂化了,无论是用js方法截取还是通过封装Java类,都感觉繁琐了些;为此我自己写了个相对来说较为简单的方法,其实很简...
  • 本篇记录本人在学习JDK监控...1、-class:监控装载,卸载数量,总空间以及消费的时间jstat -class + 进程IDLoaded:加载class的数量Bytes:class字节大小Unloaded:未加载数量Bytes:未加载Class的字节大小Time:...
  • 补充JAVA基本数据性的转换: 一. 数据类型: 说明:(大小是指数据类型的字节大小)。 ①大转小需要进行数值类型的强制转化。 ②小转大可以直接转。 ③转小,数据可能会丢失。 (小杯子的水给大杯倒,很容易;但大...
  • Java8使用Metaspace(元空间)代替永久区,对于64位平台,为了压缩JVM对象中的_klass指针的大小,引入了指针压缩空间(Compressed Class Pointer Space) 。1. JDK命令行工具在JDK的开发包中,除了大家熟知的java.exe...
  • JDK自带的Hotspot Debuger工具——HSDB的使用,透过它能够让我们更直观的查看运行中的java对象在内存中的存在形式和状态,如对象的oops、信息、线程栈信息、堆信息、方法字节码和JIT编译后的汇编代码等。...
  • java IO(一):File

    2017-12-29 11:41:00
    File位于java.io包中。它面向文件层次级别操作、查看文件,而字节流、字符流操作数据时显然比之更底层。 学习File包括以下几个重点:文件路径、文件分隔符、创建文件(目录)、删除文件(目录)、查看文件内容(输出...
  • 我们查看源码发现 arraylist 的 CRUD 操作,并没有涉及到锁之的东西。底层是数组,初始大小为 10。插入时会判断数组容量是否足够,不够的话会进行扩容。所谓扩容就是新建一个新的数组,然后将老的数据里面的元素...
  • Java中String的数据是如何存储的,查看源代码就可以知道,String的数据是存储在char[] value这样一个成员变量中的,char类型的大小java中是2个字节我们还知道,现在普遍使用的unicode版本是UCS-2,就是使用2个字节表示...
  • Java中String的数据是如何存储的,查看源代码就可以知道,String的数据是存储在char[] value这样一个成员变量中的,char类型的大小java中是2个字节我们还知道,现在普遍使用的unicode版本是UCS-2,就是使用2个字节表示...
  • java源码包---java 源码 大量 实例

    千次下载 热门讨论 2013-04-18 23:15:26
     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
  • java

    2020-08-20 14:40:09
    因为java强制要求对象大小必须为8字节的整数倍,所以会有一个对齐数据进行填充,但不是必要的 首先尝试获取偏向锁,查看对象是否开启了可偏向标志位。 其次检查锁对象对应的instanceklass对应偏置位是否开启,如果没...
  • python int数据的内存大小

    千次阅读 2018-09-29 18:18:22
    和C,java在基本数据变量占用字节数上存在较大差异,主要原因来自于python 基本数据变量都是对象,具有更复杂的结构体,而且python2,python3,操作系统位数不同还有差异,可以利用 sys.getsizeof(x)函数查看占用的字节...
  • 尹成JAVA快速入门

    2020-12-08 15:12:43
    例如,装载的类是放在分开的名字空间而不是局部类,预防恶意的小应用程序用它自己的版本来代替标准Java类。 7.可移植性 Java使得语言声明不依赖于实现的方面。例如,Java显式说明每个基本数据类型的大小和它的运算...
  • java源码包2

    千次下载 热门讨论 2013-04-20 11:28:17
     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
  • java源码包3

    千次下载 热门讨论 2013-04-20 11:30:13
     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
  • java源码包4

    千次下载 热门讨论 2013-04-20 11:31:44
     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

空空如也

空空如也

1 2 3 4 5 6
收藏数 102
精华内容 40
关键字:

java类字节大小查看

java 订阅