Java 程序执行过程的内存分析
内存分析先知
栈:
1、每个线程私有,不能实现线程间的共享!
2、局部变量放置于栈中。
3、栈是由系统自动分配,速度快!栈是一个连续的内存空间!
堆:
1、放置new出来的对象!
2、堆是一个不连续的内存空间,分配灵活,速度慢!
方法区:
1、被所有线程共享!
2、用来存放程序中永远不变或唯一的内容。(类代码信息、静态变量、字符串常量)
注:常量池具有共享的机制,不同类的常量池之间共享数据。比如:Student 类常量池下有个 "老叶"字符串常量,那么当 Test 类中用到"老叶"这个字符串常量时就会去方法区的其他类的常量池中找,刚好 Student 类有,所以它直接就引用Student 类的"老叶"
开始分析
Student 类
public class Student { //静态的数据 String name; int id; //学号 int age; String gender; int weight; //动态的行为 public void study(){ System.out.println(name+"在学习"); } public void sayHello(String sname){ System.out.println(name+"向"+sname+"说:你好!"); } }
Test1类
重点:注意看代码里的注释,我把每一条的语句的执行过程都做了很详细的讲解
public class Test1 { public static void main(String[] args) { //去方法区找Student类,发现没有,通过Class Loader(类加载器)加载Student类,将Student类加载到方法区中。 //创建 s1 局部变量 //在堆中创建一个Student对象,并将这个对象的地址赋值给 s1 Student s1 = new Student(); //通过 s1 这个引用先找到Student对象,然后找到 name 属性 //创建"老叶"这个字符串常量,并将它放在常量池中 // 将 s1 的 name 属性 赋值为这个字符串的引用 s1.name = "老叶"; //通过 s1 这个引用先找到Student对象,然后找到 study() 方法的引用,然后去方法区内找到方法,执行该方法,开一个栈帧,执行完成后释放这个栈帧。 s1.study(); s1.sayHello("老王"); //这个和上面同理 Student s2 = new Student(); s2.age = 18; s2.name="老李"; } }
注:基本数据类型会直接赋值,引用类型是把对象的地址赋值
这是对上面 Test1 类执行代码的内存分析图!!!
原文发布时间为:2018-07-22
本文作者:帅飞
本文来自云栖社区合作伙伴“ Java知音”,了解相关信息可以关注“ Java知音”

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
深入理解JAVA虚拟机学习笔记(一)JVM内存模型
上周末搬家后,家里的宽带一直没弄好,跟电信客服反映了N遍了终于约了个师傅明天早上来迁移宽带,可以结束一个多星期没网的痛苦日子了。这段时间也是各种忙,都一个星期没更新博客了,再不写之前那种状态和激情都要慢慢褪去了,总觉得心里慌的一逼,这怎么行呢?!趁明天周末,在公司电脑上记录下这周的一些学习内容。近期在看一本很经典的java书籍:《深入理解java虚拟机 第二版》,几年前也翻过,但那时候功力不够,不太能看懂就没看了。现在回过头来看,发现确实写的很好,很多知识点都能理解了,而且讲的也很有深度,收获颇多。后期计划按照这本书的内容写出一系列博客,来深入学习和复习下java虚拟机相关的知识。 一、JVM内存模型概述 JVM内存模型其实也挺简单的,这里先提2个知识点: 1、组成:java堆,java栈(即虚拟机栈),本地方法栈,方法区和程序计数器。 2、是否共享:其中方法区和堆区是线程共享的,虚拟机栈,本地方法栈和程序计数器是线程私有的,也称线程隔离的,每个区域存储不同的内容。这2个知识点必须牢记,是掌握JVM内存模型的基础。 ...
- 下一篇
Python全栈工程师(文件操作、编码)
ParisGabriel 每天坚持手写一天一篇 决定坚持几年 为了梦想为了信仰 Python人工智能从入门到精通 最近简直要死了 发烧感冒 喉咙痛。。。。、 如何长期保存计算机中数据: 需要文件操作 文件 file: 文件是用于数据存储的单位 文件通常用来长期储存数据 文件中的数据是以字节为单位进行顺序储存的文件的操作流程: 1.打开文件 2.读/写文件 3.关闭文件 注: 任何操作系统, 一个应用程序同时打开文件的数量有最大数限制文件打开函数: open(file, mode=‘rt’) 用于打开一个文件, 返回此文件流对象, 如果打开文件失败, 则会触发osError错误文件的关闭方法: F.colse() #关闭问津, 释放系统资源 示例: # 此示例示意文件的打开和关闭操作 try: f = open('./aaa.txt') # 不存在此文件 # f = open('./myfile.txt') # 不存在此文件 print("打开文件成功") # 此处要进行读/写操作 f.close() # 半闭文件 except OSError: print...
相关文章
文章评论
共有0条评论来说两句吧...