Java基础之内存

基础知识点

1.Java地址是由16进制标记的;
2.16进制运算:
示例:2B=2*16+11=43 (B=11);
3.Static variable/Constant =>special 从内存中比较低位置比如1000(16进制)的地址开始向后寻址;
4.Dynamic variable/new =>heap 从内存中比较高位置比如
2000(16进制)的地址开始向后寻址;
5.Local variable/Parameters =>stack 从内存中最高位置
位置FFFF(16进制)的地址开始向前寻址;

注:当然存在4与5重叠的情况,如果有重叠,系统将崩溃,大多数时候不会出现这种情况;

代码及解析

下面用代码解释上述含义:

//可执行类
public class Point {
    public Point(int x, int y) {
        px = x;
        py = y;
    }
    public void move(int dx, int dy) {
        px += dx;
        py += dy;
    }
    private int px;
    private int py;
}
//测试类
public class Test {
    public static void main(String args[]) {
        Point p1 = new Point(2, 3);//标记1
        Point p2 = new Point(4, 5);//标记2
        p1.move(10, 11);//标记3
    }
}

针对上面这段代码中Test类运行的过程看一下都发生了哪些:
这里写图片描述

1.当程序运行到标记1时,将在stack中产生指针p1以及heap中产生对象1;
2.当程序运行到标记2时,将在stack中产生指针p2以及heap中产生对象2;
3当程序运行到标记3时,将产生新的栈针,即在stack中产生黄色区域部分,并对应heap中的对象发生蓝色部分的变化,产生了调用的结果,当此标记执行结束后,stack中黄色的部分将产生垃圾回收。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值