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 超出内存后抛出的异常
网友评论