• JVM学习之常用概念


    方法区    

        当JVM使用类装载器装载某个类时,它首先要定位对应的class文件,然后读入这个class文件,最后,JVM提取该文件的内容信息,并将这些信息存储到方法区,最后返回一个class实例。

         方法区是系统分配的一个内存逻辑区域,是用来存储类型信息的(类型信息可理解为类的描述信息),方法区主要有以下几个特点: 
         一.方法区是线程安全的。由于所有的线程都共享方法区,所以,方法区里的数据访问必须被设计成线程安全的。例如,假如同时有两个线程都企图访问方法区中的同一个类,而这个类还没有被装入JVM,那么只允许一个线程去装载它,而其它线程必须等待 
         二.方法区的大小不必是固定的,JVM可根据应用需要动态调整。同时,方法区也不一定是连续的,方法区可以在一个堆(甚至是JVM自己的堆)中自由分配。 
         三.方法区也可被垃圾收集,当某个类不在被使用(不可触及)时,JVM将卸载这个类,进行垃圾收集 
        方法区里存的都是类型信息,也就是类的信息,而类的信息又包括以下内容: 
        (1)类的全限定名(类的全路径名) 
        (2)类的直接超类的全限定名(如果这个类是Object,则它没有超类) 
        这个类是类型(类)还是接口 
        (3)类的访问修饰符,如public、abstract、final等 
         所有的直接接口全限定名的有序列表(假如它实现了多个接口) 
        常量池 
         字段、方法信息、类变量信息(静态变量)    装载该类的装载器的引用(classLoader)、类型引用(class) 
         其实,我们没必要全部记住,只要根据上面内容有个大概的了解,然后对类型这个概念有个大概的认识即可。下面我们将主要对常量池和类变量信息作一下分析,先说类变量吧,类变量内容少些,描述起来比较容易。类变量,顾名思义,就是属于类的变量,所有类的实例都共享的变量,也就是常说的静态变量。关于类变量,我们只要知道方法区里有个静态区,静态区是专门用来存放静态变量以及静态块的。所有类的实例都共享方法区中的内容。访问类变量的方式可通过实例(对象)来访问,也可通过类型来直接访问,java规范推荐使用类型来直接访问。 

     1 public class AppMain {// 运行时 jvm把类信息加入方法区
     2 
     3     /**
     4      * @param args
     5      */
     6     public static void main(String[] args) {// main方法放入方法区
     7 
     8         Sample test1 = new Sample("hello"); // test1是引用 放入栈中 new Sample("hello")对象放入堆中
     9         test1.printName();
    10         
    11     }
    12 
    13 }
    14 
    15 
    16 class Sample { // 运行时jvm把类信息放入方法区
    17     
    18     private String name; // new Sample()后, name 引用放入栈  name对象放入堆
    19     
    20     public Sample(String name){
    21         this.name = name;
    22     }
    23     
    24     public void printName(){ // 方法本身放入方法区
    25         System.out.println(name);
    26     }
    27 }


  • 相关阅读:
    ubuntu16.04截图工具Shutter安装,设置快捷键
    cd命令和roscd命令的区别,并解决环境变量问题
    ubuntu16.04+kinetic 环境下进行turtlebot2安装+gazebo7.16
    【转载】windows 下TexLive的安装和配置
    Linux 环境变量 /etc/profile 和 ~/.bashrc的区别和使用
    rotors无人机仿真(古月居)——问题记录
    操作select
    #if DEBUG
    (网上看的)asp.net使用uploadify上传出现的IO Error问题
    sqlserver2008附加sqlserver2005数据库目录出错,需要设置mdf后缀文件夹“管理员取得所有权”,并用windows管理权限登录数据库不要用sa
  • 原文地址:https://www.cnblogs.com/sunfie/p/5128953.html
Copyright © 2020-2023  润新知