JVM——类加载

1.执行编译:

javac -parameters -d . HellowWorld.java

class,版本,长度,类名,方法名,找main,找常量池

2.字节码指令:
b1;返回值
invokevirtual/special/static

关于++的面试题:

3.关于异常中面试题
finally中执行return,会吞掉异常

 try{

            int i=1/0;

        }catch (Exception e){

        }finally {
            return 20;
        }

程序并不会报错,finally的代码一定会执行,所以避免在finally中写return语句。因为按照底层运行,他会继续加入到栈顶,从而覆盖掉原来的值。

4.语法糖

  • 默认构造器
  • 自动装箱拆箱(ValueOf intValue())
  • 泛型擦除(因为向上自动转型了 感觉只是变了个说法!)
  • 泛型反射(返回值)
  • 可变参数(String…args 其实就是String [])
  • foreach遍历
  • switch String(hashcode() equals)
    hashcode减少比较次数,因为有哈希冲突,所以需要equals再比较
  • switch enum(定义了一个数组,里面存储要比较的数)
  • 枚举
  • twr1(try with resources)前提是资源对象是直接或间接实现了AutoCloseable接口
    -InputStream OutputStream Connection Statement ResultSet都实现了!!!!
    那之前关个寂寞,非要自己写????黑的是怎么个意思????
    JVM——类加载_第1张图片
  • 重写桥接
  • 匿名内部类(引用局部变量必须是final)

5.类加载器
在这里插入图片描述
JVM——类加载_第2张图片

类加载:
1.准备:
static赋值:初始化时(调构造方法时)
分配空间:准备阶段

如果是final,字符串赋值:准备阶段即完成
注意:包装类型还是在初始化(因为他有个装箱操作了)
在这里插入图片描述

2.解析:
将常量池中的符号引用解析为直接引用
3.初始化:
调用方法


    class Singleton{

    private Singleton(){}   //这句话是什么意思???
    private static class Lazyholder{
        private static final Singleton SINGLETON=new Singleton();
        static{
            System.out.println("你好");
        }
    }

    public static Singleton getInstance(){
        return Lazyholder.SINGLETON;
    }
        }

6.类加载器:
JVM——类加载_第3张图片

扩展类加载器必须以jar包的方式存在:

jar -cvf **.jar 路径(类的路径)

双亲委派模式:(没有继承,级别上不同)

去查看ClassLoader源码:
自己类的加载器的findClass可以自定义一些查找规则,如应用程序的findClass找的是类路径下的,找到就return ,没有就null;
注意,是先找,没有往上级找,上级找不到,在回来用findClass找。

loadClass?????

线程上下文:
JVM——类加载_第4张图片

e
7.运行期优化:
jit(及时编译器)和解释器
方法内联

8.反射优化:
15次之后就换方法了。
15之前用的是本地那个。

你可能感兴趣的:(JVM)