欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java简单分析程序运行内存

程序员文章站 2024-03-23 16:46:28
...

    先来随便拿一个Userinfo对象

package com.yanghs.test.clone;

import com.yanghs.common.entity.hbm.UserRole;

import java.io.Serializable;
import java.sql.Timestamp;
import java.util.Collection;

/**
 * @author yanghs
 * @Description:
 * @date 2018/3/14 21:28
 */
public class Userinfo implements Serializable,Cloneable {
    private static final long serialVersionUID = 1L;
    private String userid;
    private String username;
    private String password;
    private Roleinfo roleinfo;

    /**
     * 重写Cloneable的clone方法,调用父类的clone方法实现浅克隆
     * 实现深克隆需要再调用类中的属性的克隆方法实现深克隆
     * @return
     * @throws CloneNotSupportedException
     */
    @Override
    public Object clone() throws CloneNotSupportedException {
        Userinfo o = (Userinfo) super.clone();
        /*深度克隆对象属性*/
        o.roleinfo = (Roleinfo) roleinfo.clone();
        return o;
    }

    public String getUserid() {
        return userid;
    }

    public void setUserid(String userid) {
        this.userid = userid;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

然后mian方法 实例化    

package com.yanghs.test.clone;

/**
 * @author yanghs
 * @Description:
 * @date 2018/4/11 11:54
 */
public class Test {
    public static void main(String[] args) {
        /*通过类加载器 ClassLoader 加载Userinfo 类 之后方法区就有这个类的信息*/
        Userinfo userinfo = new Userinfo();
        userinfo.setUsername("张三");
    }
}

1.首先读到  Userinfo 当jvm读到这一句时,首先检查方法区有没有这个class的信息没有的话就加载(ClassLOader)Userinfo.class文件  

2. 然后声明变量 userinfo 此时在栈区压栈次变量

3.new Userinfo()在堆以方法区class模板创建 userinfo对象 并且次对象中的放法都在堆区。 userinfo中只存地址,除了八大基本类类变量初始化有初始值为0,Boolean为false,char 为\u0000 。

4.栈区userinfo存放 堆区中的地址。当方法传递这个对象时,传递的是地址 所以java只有值传递没有引用传递。

下面来一张如,形象的介绍了这个过程

Java简单分析程序运行内存