JAVA 基础核心面试问题分析,看懂了轻( 三 )


List<String> list=new ArrayList<>();list.add("A");list.add("B");//list.add(100);//在运行时将100写入到list集合//1.获取list对象的字节码对象Class<?> cls=list.getClass();//2.获取list字节码对象中的add方法对象Method method=//cls.getDeclaredMethod("add",Object.class);cls.getDeclaredMethod("add",int.class,Object.class);//3.通过反射执行方法对象将100写入集合 。//执行list对象的method方法//method.invoke(list, 100);method.invoke(list, 0,100);System.out.println(list);Java 虚拟机分析你是如何理解JVM的?JVM(Java Virtual machine)是JAVA平台的一部分,是一种能够运行Java bytecode的虚拟机,如图所示:

JAVA 基础核心面试问题分析,看懂了轻

文章插图
 
JVM是硬件计算机的抽象(虚构)实现,可以解释执行JAVA字节码,也是实现JAVA跨平台运行的基石,如图所示:
JAVA 基础核心面试问题分析,看懂了轻

文章插图
 
我们为什么要学习JVM?深入理解JVM可以帮助我们从平台角度提高解决问题的能力,例如:
  1. 有效防止内存泄漏(Memory leak) 。
  2. 优化线程锁的使用 (Thread Lock) 。
  3. 科学进行垃圾回收 (Garbage collection) 。
  4. 提高系统吞吐量 (throughput) 。
  5. 降低延迟(Delay),提高其性能(performance) 。
市场上有哪些主流的JVM呢?JVM是一种规范基于这种规范,不同公司就对此规范做了具体实现,例如市场上的一些主流JVM如下:
  1. JRockit VM (BEA公司研发,后在2008年由Oracle公司收购) 。
  2. HotSpot VM (Sun公司研发,后在2010年由Oracle公司收购) 。
  3. J9 VM (IBM 内部使用) 。
    说明:HotSpot目前是甲骨文公司最主要的一款JVM虚拟机,也是我们现在最常用的一种 。
JVM的体系结构是怎样的?JVM (Java Hotspot Architecture:主要分为三大部分,如图-6所示:
  1. 类加载系统 (ClassLoader System) :负责加载类到内存 。
  2. 运行时数据区 (Runtime Data Area):负责存储数据信息 。
  3. 执行引擎 (Execution Engine):负责调用对象执行业务 。

JAVA 基础核心面试问题分析,看懂了轻

文章插图
 
其中:
  1. ClassLoader作用是什么?(负责将类从磁盘或网络加载内存)
  2. ClassLoader 可以自己定义吗?(可以,参考Tomcat,MyBatis,Spring等,他们都有自定义类加载器)
  3. JVM 中的方法区(Method Area) 如何理解?(逻辑上的一种定义,不同JVM有不同实现,比方说有JVM中称元数据区,有的称持久代)
  4. HotSpot JDK8虚拟机在创建对象时,所有的对象都会分配在堆中吗?(不一定,小对象未逃逸,可以直接分配在栈上)
  5. 如何知道类的加载顺序?(可通过配置JVM 参数-XX:+TraceClassLoading 检查类的加载过程)
JDK8中的Hotspot简易内存体系结构如下:
JAVA 基础核心面试问题分析,看懂了轻

文章插图
 
你知道JVM有哪些运行模式吗?JVM有两种运行模式Server与Client 。两种模式的区别在于,Client模式启动速度较快,Server模式启动较慢;但是启动进入稳定期之后Server模式的程序运行速度比Client要快很多 。这是因为Server模式启动的JVM采用的是重量级的虚拟机,对程序采用了更多的优化;而Client模式启动的JVM采用的是轻量级的虚拟机 。所以Server启动慢,但稳定后速度比Client远远要快 。
现在64位的jdk中默认都是server模式(可通过 java -version进行查看) 。当虚拟机运行在-client模式的时候,使用的是一个代号为C1的轻量级编译器, 而server模式启动的虚拟机采用相对重量级,代号为C2的编译器.c1、c2都是JIT编译器, C2比C1编译器编译的相对彻底,服务起来之后,性能更高 。




推荐阅读