zoukankan      html  css  js  c++  java
  • java虚拟机内存

    1  –verbose:gc

    在虚拟机发生内存回收时在输出设备显示信息

    1、程序计数器

    程序计数器是一块比较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器。

    多线程时,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程之间计数器互不影响,独立存储。

    2、栈

    线程私有,声明周期和线程相同。

    存放基本数据类型和对象的引用。

    3、堆Heap

    java堆是java虚拟机内存最大的一块。

    java堆是被所有线程所共享的一块区域,在虚拟机创建时启动,存放对象实例。

    java堆是垃圾回收器管理的主要区域,因此又被称为“GC堆”(Garbage Collection Heap)。

    java堆还可以细分为新生代和老年代。

    4、方法区

    方法区,和java堆一样,是线程共享的一块区域,用于存储已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译的代码

    二、画内存图

    分析下面的代码

     1    public static void main(String[] args) {
     2         AVGirl girl1 = new AVGirl();
     3         girl1.name = "苍老师";
     4         AVGirl.country = "日本";
     5         girl1.sayHi();
     6 
     7 
     8         AVGirl girl2 = new AVGirl();
     9         girl2.name = "波多老师";
    10         AVGirl.country = "日本213";
    11         girl2.sayHi();
    12 
    13     }
    14     class AVGirl{
    15     String name; // 姓名
    16     static String country; // 国籍
    17 
    18     public void sayHi() {
    19         System.out.println(name + "..." + country);
    20     }
    21 
    22 }

    1、加载.class文件(字节码文件)到方法区

    2、main方法入栈

    3、创建AVGril的对象,先要加载AVGril.class

    AVGril.class中 分为 静态区和非静态区
    这时初始化静态变量conutry初值为null;

    4、创建对象(堆区开辟空间)

    5、把对象的地址赋给girl1变量保存

    6、通过类名 修改 类变量的值

    7、sayHi方法入栈 打印

    8、sayHi方法出栈

    9、main出栈

    静态方法和非静态方法的区别?

    非静态方法:

    1.可以使用静态变量 和 非静态变量
    2.可以使用静态方法 和 非静态方法

    静态方法:

    1.只能使用静态变量
    2.只能使用静态方法
  • 相关阅读:
    编程语言最终的目标
    浅谈编程语言的类型系统
    编程语言的五大系统
    Java Array、List、Set互相转化
    java 集合类 列表
    Java检查异常、非检查异常、运行时异常、非运行时异常的区别
    java 的枚举变量只能使用枚举常量来初始化--带有关联数据的枚举
    观察与思考

    种田与投资
  • 原文地址:https://www.cnblogs.com/wylwyl/p/10260615.html
Copyright © 2011-2022 走看看