浅谈java内存分析

        了解内存机制,进行内存分析就可以知道程序运行的过程,知道运行结果,知其所以然,当遇到纠结的问题时也可以用内存分析进行思考。

        内存分为四个区块:heap segment(堆)、stack segment(栈)、data segment(静态区)、code segment(代码区)。

        heap——一般是程序员分配,存放由new创建的对象和数组。如果在栈内存中没有指向该内存的引用,则堆中该内存则会被垃圾回收器收回;

        stack——由编译器自动分配释放,存放函数的参数值,局部变量的值等,当用到这个变量的具体方法执行结束之后,系统自动释放内存资源

        data——存放全局变量,静态变量和字符串常量,不释放

        code——存放程序中方法的二进制代码,而且是多个对象共享一个代码空间区域

        

         数据类型是除了几种基本类型之外,其余类型都是引用类型,例如类、接口、数组都是引用类型。

         基本类型内存分析:在栈中开辟一块新的空间,将值放在开辟好的栈当中。

         1、声明:在内存中开辟一块新的空间 ;2、初始化:给该空间一个初始的值。例如:int初始化值为0;3、赋值:将值放在开辟好的内存当中

         引用类型内存分析:在栈里面保存的是一个对象的引用地址。真正的对象是保存在堆里面。

         例如:Dog dog=new Dog();

Dog类型的变量dog在栈中保存的是对象在堆里面的地址(不是堆内存的物理地址,只是可以通过这个地址找到对象),真正的对象是通过new关键字创建的,保存在堆中。

        静态
        被静态(static)修饰的,放在内存中的 data segment 块中。
静态变量不属于对象中,他是 class 共用的一块区间,他是单独存放在 data segment 中的。

       常量
常量(final)也放在内存中的 data segment 块中。System.out.println("test");这里的"test"也是常量

你可能感兴趣的:(浅谈java内存分析)