java list内存分配_java内存分配

public class Student {

private int age;//年龄

private String name;//姓名

private List courses = new ArrayList();//科目

private int[] luckies;//幸运数字

public Student() {

super();

// TODO Auto-generated constructor stub

}

public Student(int age, String name, List courses, int[] luckies) {

super();

this.age = age;

this.name = name;

this.courses = courses;

this.luckies = luckies;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public List getCourses() {

return courses;

}

public void setCourses(List courses) {

this.courses = courses;

}

public int[] getLuckies() {

return luckies;

}

public void setLuckies(int[] luckies) {

this.luckies = luckies;

}

@Override

public String toString() {

return "Student [age=" + age + ", name=" + name + ", courses=" + courses + ", nums="

+ Arrays.toString(luckies) + "]";

}

}

package test;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

/**

* @author Administrator

*

*/

/**

* @author Administrator

*

*/

public class Test {

public static void main(String[] args) {

// TODO Auto-generated method stub

List courses = new ArrayList();

courses.add("语文");

int[] luckies = {3,6,8};

Student stu = new Student(15, "张三", courses, luckies);

System.out.println(stu+"\n");

System.out.println("----年龄加10岁----");

addAge(stu.getAge());

System.out.println(stu+"\n");

System.out.println("----改名字----");

changeName(stu.getName(), "张改名");

System.out.println(stu+"\n");

System.out.println("----增加科目----");

addCourse(stu.getCourses(), "英语");

System.out.println(stu+"\n");

System.out.println("----所有幸运数字加1----");

addLuckyNu(stu.getLuckies());

System.out.println(stu+"\n");

System.out.println("----改变学生的属性----");

changeStuAttribute(stu);

System.out.println(stu+"\n");

System.out.println("----换个学生----");

changeStudent(stu);

System.out.println(stu+"\n");

}

/**

* 年龄增加10岁

* @param age

*/

private static int addAge(int age) {

System.out.println("增加年龄前age:"+age);

age+=10;

System.out.println("增加年龄后age:"+age);

return age;

}

/**

* 增加科目

* @param courses

* @param courseName

*/

private static List addCourse(List courses,String courseName) {

for(int i=0;i

System.out.println("增加科目前科目"+i+":"+courses.get(i));

}

courses.add(courseName);

for(int i=0;i

System.out.println("增加科目后科目"+i+":"+courses.get(i));

}

return courses;

}

/**

* 改名字

* @param name

* @param name1

* @return

*/

private static String changeName(String name,String name1) {

System.out.println("改名前name:"+name);

name = name1;

System.out.println("改名后name:"+name);

return name;

}

/**

* 所有幸运数字加1

* @param luckies

* @return

*/

private static int[] addLuckyNu(int[] luckies) {

for(int i=0;i

System.out.println("增加幸运数字前幸运数字"+i+":"+luckies[i]);

luckies[i]++;

}

for(int i=0;i

System.out.println("增加幸运数字后幸运数字"+i+":"+luckies[i]);

}

return luckies;

}

/**

* 改变学生的属性

* @param s

*/

private static void changeStuAttribute(Student s) {

s.setAge(addAge(s.getAge()));

s.setCourses(addCourse(s.getCourses(), "社会"));

System.out.println(s);

}

/**

* 换个学生

* @param s

*/

private static void changeStudent(Student s) {

s = new Student();

s.setAge(20);

s.setName("张换人");

s.getCourses().add("体育");

int[] nums = {1,2};

s.setLuckies(nums);

System.out.println(s);

}

}

结果:

Student [age=15, name=张三, courses=[语文], nums=[3, 6, 8]]

----年龄加10岁----

增加年龄前age:15

增加年龄后age:25

Student [age=15, name=张三, courses=[语文], nums=[3, 6, 8]]

----改名字----

改名前name:张三

改名后name:张改名

Student [age=15, name=张三, courses=[语文], nums=[3, 6, 8]]

----增加科目----

增加科目前科目0:语文

增加科目后科目0:语文

增加科目后科目1:英语

Student [age=15, name=张三, courses=[语文, 英语], nums=[3, 6, 8]]

----所有幸运数字加1----

增加幸运数字前幸运数字0:3

增加幸运数字前幸运数字1:6

增加幸运数字前幸运数字2:8

增加幸运数字后幸运数字0:4

增加幸运数字后幸运数字1:7

增加幸运数字后幸运数字2:9

Student [age=15, name=张三, courses=[语文, 英语], nums=[4, 7, 9]]

----改变学生的属性----

增加年龄前age:15

增加年龄后age:25

增加科目前科目0:语文

增加科目前科目1:英语

增加科目后科目0:语文

增加科目后科目1:英语

增加科目后科目2:社会

Student [age=25, name=张三, courses=[语文, 英语, 社会], nums=[4, 7, 9]]

Student [age=25, name=张三, courses=[语文, 英语, 社会], nums=[4, 7, 9]]

----换个学生----

Student [age=20, name=张换人, courses=[体育], nums=[1, 2]]

Student [age=25, name=张三, courses=[语文, 英语, 社会], nums=[4, 7, 9]]

内存分配:

第一步:java编译为class文件,并将方法声明到方法区中

f06a8329f0c4bc6ccf2490777200366b.png

第二步:执行该程序 为main分配栈帧 new ArrayList()对象,数组对象luckies,int型,String,new Student()对象

c1f5692e793cb407f596900a50c134e3.png

第三步:执行addAge方法,未addAge方法分配栈帧

1dc104ec79641dd1a04f012b665e5c08.png

addAge方法执行完后栈帧销毁,感觉未做任何操作

第四步:执行changeName方法,为changeName分配栈帧

330753873df6696834e96c9f7eb6e193.png

changeName方法执行完后栈帧销毁,感觉未做任何操作

第五步:执行addCourse方法,为addCourse方法分配栈帧

88efee559ee468e119f39c8dc642f21d.png

addCourse方法执行完后栈帧销毁,由于数组是引用类型,对象时存在堆中的,传参时只是把course的地址传给了changeName方法,而在changeName中对数组进行操作是在堆中进行的操作,故退出方法后course的地址不变,值改变

第六步:执行addLuckyNu方法,为addLuckyNu分配栈帧

4e97b89d8ee8b385ec1a934893bbcecc.png

changeName方法执行完后栈帧销毁,同步骤五,退出方法后luckies的地址不变,值改变

第七步:执行changeStuAttribute方法,为changeStuAttribute方法分配栈帧

b08c93d0203c281ecc1e33a8226ee84d.png

changeStuAttribute方法执行完后栈帧销毁,同步骤五,退出方法后stu的地址不变,值改变,对应的course属性的地址不变,只改变

第八步:执行changeStudent方法,为changeStudent方法分配栈帧

4d21ada3e9bf93683967f38b84da8606.png

changeStuAttribute方法执行完后栈帧销毁,同步骤五,退出方法后stu的地址不变,值改变,对应的course属性的地址不变,只改变

ae4e52d5020b1d2bc3c4a193cb7199d4.png

对于运行时常量是当该常量不被引用时由GC回收,但是并不一定及时

以上是个人对java虚拟机内存的分配,请大神指教

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值