JVM

!.从进阶到脑死亡的问题
前言
聊聊常见的面试题

1、请你谈谈你对JVM的理解? java8 虚拟机有什么更新?

2、什么是OOM,请你说说OOM产生的原因?如何分析?

3、JVM 的常用调优参数有哪些?

4、内存快照抓取,如何分析,命令是什么?

5、堆里面分区:Eden、Survial(from to)、老年区

6、GC垃圾收集算法有那个几个?谈谈利弊?

BAT 难度的面试题

1、JVM 垃圾回收的时候如何确定垃圾,GC Roots?

2、-X、 -XX 参数你用过哪些?

3、你常用的项目,发布后配置过JVM 调优参数吗?

4、引用、强引用、弱引用、虚引用都是什么,请你谈谈?

5、GC垃圾回收器和GC算法的关系?分别有哪些?

6、谈谈默认的垃圾回收器?

7、G1垃圾回收器的特点?

8、OOM 你看过几种?

1.1什么是jvm

JVM是一种用于计算设备的规范,它是一个虚构出来的计算机
使用JVM就是为了支持与操作系统无关,实现跨平台

1.2JVM内存区域划分

JVM的内部体系结构分为三部分,分别是:类装载器(ClassLoader)子系统,运行时数据区,和执行引擎。

在这里插入图片描述1.2.1类加载器ClassLoader

在这里插入图片描述类的加载、链接和初始化(了解)

加载:查找并加载类的二进制数据

连接:

  • 验证:保证被加载的类的正确性;
  • 准备:给类静态变量分配内存空间,赋值一个默认的初始值;
  • 解析:把类中的符号引用转换为直接引用
    在把java编译为class文件的时候,虚拟机并不知道所引用的地址;助记符:符号引用!
    转为真正的直接引用,找到对应的直接地址!

初始化:给类的静态变量赋值正确的值;

public class Test{
    public static int a = 1;
}
// 1、加载   编译文件为 .class 文件,通过类加载,加载到JVM

// 2、连接   
	  验证(1)  保证Class类文件没有问题
      准备(2)  给int类型分配内存空间,a = 0;
      解析(3)  符号引用转换为直接引用

// 3、初始化
      经过这个阶段的解析,把1 赋值给 变量 a;

// JVM 参数:
//     -XX:+TraceClassLoading // 用于追踪类的加载信息并打印出来
//     分析项目启动为什么这么慢,快速定位自己的类有没有被加载!
// rt.jar jdk 出厂自带的,最高级别的类加载器要加载的!
public class Demo02 {
    public static void main(String[] args) {
        System.out.println(MyChild1.str2);
        // 运行的结果
        /**
         * MyParent1 static
         * MyChild1 static
         * hello,str2
         */
    }
}

class MyParent1{
    public static String str = "hello,world";
    static {
        System.out.println("MyParent1 static");
    }
}

class MyChild1 extends MyParent1{
    public static String str2 = "hello,str2";           //如果final修饰  只会打印 "hello,str2" 常量在编译阶段的时候 常量池
    static {
        System.out.println("MyChild1 static");
    }
}

ClassLoader 分类

1、java虚拟机自带的加载器

  • BootStrap 根加载器 (加载系统的包,JDK 核心库中的类 rt.jar)
  • Ext 扩展类加载器 (加载一些扩展jar包中的类)
  • Sys/App 系统(应用类)加载器 (我们自己编写的类)

2、用户自己定义的加载器

  • ClassLoader,只需要继承这个抽象类即可,自定义自己的类加载器

双亲委派机制

双亲委派机制 可以保护java的核心类不会被自己定义的类所替代

一层一层的让父类去加载,如果顶层的加载器不能加载,然后再向下类推

// Demo01
// AppClassLoader       03
// ExtClassLoader       02
// BootStrap (最顶层)   01  java.lang.String  rt.jar

1.2.2.运行时数据区
Stack 栈是什么

栈就是管理程序运行的

存储一些基本类型的值,对象的引用,方法等…

在这里插入图片描述栈的优势:存取速度比堆快!仅次于寄存器,栈的数据是不可以共

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值