Java核心机制(JVM和GC)及对象存储

JAVA特点

1. Java的特性

1.一种纯面向对象的编程语言
2.一种与平台无关(跨平台)的语言。(提供了在不同平台下运行的解释环境)
3.一种健壮的语言,吸收了 C/C++ 语言的优点
4.有较高的安全性。(自动回收垃圾,强制类型检查,取消指针)

2. Java技术的两种核心机制

(1) Java虚拟机(JVM)

   Java文件通过编译器编写为Java字节码文件(.class文件),在类装载器中进行字节码的验证并加载Java类库,通过解释器组件实现Java字节码与计算机操作系统之间的通信。
JAVA运行流程
JVM可以理解为一个可运行的JAVA字节码的虚拟计算机系统

  • 它有一个解释器组件,可以实现Java字节码和计算机操作系统之间的通信
  • 对于不同的运行平台,有不同的JVM

JVM屏蔽了底层运行平台的差别,实现了“一次编译,随处运行”

(2) 垃圾回收机制(GC)
  • 在 C/C++ 等语言中,由程序员负责回收无用内存
  • Java 语言消除了程序员回收无用内存空间的责任
  • JVM 提供了一种系统线程跟踪存储空间的分配情况,在 JVM 空闲时,检查并释放那些可以释放的存储空间。
  • 垃圾回收机制在 Java 程序运行过程中自动启用,程序员无法精确控制和干预

JAVA命名规范

  1. 命名不能以 _ 、 数字、$ 开始或结束
  2. 类名命名首字母大写
    public class StudentInfomation;
  3. 方法名、参数名、成员变量、局部变量使用首字母小写风格
    int studentCount = 0;

JAVA每日一练

  1. switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
        由于byte、short、char都可以隐含转换为int,所以这些类型以及这些类型的包装类型也是可以的。longl和String类型都不符合switch的语法规定,并且不能隐式转换成int类型,所以他们不能作用于switch语句中。但在JDK7的新特性中,switch语句可以用字符串。

  2. a++和++a的区别,&和&&区别
        a++先使用数据后自加,++a是先自加再使用数据。&逻辑不管前面条件是否正确,后面都执行,&&前面条件正确惨执行后面,若前面是false,后面的不执行,比&效率高。

  3. equals与==区别
    ==和equals比较的是基本数据类型和引用数据类型中的地址是否相同
    String类重写equals方法后变成比较两个对象的值

  4. Overload 和 Override的区别,Overloaded方法是否可以改变返回值的类型?
        Overload 是重载,被重载的方法必须改变参数列表(参数个数或类型不同);方法能够在同一个类中或子类中被重载,允许存在同名函数,但是他们的参数数量或参数类型不同,可以改变返回值的类型,但无法以返回值类型作为重载函数的区分标准,多数用于构造函数的重载;被重载的方法可以改变访问修饰符,也可以声明新的或更广的检查异常。
        Override 重写,作用在子类继承父类,子类重写父类中的方法,参数必须完全相同;返回值类型可以不同,但必须是父类返回值类型的派生类;子类重写的方法权限修饰符不能小于父类(如果父类中的一个方法声明为public,那么子类中重写的方法不能为protected);子类中的重写方法不能抛出比父方法更多的异常;r如果子类和父类在一个包中,方法被定义为private\final时则不能被重写;如果子类和父类不在一个包中,子类只能重写声明为public和protected的非final方法;构造函数不能重写。

  5. 解释说明java的三大特性
    封装、继承、多态
    封装:将实现细节和对象属性封装起来,对外不可见,仅对外公开访问方法
    继承:子类可继承父类功能并继续发展
    多态:方法的重载就是多态的表现

  6. 抽象类与接口的区别
    共同点:1.两者均不能被实例化
            2.两者的抽象方法中没有具体的实现
    不同点:1.抽象类要被子类继承,接口要被类实现
            2.抽象类可以声明抽象和非抽象方法,接口只能声明抽象方法
            3.抽象类声明变量是普通变量,接口定义变量是公开静态常量(public static final)
            4.接口不能有构造函数,抽象类可以有自己的构造函数

  7. 作用域 public,private,protected,以及不写时的区别?
    当被public修饰时,成员变量或方法可以在本类、包中、其他包中被访问
    当被修饰为protected,成员变量或方法可以在本类、子类、同一个包中进行访问
    当被修饰为private时,成员变量或方法只能在本类中被访问,对外不可见
    当不写(default)时,成员变量或方法只能在本类和本包中访问

创建对象内存分析

1. 栈

Java栈的区域很小,大概2m左右,特点是存取速度特别快
栈存储特点:先进后出
存储速度快的原因:

  1. 栈内存通过栈指针来创建空间与释放空间
  2. 指针向下移动,会创建新的内存,向上移动会释放这些内存(自动释放
  3. 这种方式的速度特别快,仅次与PC寄存器,但必须明确移动的大小和范围,这是为了方便指针的移动。

缺点:存储数据大小是固定的,影响程序的灵活性,所以更大部分的数据存储到了堆内存中。

2.堆

堆中存放的是类的对象属性及赋值
Java通过 new 关键字创建对象时,是在告诉JVM,需要去开辟一块新的堆内存空间
堆内存优点:不必关注堆内存中需要开辟多少存储空间,也不需要关注内存占用时长

堆内存中内存的释放是由**GC(垃圾回收器)**完成的

GC回收堆内存的规则:

  • 当栈内存中不存在此对象的引用时,则视其为垃圾,等待垃圾回收器回收

类与内存空间的使用

权限修饰符

修饰符子类其他包
public
protected×
default××
private×××
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值