JVM加载类详情

本文通过马士兵老师的讲解,深入探讨了Java SE中内存的加载过程,包括类的加载顺序、成员变量与方法的存放位置等内容,并详细解释了从.java文件到运行的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习j2se,马士兵老师讲内存分析是如此的透彻,遇到这么精华的东西,让我不得不再写篇感悟博客以作总结和怀念,尽管这时候有软考的压力,但依然很过瘾。

一提到j2se,一提到马士兵,我第一反应就是这张图。学习一门语言,知道内存,知道一切。

不过,我想把内容再细化一些,所以下面有不少是自己的感悟,也许有的 理解是不合适的,也许有的理解等到学习j2ee时就会得到纠正,也许……,而唯一可以确定的是,这只是学习java的一个过程。

写好一个.java文件,编译后,使用java命令运行。首先加载的类,肯定是和文件名相同的public类了。


加载类详情:

new 一个类时,JVM便在heap内存中为该对象分配一块地。

加载类的顺序,先成员变量后方法;先静态,后非静态。

1. 加载成员变量

先加载static成员变量,放在datasegment内存区,始终只有一份,被同一类的每个对象共享。

再加载非static成员变量,放在该对象占用的这块地里,如果没有初始化,JVM会帮我们处理这块地(初始化)。每个非静态成员变量在不同的对象中都有不同的值。


2. 加载方法:

方法放在code segment中,只有一份,被同一类的每个对象共享。

先加载静态方法,放在codesegment内存区中,而main方法就是静态的,也是程序的入口点。他的寿命比较长,是这个类的整个生命周期。

如果要访问静态方法,系统在codesegment中找一段具有标识性的代码段是很容易的,直接使用类名.静态方法名。

再加载非静态方法,想要让堆中的对象找到codesegment中的这段代码,通过内部的函数指针就可以办到。new 类时,就需要执行构造方法了。(加载和执行可不一样)。

1) 加载局部变量

局部变量位于方法中,等到方法开始执行时,就该用到stack了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值