`

jvm知识点题目

    博客分类:
  • java
阅读更多

出处:http://www.blogjava.net/BlueDavy/archive/2009/03/27/262419.html

 

JVM是Java程序的运行环境,因此对于JVM的掌握有助于理解Java程序的执行以及编写,尤其是运行时碰到的一些诡异问题,那么怎么样能考察自己对于JVM关键知识点的掌握情况,帮助学习JVM机制呢,在这篇blog中来探讨下。

对于Java程序而言,JVM的关键机制有:字节码的加载、方法的执行、对象内存的分配和回收、线程和锁机制,这几个机制涉及到的jvm的知识点远没有写这几个字这么简单,里面的复杂度还是非常高的。

字节码的加载
JVM通过ClassLoader来完成字节码的动态加载,这里面涉及到的主要是ClassLoader的双亲委派、ClassLoader的编写方法、Class是否被加载的唯一标识以及Class的加载过程。
在考察的时候我觉得可以以这么两道简单的题来考察:
1、写一段将目录中指定的.class文件加载到JVM的程序,并通过Class对象获取到完整类名等信息;
2、一段展示代码,里面包含一个全局静态整型变量,问如果用两个ClassLoader加载此对象,执行这个整型变量++操作后结果会是怎么样的?

 

 

A:ClassLoader双亲委派:先从parent classLoader 找,再从Bootstrap ClassLoader装载,装载失败再从本ClassLoader装载

B:Class被装载唯一标识:ClassLoader与类全名

 

<noscript type="text/javascript"> new Draggable("related_topics"); </noscript>

jvm classLoader architecture :

a, Bootstrap ClassLoader/启动类加载器
       主要负责jdk_home/lib目录下的核心 api 或 -Xbootclasspath 选项指定的jar包装入工作.

b, Extension ClassLoader/扩展类加载器
       主要负责jdk_home/lib/ext目录下的jar包或 -Djava.ext.dirs 指定目录下的jar包装入工作

c, System ClassLoader/系统类加载器
        主要负责java -classpath/-Djava.class.path所指的目录下的类与jar包装入工作.

b, User Custom ClassLoader/用户自定义类加载器(java.lang.ClassLoader的子类)
        在程序运行期间, 通过java.lang.ClassLoader的子类动态加载class文件, 体现java动态实时类装入特性.

类加载器的特性:

1, 每个ClassLoader都维护了一份自己的名称空间, 同一个名称空间里不能出现两个同名的类。
2, 为了实现java安全沙箱模型顶层的类加载器安全机制, java默认采用了 " 双亲委派的加载链 " 结构.

 

 

自定义classLoader:重写findClass,自行读取class文件,传给defindClass即可

  1.   public Class findClass(String name) {   
  2.     byte[] data = loadClassData(name);   
  3.     return defineClass(name, data, 0, data.length);   
  4.   }   
  5.      
  6.   private byte[] loadClassData(String name) {   
  7.     FileInputStream fis = null;   
  8.     byte[] data = null;   
  9.     try {   
  10.       fis = new FileInputStream(new File("D:\\project\\test\\" + name + ".class"));   
  11.       ByteArrayOutputStream baos = new ByteArrayOutputStream();   
  12.       int ch = 0;   
  13.       while ((ch = fis.read()) != -1) {   
  14.         baos.write(ch);   
  15.       }   
  16.       data = baos.toByteArray();   
  17.     } catch (IOException e) {   
  18.       e.printStackTrace();   
  19.     }   
  20.     return data;   
  21.   }  

 



方法的执行
JVM有自己的一套指令系统,字节码中即已经是指令了,需要大概掌握了JVM对static、interface、instance、构造器采用的不同的执行方法,另外就是JVM中反射的实现(可以以Sun JDK来举例)、动态代理的实现,最后相关的就是JVM执行字节码的方式(解释、JIT、Hotspot),以及什么时候触发编译成机器码,如何控制。
在考察的时候我觉得可以以这么三道题来考察:
1、A a=new A();a.execute();和IA a=new A();a.execute();执行有什么不同;
2、反射的性能低的原因是?
3、编写一段程序,动态的创建一个接口的实现,并加载到JVM中执行;(可以允许用BCEL等工具)

对象内存的分配和回收
这块涉及的知识点也是比较的多,例如JVM内存区域的划分、自然类型和引用类型的内存分配的不同、TLAB、GC的算法、Sun JDK对于GC的实现、GC触发的时机、GC的跟踪和分析的方法。
在考察的时候我觉得可以以这么三道题来考察:
1、经典的String比较程序题:
   String a="a";
   String b="b";
   String ab="ab";
   (a+b)==ab;  ??  (引深题,如何才能让(a+b)==ab)
   ("a"+"b")==ab; ?? 
2、写一段程序,让其OutOfMemory,或频繁执行Minor GC,但又不触发Full GC,又或频繁执行Full GC,但不执行minor GC,而且不OutOfMemory,甚至可以是控制几次Minor GC后发生一次Full GC;
3、详细讲解GC的实现,例如minor GC的时候导致是怎么回收对象内存的,Full GC的时候是怎么回收对象内存的。

线程和锁机制
这块涉及的知识点仍然是非常的多,例如线程中变量的操作机制、线程调度机制、线程的状态以及控制方法、线程的跟踪和分析方法、同步关键字、lock/unlock的原理等。
在考察的时候我觉得可以以这么几道题考察下:
1、i++的执行过程;
2、一个线程需要等待另外一个线程将某变量置为true才继续执行,如何编写这段程序,或者如何控制多个线程共同启动等;
3、控制线程状态的转换的方法,或者给几个thread dump,分析下哪个线程有问题,问题出在哪;
4、static属性加锁、全局变量属性加锁、方法加锁的不同点?

分享到:
评论

相关推荐

    Java虚拟机JVM面试题目

    下面是JVM面试题目相关的知识点: 一、JVM架构 JVM包含两个子系统和两个组件,两个子系统为Class loader(类装载)、Execution engine(执行引擎);两个组件为Runtime data area(运行时数据区)、Native ...

    JVM大厂面试题目集锦、垃圾回收、内存优化、内存结构全方位题目(附答案)

    本文将全面探讨这些核心知识点,并提供相关面试题目的解答。 首先,JVM内存主要分为五个区域:堆区、栈区、方法区、本地方法栈和程序计数器。堆区是所有对象的诞生地,包括数组,分为新生代(Eden + Survivor,...

    jvm专题.docx

    综合了常见的jvm 知识点,面试题。配图文,详解,以及答案。 一些简单题目未更新,后面会陆续补上。Java-jvm-面试-专题

    Java核心知识点.pdf

    JVM运行时内存是Java开发者需要了解的重要知识点之一。 新生代 新生代是一种JVM运行时内存区域,它用于存储短期生命周期的对象。新生代是Java开发者需要了解的重要知识点之一。 Eden区 Eden区是一种新生代内存...

    Java知识点总结,面试必备,java基础、java集合、JVM、Java并发

    Java作为一门广泛使用的编程语言,其知识点丰富多样,尤其在面试和实际开发中扮演着重要角色。本资料主要涵盖了以下几个核心领域: 1. **Java基础**:Java的基础知识包括语法特性,如类、对象、封装、继承、多态等...

    【互联网一线大厂面试+学习指南】 涵盖大部分Java程序员所需要的面试知识点和面试技巧,分享真实面试经历。.zip

    本资源"【互联网一线大厂面试+学习指南】 涵盖大部分Java程序员所需要的面试知识点和面试技巧,分享真实面试经历"是一个宝贵的资料库,旨在帮助Java开发者提升自己的技能,成功通过一线大厂的面试。 首先,Java...

    Java知识点总结,面试必备,java基础、java集合、JVM、Java并发、数据结构与算法、LeetCode等.zip

    通过解决这些题目,你可以实践并巩固前面提到的各个知识点。 计算机网络是软件开发者的基础知识,包括TCP/IP协议、HTTP协议、DNS解析、网络模型等,这些在设计分布式系统或处理网络通信问题时会用到。 设计模式是...

    Java知识点总结,面试必备,java基础、java集合、JVM、Java并发、剑指offer、MySQL、Redis等.zip

    以下是对标题和描述中提到的Java知识点的详细说明: 1. **Java基础**:这是学习Java的第一步,包括基本语法、数据类型、流程控制(如if-else、switch-case、for、while等)、类和对象、封装、继承、多态等概念。...

    最全的java知识点-面试题目等汇总

    这份"最全的java知识点-面试题目等汇总"涵盖了Java学习和求职面试的关键知识点,包括基础语法、面向对象特性、数据结构与算法、代码规范等多个方面。下面我们将深入探讨这些核心主题。 1. **Java基础**: Java的基础...

    JVM常见面试题解析.pdf

    【JVM内存模型详解】 Java虚拟机(JVM)内存模型是Java程序...总的来说,理解和掌握JVM内存模型及其管理机制对于优化Java应用程序性能至关重要,尤其是在面试中,这些知识点常常成为考察开发者技术深度的重要方面。

    JVM面试题 PDD 下载

    【标题】"JVM面试题 PDD 下载"所涉及的知识点主要集中在Java虚拟机(JVM)上,这是Java编程中的核心部分,对于开发者尤其是面试者来说,深入理解JVM至关重要。PDD可能指的是“问题、解答、讨论”或者“拼多多”(PDD...

    java学习知识点以及面试题

    以下是对这些知识点的详细解析: 1. **23种设计模式**:设计模式是软件开发中的一种最佳实践,它总结了在特定场景下解决问题的通用方法。包括创建型(如单例、工厂方法、抽象工厂)、结构型(如适配器、装饰器、...

    Java面试题目总结(137页).docx

    本资源是 Java 面试题目的总结,涵盖了 Java 基础、多线程、设计模式、JVM、数据结构与算法、数据库、Spring、Netty、缓存、技术框架、技术深度、分布式、系统架构、LINUX、TCP/IP 等多方面的知识点。 Java 基础 ...

    Java基础知识面试题目.rar

    Java作为一门广泛使用的编程语言,其基础知识在面试中占据着重要的地位。对于Java开发者来说,扎实的Java基础知识是必备...熟练掌握这些知识点不仅能帮助开发者在面试中脱颖而出,也能在实际工作中提升代码质量和效率。

    java笔试、面试题、面试宝典、经验、简历模板(笔试面试题含题目、解题思路和答案,真题包含各个大厂,知识点全面)

    2.笔试面试真题,划分为面试真题和企业面试题(面试真题按知识点划分,企业面试题按企业划分,都是大厂的) 3.公司题库,含面试笔试真题解析和答案,上百道真题。 涉及的java知识点: 01_Java语法基础 02_Java集合 ...

    java解惑(罗列了95个容易让你迷惑的java知识点)

    以下就是针对标题"java解惑(罗列了95个容易让你迷惑的java知识点)"中提及的一些关键知识点的详细解释。 1. **Java内存模型**:Java内存模型(JMM)规定了线程如何共享和访问数据,包括主内存、工作内存以及内存间的...

    Java经典笔试题目

    Java作为一门广泛使用的编程语言,其笔试题目涵盖了众多的知识点,包括基础语法、面向对象特性、集合框架、异常处理、多线程、IO流、网络编程、反射、JVM内存模型以及设计模式等方面。这份“Java经典笔试题目”文档...

    java-JVM-面试题从基础到高级详解-HM

    Java虚拟机(JVM)是Java程序运行的核心,它提供了执行Java字节码的环境,是Java平台的重要...通过理解和掌握这些知识点,开发者可以更好地理解Java程序的运行机制,解决性能问题,以及在面试中展现出对JVM的深入理解。

    Java并发与高级特性面试知识点解析

    使用场景及目标:帮助读者系统回顾和强化关于Java语言深层次的知识点和技术能力,提升应聘成功几率。 其他说明:面试题覆盖范围广泛且全面阐述了Java中的并发特性和进阶主题,在加深求职者的专业知识的同时也有助于...

    200道Java面试常见题目.pdf

    JVM知识点: * 什么是JVM?JVM的组成部分有哪些? * 什么是Java的内存模型?Java中有哪些垃圾回收算法? * 什么是Java的类加载机制?Java中有哪些类加载器? * 什么是Java的GC?Java中有哪些GC算法? * 什么是Java...

Global site tag (gtag.js) - Google Analytics