# JAVA 继承时父子类的初始化顺序是怎样的

具体顺序如下

  1. 父类 -- 静态变量
  2. 父类 -- 静态初始化块
  3. 子类 -- 静态变量
  4. 子类 -- 静态初始化块
  5. 父类 -- 变量
  6. 父类 -- 初始化块
  7. 父类 -- 构造器
  8. 子类 -- 变量
  9. 子类 -- 初始化块
  10. 子类 -- 构造器

总结如下:静态优于非静态,父类优于子类,变量优于初始化块优于构造器

# JVM 的双亲委派模型

为什么设计,有何好处

  1. 确保安全,避免 JAVA 核心类库被修改
  2. 避免重复加载
  3. 保证类的唯一性

可以打破双亲委派模型吗?如何打破?

可以。自定义一个类加载器,重写其中的 loadClass 方法,使其不进行双亲委派即可

# 什么是内存溢出,什么是内存泄露

内存溢出:指程序申请内存时,没有足够的内存空间供其使用,抛出 OutOfMemory

内存泄露:指程序运行后,没有释放所占用的内存空间,一次泄露没有太大问题,长时间内存泄露会导致可用内存减少,最终导致内存溢出

# 线上项目 JVM 怎么设置

假设线上 4 核 8G 机器

JVM: 栈,堆,元空间

  1. 栈:1m,-xss512k (改为 512k), 一个线程是 1m, 一个线上项目 Tomcat 可能有 300 个线程,300m;
  2. 堆:大概把机器一半的内存给堆 (新生代,老年代)
  3. 元空间:一般 512M 够用
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

KagurazakaAsahi 微信支付

微信支付