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只有值传递没有引用传递。
下面来一张如,形象的介绍了这个过程
上一篇: SpringBoot快速入门
下一篇: Eureka实现微服务注册发现
推荐阅读
-
Java简单分析程序运行内存
-
测试程序中代码的运行时间 博客分类: JAVA java
-
tomcat 运行java项目防止内存溢出配置 博客分类: MyEclipse集成本地Tomcat
-
Java程序执行内存分析(栈、堆、方法区)
-
运行程序报java.lang.IncompatibleClassChangeError错误,怎么解决?内有详细日志 JavaJBossSUNApacheWeb
-
运行程序报java.lang.IncompatibleClassChangeError错误,怎么解决?内有详细日志
-
C++程序员学Java系列之十五:自定义类的简单使用
-
如何计算程序运行时间 博客分类: java JAVA
-
如何计算程序运行时间 博客分类: java JAVA
-
JVM内存分析以及4种内存溢出 博客分类: java汇总 JVMGCHotSpot