JVM,JRE,JDK的关系及jvm内存模型

2020-03-09  本文已影响0人  Chelsea丶

JDK(Java Development Kit,Java开发工具包)

-包含了Java的开发工具包括JRE
-用于开发Java

JRE(Java Runtime Environment,Java运行环境)。

-包含了JVM和核心类库
-用于运行Java


JVM的内存模型

JVM内存模型

引用对象:

值保存在堆中,栈存的是对象的地址

Person p = new Person();

先在堆中new一个Person() 的对象
而p在栈中,存着对象的地址(间接寻址)

public class test {
    public int a;
}
public class output {
    public static void swap(test t1){
        t1.a = 6;
        System.out.println("调用方法后的t1的值:"+t1.a);
    }
    public static void main(String[] args) {
        test test   = new test();
        System.out.println("生成的t1的值:"+test.a);
        swap(test);
        System.out.println("最终值:"+test.a);
引用对象参数传递

1.首先先在堆中开辟出一个new test()对象,在栈中开辟出一块内存test(地址1)储存对象的地址。
2.调用swap方法,把new test()对象中的值复制到(地址2),()地址1)和(地址2)都引用的堆中对象的值


基本数据类型:

值保存在栈中

int i = 1;

1保存在栈中,存的是i的地址,i在堆中

方法参数传递的过程

public class test {
    public static void swap(int i){
        i = 6;
        System.out.println(i);
    }

    public static void main(String[] args) {
        int a= 0;
        test.swap(a);
        System.out.println(a);
    }
}

1.先执行int a = 0;在栈中开辟出一块内存(地址1),存入0
2.然后调用swap方法再开辟出一块内存(地址2),将(地址1)的值复制到(地址2)即0.
3.方法内部6覆盖了(地址2)中的值

上一篇 下一篇

猜你喜欢

热点阅读