Java基础知识

一、JVM内存模型


其中栈、本地方法区、程序计数器为线程私有,堆、方法区为线程共享。


二、JVM内存回收机制

GC Root

  1. 栈;
  2. 本地方法区;
  3. 方法区;
直接引用或间接引用的堆内的对象不允许删除。

GC 算法

  1. 标记-清理:缺点为容易产生内存碎片;
  2. 标记-整理:缺点为资源开销较大;
  3. 复制回收:缺点为需要2倍内存;
实际的GC,是把堆进行了划分。其中Young区,S0:S1:E=1:1:8,默认的配置,符合对象“朝生夕死”的规律。模型如下:

  • Young GC:当Eden区快要满的时候,使用复制回收算法,把未标记的对象复制到S0区,然后清理E区和S1区;
    当下次E区快满时,将E区 + S0区幸存对象复制到S1区。然后是交替往复的工作,即E + S1-->S0,
    E + S0-->S1,E + S1-->S0...
  • Full GC:如果对象被回收1次,其age加1。如果age>=15(默认),则不放入S区,而是放入Old区。此外,Old区还存放大对象,避免
    多次复制导致的系统开销。如果Old区满了,则会触发Old GC,一般会伴随Young GC,称之为Full GC。此时,会
    stop the work,采用标记-清理或标记-整理算法进行垃圾回收。
    • 当它的年龄增加到一定程度(默认为 15 岁),就会被晋升到老年代中。对象晋升到老年代的年龄阈值,可以通过参数 -XX:MaxTenuringThreshold 来设置。
    • 🐛 修正(参见:issue552 :“Hotspot 遍历所有对象时,按照年龄从小到大对其所占用的大小进行累积,当累积的某个年龄大小超过了 survivor 区的一半时,取这个年龄和 MaxTenuringThreshold 中更小的一个值,作为新的晋升年龄阈值”。
  • 总结:Young GC主要采用复制回收算法,Full GC采用标记-清理或标记-整理算法。新生代的垃圾回收器有ParNew,老年代的垃圾回收器有CMS。

三、其他Java基础知识

1、基本概念

1.Java程序初始化的顺序是怎样的?

Java程序初始化一般遵循3个原则(优先级依次递减):
1)静态对象(变量)优先于非静态对象(变量)初始化,其中静态对象只初始化1次,非静态对象可以初始多次;
2)父类优先于子类进行初始化;
3)按照成员变量的定义顺序进行初始化。即使变量定义散布于方法定义之中,它们依然在任何方法(包括构造函数)被调用之前先初始化。

Java程序初始化工作可以在许多不同的代码块中来完成(例如:静态代码块、构造函数等),它们的执行顺序如下(按照三段式记忆):
即:
1、父类静态变量和静态代码块(先声明的先执行);

2、子类静态变量和静态代码块(先声明的先执行);

3、父类的变量和代码块(先声明的先执行);

4、父类的构造函数;

5、子类的变量和代码块(先声明的先执行);

6、子类的构造函数。


2.Java中的作用域有哪些?

Java语言中,变量类型主要有3种:成员变量、静态变量和局部变量。其中局部变量的作用域与可见性为它所在的花括号内;静态变量的作用范围与类的实例化对象的作用范围生命周期一致。

成员变量作用域如下:
作用域与可见性 当前类 同一个包 子类 其他包
public
T T
T
T
private T
F F F
protected
T
T
T
F
default T
T
F F
需要注意:这些修饰符只能修饰成员变量,不能修饰局部变量private和protected不能修饰外部类(只有public、abstract或final可以修饰外部类但它们可以修饰内部类

3.什么是反射机制?

反射机制,允许程序在运行时进行自我检查,同时也允许对其内部但成员进行操作。具体而言,反射机制的主要功能有:1)得到一个对象所属的类;2)获取一个类的所有成员变量和方法;
3)在运行时创建对象;4)在运行时调用对象的方法。
除此之外,反射机制的非常重要的作用就是可以在运行时动态地创建类的对象。得到class类的3种方法:1)Class.forName(“类的路径”);2)类名.Class;3)实例.getClass()。

2、面向对象技术



3、关键字


4、基本类型和运算


5、字符串和数组


6、异常处理


7、输入输出流


8、Java平台与内存管理


9、容器


10、多线程


11、Java数据库操作


四、Java Web


五、数据库原理


六、设计模式


七、数据结构和算法


八、海量数据处理



全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务