美文网首页
# JVM 方法区详解

# JVM 方法区详解

作者: 丿易小易 | 来源:发表于2020-12-10 13:30 被阅读0次

    1.方法区定义(什么是方法区)

    线程共享的运行时内存区域

    2.存放数据类型详述

    2.1 总述:
    1 类信息, 方法描述符(方法参数+返回值),字段信息
    2 静态变量(类变量)
    3 常量(常量池)
    4 编译器编译后的代码
    
    2.2 分述:
      1.1  类信息 
    
      修饰符(public final)
      类,接口(class,interface)
      类的全限定名(Test/ClassStruct.class)
      直接父类的全限定名(java/lang/Object.class)
      直接父接口的权限定名数组(java/io/Serializable)
      
      1.2  方法描述
      
      修饰符(public static final)
      方法返回值(java/lang/String.class) V
      方法名(getStatic)
      方法参数需要用到的局部变量的大小还有操作数栈大小
      方法体的字节码(就是花括号里的内容)
      异常表(throws Exception)
      
      1.3 字段信息
      
      修饰符(pirvate)
      字段类型(java/lang/String.class)
      字段名(name)
      (ps:不包含字段的值)
      
    
    2.2 静态变量   
    demo:  public static String static_str="111";
    
    2.3 常量(final修饰)
    demo:
    CONSTANT_INGETER_INFO 字节码中的常量池
    public final int CONST_INT=0;
    CONSTANT_String_info  字节码中的常量池(等待其他类型)   
    public final String CONST_STR = "111" ;
    

    静态变量, 常量与静态常量间的区别:

    * static 
    修饰的属性、方法、代码段跟该类的具体对象无关(所以与this,super不能共存)
    初始化在编译期(类加载的时候)
    
    * static final 
    修饰的属性表示一旦给值,就不可修改,并且可以通过类名访问
    
    * final 
    初始化可以在编译期,也可以在运行期,初始化后不能被改变
    final修饰的方法表示该方法在子类中不能被重写
    final修饰的类表示该类不能被继承
    final修饰的字段不能被修改
    

    3.设置大小(jdk8后方法区由元数据组成)

    -XX:MetaspaceSize =21m 默认 可以设置为-1和系统内存同等

    4.异常情况

    outOfMemoryError 超出内存后抛出的异常

    相关文章

      网友评论

          本文标题:# JVM 方法区详解

          本文链接:https://www.haomeiwen.com/subject/hanlgktx.html