JVM是Java程序的运行环境,因此对于JVM的掌握有助于理解Java程序的执行以及编写,尤其是运行时碰到的一些诡异问题,那么怎么样能考察自己对于JVM关键知识点的掌握情况,帮助学习JVM机制呢,在这篇blog中来探讨下。
对于Java程序而言,JVM的关键机制有:字节码的加载、方法的执行、对象内存的分配和回收、线程和锁机制,这几个机制涉及到的jvm的知识点远没有写这几个字这么简单,里面的复杂度还是非常高的。
字节码的加载
JVM通过ClassLoader来完成字节码的动态加载,这里面涉及到的主要是ClassLoader的双亲委派、ClassLoader的编写方法、Class是否被加载的唯一标识以及Class的加载过程。
在考察的时候我觉得可以以这么两道简单的题来考察:
1、写一段将目录中指定的.class文件加载到JVM的程序,并通过Class对象获取到完整类名等信息;
2、一段展示代码,里面包含一个全局静态整型变量,问如果用两个ClassLoader加载此对象,执行这个整型变量++操作后结果会是怎么样的?
方法的执行
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属性加锁、全局变量属性加锁、方法加锁的不同点?
转自:http://www.blogjava.net/BlueDavy/archive/2009/03/27/262419.html
分享到:
相关推荐
下面是JVM面试题目相关的知识点: 一、JVM架构 JVM包含两个子系统和两个组件,两个子系统为Class loader(类装载)、Execution engine(执行引擎);两个组件为Runtime data area(运行时数据区)、Native ...
本文将全面探讨这些核心知识点,并提供相关面试题目的解答。 首先,JVM内存主要分为五个区域:堆区、栈区、方法区、本地方法栈和程序计数器。堆区是所有对象的诞生地,包括数组,分为新生代(Eden + Survivor,...
综合了常见的jvm 知识点,面试题。配图文,详解,以及答案。 一些简单题目未更新,后面会陆续补上。Java-jvm-面试-专题
JVM运行时内存是Java开发者需要了解的重要知识点之一。 新生代 新生代是一种JVM运行时内存区域,它用于存储短期生命周期的对象。新生代是Java开发者需要了解的重要知识点之一。 Eden区 Eden区是一种新生代内存...
Java作为一门广泛使用的编程语言,其知识点丰富多样,尤其在面试和实际开发中扮演着重要角色。本资料主要涵盖了以下几个核心领域: 1. **Java基础**:Java的基础知识包括语法特性,如类、对象、封装、继承、多态等...
本资源"【互联网一线大厂面试+学习指南】 涵盖大部分Java程序员所需要的面试知识点和面试技巧,分享真实面试经历"是一个宝贵的资料库,旨在帮助Java开发者提升自己的技能,成功通过一线大厂的面试。 首先,Java...
通过解决这些题目,你可以实践并巩固前面提到的各个知识点。 计算机网络是软件开发者的基础知识,包括TCP/IP协议、HTTP协议、DNS解析、网络模型等,这些在设计分布式系统或处理网络通信问题时会用到。 设计模式是...
以下是对标题和描述中提到的Java知识点的详细说明: 1. **Java基础**:这是学习Java的第一步,包括基本语法、数据类型、流程控制(如if-else、switch-case、for、while等)、类和对象、封装、继承、多态等概念。...
这份"最全的java知识点-面试题目等汇总"涵盖了Java学习和求职面试的关键知识点,包括基础语法、面向对象特性、数据结构与算法、代码规范等多个方面。下面我们将深入探讨这些核心主题。 1. **Java基础**: Java的基础...
【JVM内存模型详解】 Java虚拟机(JVM)内存模型是Java程序...总的来说,理解和掌握JVM内存模型及其管理机制对于优化Java应用程序性能至关重要,尤其是在面试中,这些知识点常常成为考察开发者技术深度的重要方面。
【标题】"JVM面试题 PDD 下载"所涉及的知识点主要集中在Java虚拟机(JVM)上,这是Java编程中的核心部分,对于开发者尤其是面试者来说,深入理解JVM至关重要。PDD可能指的是“问题、解答、讨论”或者“拼多多”(PDD...
以下是对这些知识点的详细解析: 1. **23种设计模式**:设计模式是软件开发中的一种最佳实践,它总结了在特定场景下解决问题的通用方法。包括创建型(如单例、工厂方法、抽象工厂)、结构型(如适配器、装饰器、...
本资源是 Java 面试题目的总结,涵盖了 Java 基础、多线程、设计模式、JVM、数据结构与算法、数据库、Spring、Netty、缓存、技术框架、技术深度、分布式、系统架构、LINUX、TCP/IP 等多方面的知识点。 Java 基础 ...
Java作为一门广泛使用的编程语言,其基础知识在面试中占据着重要的地位。对于Java开发者来说,扎实的Java基础知识是必备...熟练掌握这些知识点不仅能帮助开发者在面试中脱颖而出,也能在实际工作中提升代码质量和效率。
2.笔试面试真题,划分为面试真题和企业面试题(面试真题按知识点划分,企业面试题按企业划分,都是大厂的) 3.公司题库,含面试笔试真题解析和答案,上百道真题。 涉及的java知识点: 01_Java语法基础 02_Java集合 ...
以下就是针对标题"java解惑(罗列了95个容易让你迷惑的java知识点)"中提及的一些关键知识点的详细解释。 1. **Java内存模型**:Java内存模型(JMM)规定了线程如何共享和访问数据,包括主内存、工作内存以及内存间的...
Java作为一门广泛使用的编程语言,其笔试题目涵盖了众多的知识点,包括基础语法、面向对象特性、集合框架、异常处理、多线程、IO流、网络编程、反射、JVM内存模型以及设计模式等方面。这份“Java经典笔试题目”文档...
Java虚拟机(JVM)是Java程序运行的核心,它提供了执行Java字节码的环境,是Java平台的重要...通过理解和掌握这些知识点,开发者可以更好地理解Java程序的运行机制,解决性能问题,以及在面试中展现出对JVM的深入理解。
使用场景及目标:帮助读者系统回顾和强化关于Java语言深层次的知识点和技术能力,提升应聘成功几率。 其他说明:面试题覆盖范围广泛且全面阐述了Java中的并发特性和进阶主题,在加深求职者的专业知识的同时也有助于...
JVM知识点: * 什么是JVM?JVM的组成部分有哪些? * 什么是Java的内存模型?Java中有哪些垃圾回收算法? * 什么是Java的类加载机制?Java中有哪些类加载器? * 什么是Java的GC?Java中有哪些GC算法? * 什么是Java...