Java面试知识点之虚拟机篇(一)

前言:Java虚拟机的重要性不言而喻,不管是在实际工作中,还是面试中。

1.JVM架构

要点:

主要了解Java虚拟机运行时数据区:程序计数器、Java虚拟机栈、本地方法栈、Java堆和方法区。

参考:

https://blog.csdn.net/seu_calvin/article/details/51404589

2.新生代、老年代

在JVM中,堆是被JVM所管理的最大一块内存空间,主要用于存放各种类的实例对象。

堆一般分为:新生代、老年代。

新生代:主要是用来存放新生的对象。一般占据堆的1/3空间。由于频繁创建对象,所以新生代会频繁触发MinorGC进行垃圾回收。

新生代又分为 Eden区、SurvivorFrom、SurvivorTo三个区。

Eden区:Java新对象的出生地(如果新创建的对象占用内存很大,则直接分配到老年代)。当Eden区内存不够的时候就会触发MinorGC,对新生代区进行一次垃圾回收。

SurvivorTo:保留了一次MinorGC过程中的幸存者。

SurvivorFrom:上一次GC的幸存者,作为这一次GC的被扫描者。

MinorGC的过程:MinorGC采用复制算法。首先,把Eden和SurvivorFrom区域中存活的对象复制到SurvivorTo区域(如果有对象的年龄以及达到了老年的标准,则赋值到老年代区),同时把这些对象的年龄+1(如果SurvivorTo不够位置了就放到老年区);然后,清空Eden和SurvivorFrom中的对象;最后,SurvivorTo和SurvivorFrom互换,原SurvivorTo成为下一次GC时的SurvivorFrom区。

老年代:主要存放应用程序中生命周期长的内存对象。

老年代的对象比较稳定,所以MajorGC不会频繁执行。在进行MajorGC前一般都先进行了一次MinorGC,使得有新生代的对象晋身入老年代,导致空间不够用时才触发。当无法找到足够大的连续空间分配给新创建的较大对象时也会提前触发一次MajorGC进行垃圾回收腾出空间。

MajorGC采用标记—清除算法:首先扫描一次所有老年代,标记出存活的对象,然后回收没有标记的对象。MajorGC的耗时比较长,因为要扫描再回收。MajorGC会产生内存碎片,为了减少内存损耗,我们一般需要进行合并或者标记出来方便下次直接分配。

当老年代也满了装不下的时候,就会抛出OOM(Out of Memory)异常。

关于永久代:指内存的永久保存区域,主要存放Class和Meta(元数据)的信息,Class在被加载的时候被放入永久区域. 它和和存放实例的区域不同,GC不会在主程序运行期对永久区域进行清理。所以这也导致了永久代的区域会随着加载的Class的增多而胀满,最终抛出OOM异常。

主要参考:

https://www.cnblogs.com/E-star/p/5556188.html

https://www.cnblogs.com/junwangzhe/p/6282550.html

https://www.cnblogs.com/ygj0930/p/6522828.html

3.对象的创建过程

关于Java中对象的创建过程,参考:http://www.cnblogs.com/chenyangyao/p/5296807.html

4.类加载过程

类的加载过程包括:加载、验证、准备、解析、初始化。

具体参考:

https://blog.csdn.net/u010425776/article/details/51254858

http://www.cnblogs.com/chenyangyao/p/5245669.html

http://www.cnblogs.com/xrq730/p/4844915.html

5.Class文件结构

Class的文件结构主要有9部分。

具体参考:

https://blog.csdn.net/u010425776/article/details/51245055

6.对象的内存分配原则

具体参考:

http://www.cnblogs.com/xrq730/p/4841177.html

https://blog.csdn.net/u010425776/article/details/51192448

7.对象的访问过程

具体参考:

https://www.cnblogs.com/haitaofeiyang/p/7767919.html

8.关于类加载器

具体参考:

http://www.cnblogs.com/xrq730/p/4845144.html

9.类的加载时机

通过了解类的加载时机,就可以了解类的初始化过程了。

具体参考:

https://blog.csdn.net/u010425776/article/details/51251430

10.JVM垃圾收集策略

具体参考:

http://www.cnblogs.com/xrq730/p/4836700.html

https://blog.csdn.net/u010425776/article/details/51189318

by Shawn Chen 2018.4.6日,中午。

原文地址:https://www.cnblogs.com/morewindows0/p/8615646.html

时间: 2024-11-08 00:12:44

Java面试知识点之虚拟机篇(一)的相关文章

Java面试知识点之数据库篇(一)

前言:数据库的相关知识,在面试中也经常出现,笔者认为非常有必要对此类知识进行相关总结. 1.索引 索引是对数据库表中一列或多列的值进行排序的结构,是帮助数据库高效获取数据的数据结构. 通俗理解:索引就是加快检索表中数据的方法.数据库的索引类似于书籍的索引.在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息:在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库,从而提高查询速度. 索引的优点: 1)通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性.2)可

关于Java面试知识点解析——JVM基础篇

跳槽时时刻刻都在发生,但是我建议大家跳槽之前,先想清楚为什么要跳槽.切不可跟风,看到同事一个个都走了,自己也盲目的开始面试起来(期间也没有准备充分),到底是因为技术原因(影响自己的发展,偏移自己规划的轨迹),还是钱给少了,不受重视. 准备不充分的面试,完全是浪费时间,更是对自己的不负责(如果title很高,当我没说).今天给大家分享下 Java面试知识点解析--JVM基础篇 1)Java 是如何实现跨平台的? 注意:跨平台的是 Java 程序,而不是 JVM.JVM 是用 C/C++ 开发的,是

Java 面试知识点解析(二)——高并发编程篇

前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大部分内容参照自这一篇文章,有一些自己补充的,也算是重新学习一下 Java 吧. 前序文章链接: Java 面试知识点解析(一)--基础知识篇 (一)高并发编程基础知识 这里涉及到一些基础的概念,我重新捧起了一下<实战 Java 高并发程序设计>这一本书,感觉到心潮澎湃,这或许就是笔者叙述功底扎实的

Java面试知识点总结(4)

这部分主要是开源Java EE框架方面的内容 126.什么是ORM? 答:对象关系映射(Object-Relational Mapping,简称ORM)是一种为了解决程序的面向对象模型与数据库的关系模型互不匹配问题的技术:简单的说,ORM是通过使用描述对象和数据库之间映射的元数据(在Java中可以用XML或者是注解),将程序中的对象自动持久化到关系数据库中或者将关系数据库表中的行转换成Java对象,其本质上就是将数据从一种形式转换到另外一种形式. 127.持久层设计要考虑的问题有哪些?你用过的持

Java面试知识点总结(2)

1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么. - 继承:继承是从已有类得到继承信息创建新类的过程.提供继承信息的类被称为父类(超类.基类):得到继承信息的类被称为子类(派生类).继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段(如果不能理解请阅读阎宏博士的<Java与模式>或<设计

Java面试知识点总结(3)

96.阐述Servlet和CGI的区别? 答:Servlet与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式运行其service()方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于Servlet. 补充:Sun Microsystems公司在1996年发布Servlet技术就是为了和CGI进行竞争,Servlet是一个特殊的Java程序,一个基于Java的Web应用通常包含一个或多个Servlet类.S

java 面试知识点

关于基础知识:你可以看看这些名词或知识点,看是否能说出个一二三四来. JavaSE----基本语法.数据类型.操作符等:int.long.Integer.Long.if.else.for.while----面向对象:class(类).Object(对象).instance(实例).state(状态).behavior(行为).field.method.new.可见性(访问控制).attribute.property.package.import.static variable.class var

阿里 Java面试 知识点

=================================== 基础知识篇 =================================== 多态 java反射 java序列化 内部类作用 final作用 interface和abstractClass区别 synchronized和volatile区别 hashmap和hashtable的区别 hashmap源代码 hash算法 hash冲突解决方案 一致性hash算法 HashCode()和equel()方法区别 线程池 Arr

这些喜闻乐见的Java面试知识点,你都掌握了吗?

最近分享了一些有关学习方法和经验的文章,得到了很多读者的反馈,恰巧大家在昨天推文中的投票里一直选择了"Java基础的复习方法"这一项,那么今天我们就谈谈这方面的内容吧. 其实对于Java基础的学习,我觉得最好的方法就是理论结合实践,先通过书籍,博客等内容理解基本原理,再通过写一些demo进行实践,做到知其然又知其所以然. 前言 以下内容出自我的CSDN技术博客专栏,由于内容较多,我在这里只贴一个大概的目录. 本系列文章是我在秋招复习过程中创作和整理的内容,当时的初衷也是希望能够通过写博