Java执行时内存分析

本来想看深入java虚拟机,百十页,还是找些简单的文档

把握重点,暂时需要的,把经常写的代码执行时内分分析明白,够用就好

如果需要再逐渐深入研究


内存的存放

               code  segment  —— 存放代码

               data   segment  —— 静态变量,字符串变量

               stack  —— 局部变量

                heap  —— new出来的东西

1、

Test   test  = new Test()

test为局部变量, 指向new出来的东西

stack         |         heap

--------------|-------------------

test: xxx     |    {____}


2、

int   date

定义局部变量,占一块内存

stack    |

----------|

data:9  |


3、

public BirthDate(int  d, int m, int y)    //构造方法

BirthDate  d1 = new BirthDate(7,71970);

stack中 d1:xxx    heap中 对象,属性被赋值

调用完成后d,m,y被释放


4、

int date =9;

void chang1(int  i)

{

i = 1234;

}

test.chang1(date);

在stack中, date:9 传给i

i变为9,被赋值1234

调用结束后,i会被释放


5、

BirthDate  d1 = new BirthDate(7,71970);

test.change2(Birthdat  b)

{

       b = new BirthDate(22,2,2003)

}

画图不便,心中执行一遍

方法调用结束后,b和new 消失


6、test.change3(d2)

{

d2.setMonth(2);

}

各种图..


=============================================


static关键字

public class Cat

{

private static int sid =0;

        private String name;

        int id;

       Cat(String name)

{

             this.name = name;

            id = sid++;

       }

       public void info()

       {

                sysout("name" + name + id)

      }


       main()

      {

            Cat.sid =100;

            Cat  mini = new Cat("mini");

            Cat  pipi = new Cat("pipi");

            mini.info();

            pipi.info();

      }

}

写程序时,心中要有一张内存图

dataSegment : 存放了 name,sid

擦~没说什么时候释放? 自己查下吧

程序整个运行期间都会存在

内存分配方式有三种:   
   
 (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。   
   
 (2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。   
   
 (3)从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。 

类的静态成员变量和函数中的静态变量一样,在编译的时候就分配内存了,直到程序退出才释放,并不是随着对象的删除而释放的:

===============================================

类的继承     

                内存分析


super和this的使用


每个对象都有一个hashCode标识对象的在堆中的位置


对象的转型

       子向父转  这个就是父类引用指向子类对象

       子包含的多  转后多的部分就看不到了  , 只能访问作为父类的成员


动态绑定和多态

        应该是就接口的引用指向多个实现类,

        他妹的! 图画这么乱,接口怎么分析? 看看马士兵的讲的那点视频吧,分析挺不错的

        随后补充下吧

==============================================

数组

         数组是引用类型,它的元素相等于类的成员变量,所以分配空间后,所以每个元素

按成员变量的规则被饮食初始化。

        数组作为返回值,相当于一个引用指向了数组的一个成员,成员又指向了对象


String 类不可变

String s1 = "hello";

String s2 = "world";

s1+s2;

在datasegment存放了三个区域  String是对象了

===================================================

容器API

Iterator容器        ---{}----{}----{}   next();


处理流和节点流



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值