zoukankan      html  css  js  c++  java
  • java内存管理

    今天看了一些关于java内存管理的书。

    1、内存管理分为内存分配和内存回收,java虚拟机有自动回收机制,但并不意味着我们在程序中可以肆无忌惮的创建对象,1:是内存减少,降低程序性能;2:大量已分配内存进行垃圾回收,家中垃圾回收负担,降低程序运行性能。

    2、类变量和实例变量

    类变量属于类,jvm在初始化类时对类变量进行初始化,只运行一次。
    class Test{
    static int seg=100;     //1、定义变量时初始化  
    static{
    	name="nihao";   //2、在静态代码中初始化
    }
    
    }


    类变量初始化分为两步:1、先为类中所有类变量分配内存空间(赋为默认值:int(0),对象(null))2、再依次对类变量进行初始化。

    实例变量属于对象,

    class Test{
    int seg=100;            //1、定义变量时初始化  
    {
    	name="nihao";   //2、在非静态代码块中初始化
    }
    public Test(){
    int age=12;     //3、构造函数中初始化
    }
    }
    在编译时,首先是定义变量,赋值初始化是由构造函数完成的。


    3、java的继承:

    class Base{

    int count=1;

    Dispaly(){

    }

    }

    class Derived  extends Base{

    int count=3;

    Dispaly(){

    }

    }

    当 Base base= new Base();

    Derived derived =new Derived();

    Base bd=new Derived();//此时bd.count=1;    dbd.Display()  -->调用子类的方法。

    Derived db1=base;        //db1.count=1; db1.Display()-->调用父类的方法。

    Base bd1=derived;        //XXX汇报异常,父类不能转换成子类,

    总结:子类重写父类的方法,再由子类引用指向父类实例;

    父类引用不能引用子类的实例,因为子类的很多方法可能父类并不存在,这种类型转换是不存在的。


    当变量的编译类型和运行类型不同时,当调用实例变量时,为引用变量的类型;当调用实例方法时,为所引用的实例对象对的方法。(两者处理不同)

    java内存管理真是一门学问,以后要慢慢学习~~~~







  • 相关阅读:
    idea 插件之 SequenceDiagram
    idea 中添加mybatis的mapper文件模板
    springBoot 中 logback配置文件详解
    Mysql show processlist、show profiles 排查问题
    input 输入框效验
    Java基础之comparator和comparable的区别以及使用
    mysql sql使用记录
    mysql 优化之索引的使用
    IDEA 中常用快捷键的使用
    form表单中method的get和post区别
  • 原文地址:https://www.cnblogs.com/yeemi/p/7470164.html
Copyright © 2011-2022 走看看