java 内存对方法的理解

本文深入探讨Java内存布局,包括CodeSegment、DataSegment、HeapSegment和StackSegment四个部分的作用。解析类、对象及方法在内存中的存储方式,强调静态属性和方法的共享特性,以及方法执行时的内存占用原理。

以下针对引用数据类型: 
在内存中,类是静态的概念,它存在于内存中的CodeSegment中。 
当我们使用new关键字生成对象时,JVM根据类的代码,去堆内存中开辟一块控件,存放该对象,该对象拥有一些属性,拥有一些方法。但是同一个类的对象和对象之间并不是没有联系的,看下面的例子:
 

class Student{
    static String schoolName;
    String name;
    int age;

    void speak(String name){
        System.out.println(name);
    }

    void read(){
    }
}


class Test{
    public statis void main(String[] args){
        Student a = new Student();
        Student b = new Student();
    }
}

在上面的例子中,生成了两个Student对象,两个对象拥有各自的name和age属性,而schoolName属性由于是static的,被所有的对象所共有,而且每个对象都有权更改这个属性。 
而对于方法speak()和read()来讲,它们被所有的对象所共有,但并不是说哪个对象拥有这些方法。方法仅仅是一种逻辑片段而已,它不是实物,严格来讲不能被拥有。 
方法存在的意义就是对对象进行修改。(我的理解) 
上述speak()方法,虽然两个对象都拥有相同的方法,但是由于其操作的对象不同,所以执行起来的效果也不同。再说一次,方法是看不见摸不着的,它仅仅是一种逻辑操作!只有当作用于具体的对象时,方法才具体化了! 
方法在不执行的时候不占用内存空间,只有在执行的时候才会占用内存空间。 
就好比说一个人会翻跟斗,他翻跟斗的时候是需要空间的,但是他不翻跟斗的时候是不需要额外的空间的。但是不管他翻不翻跟斗,他始终是具有翻跟斗的技能的。

Java中的内存布局(其他面向对象的语言也是如此)
Java中的内存空间分为四种: 
1. code segment 
存储class文件的内容,即我们写的代码。 
2. data segment 
存储静态变量 
3. heap segment 
堆空间,存储new出来的对象 
4. stack segment 
栈空间,存储引用类型的引用(注意,这里存储的不一定是对象所处的物理地址,但是一定能够根据这个内容在堆中找到对应的对象),局部变量和方法执行时的方法的代码

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值