1. 内存模型以及分区,需要详细到每个区放什么。

//运行时数据区域

方法区 Method Area

  各个线程共享的内存区域

  存储已被虚拟机加载的类信息 常量 静态变量 即时编译器编译后的代码

虚拟机栈 VM Stack

  线程私有 Java方法执行的内存模型 每个方法执行的同时会创建一个栈帧  用于存储局部变量表 操作数栈 动态链接 方法出口等信息

  每一个方法从调用到执行完成的过程 对应一个栈帧在虚拟机栈中入栈到出栈的过程  局部变量表存放了编译器可知的各种基本数据类型(boolean byte char short int float long double)

  对象引用 returnAddress类型

本地方法栈 Native Method Stack

  为虚拟机使用的native方法服务

堆 Heap

  Java虚拟机所管理内存最大的一块

  所有线程共享的一块内存区域 虚拟机启动时创建  存

  放所有对象实例及数组  垃圾收集器管理的主要区域 也被称为GC堆

程序计算器 Program Counter Register

  当前线程所执行的字节码的行号指示器 线程私有内存

///

运行时产量池

  方法区的一部分 用于存放编译期生成的各种字面量和符号引用

直接内存

  不是虚拟机运行时数据区的一部分 NIO

2. 堆里面的分区:Eden,survival from to,老年代,各自的特点。

3. 对象创建方法,对象的内存分配,对象的访问定位。

4. GC的两种判定方法:引用计数与引用链。

引用计数算法

  给对象添加一个引用计数器 每当有一个地方引用到它时 计数器就加1  引用失效时 计数器就减1 任何时刻计数器为0的对象不可能再被使用

  但是很难解决对象之间的相互循环引用的问题

可达性分析算法

  通过一系列的GC Roots的对象作为起始点 从这些节点开始向下搜索  所走过的路径称为引用链

  当一个对象到GC Roots没有任何引用链相连  则证明此对象不可用

5. GC的三种收集方法:标记清除、标记整理、复制算法的原理与特点,分别用在什么地方,如果让你优化收集方法,有什么思路?

标记清除算法

  首先标记处所有需要回收的对象 在标记完成后统一回收

  两点不足 一是标记和清除两个过程的效率都不高 二是标记清除后会产生大量不连续的内存碎片

复制算法

  将可用内存按容量划分为大小相等的两块 每次只使用其中的一块  当这一块的内存用完了 将还存活着的对象复制到另外一块上面  然后把已经使用内存空间一次清理掉

  好处是不用考虑内存碎片  代价是内存缩小为原来的一半

标记整理算法

  适合老年代  首先标记处所有需要回收的对象 让所有存活对象都向一端移动  然后直接清理掉端边界以外的内存

分代收集算法

6. GC收集器有哪些?CMS收集器与G1收集器的特点。

Serial收集器

ParNew收集器

Parallel Scavenge收集器

Serial Old收集器

Parallel Old收集器

CMS收集器

  一种以获取最短回收停顿时间为目标的收集器  基于标记清除算法实现

  优点 并发收集 低停顿  缺点 对CPU资源非常敏感 无法处理浮动垃圾 大量空间碎片产生

G1收集器

  面向服务端应用的垃圾收集器  特点 并行和并发 分代收集 空间整合 可预测的停顿

7. Minor GC与Full GC分别在什么时候发生?

8. 几种常用的内存调试工具:jmap、jstack、jconsole。

jmap

  内存映像工具

jstack

  堆栈跟踪工具

jconsole

  监视与管理控制台

9. 类加载的五个过程:加载、验证、准备、解析、初始化。

加载
   1 通过一个类的全限定名来获取定义此类的二进制字节流
   2 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构
   3 在内存中生成一个代表这个类的java.lang.Class对象 作为方法区这个类的各种数据的访问入口
验证
   确保Class文件的字节流包含的信息符合当前虚拟机的要求
   文件格式验证
   元数据验证
   字节码验证
   符合引用验证
准备 正式为类变量分配内存并设置类变量初始值得阶段
解析 将常量池内的符号引用替换为直接引用 类或接口解析 字段解析 类方法解析 接口方法解析
初始化

10. 双亲委派模型:Bootstrap ClassLoader、Extension ClassLoader、ApplicationClassLoader。

Bootstrap ClassLoader 启动类加载器 将JAVA_HOME/lib中类库加载到虚拟机内存中
Extension ClassLoader 扩展类加载器 将JAVA_HOME/lib/ext中类库加载
ApplicationClassLoader 加载用户路径上指定类库

11. 分派:静态分派与动态分派。

JVM过去过来就问了这么些问题,没怎么变,内存模型和GC算法这块问得比较多,可以在网上多找几篇博客来看看。

推荐书籍:《深入理解java虚拟机》

基础2 JVM的更多相关文章

  1. Java基础-考察JVM内部结构的常用工具介绍

    Java基础-考察JVM内部结构的常用工具介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们可以通过jvisualvm.exe考察jvm内部结构.而jvisualvm.exe ...

  2. Java基础篇(JVM)——类加载机制

    这是Java基础篇(JVM)的第二篇文章,紧接着上一篇字节码详解,这篇我们来详解Java的类加载机制,也就是如何把字节码代表的类信息加载进入内存中. 我们知道,不管是根据类新建对象,还是直接使用类变量 ...

  3. Java基础篇(JVM)——字节码详解

    这是Java基础篇(JVM)的第一篇文章,本来想先说说Java类加载机制的,后来想想,JVM的作用是加载编译器编译好的字节码,并解释成机器码,那么首先应该了解字节码,然后再谈加载字节码的类加载机制似乎 ...

  4. Java基础技术JVM面试【笔记】

    Java基础技术JVM面试[笔记] JVM JVM 对 java 类的使用总体上可以分为两部分:一是把静态的 class 文件加载到 JVM 内存,二是在 JVM 内存中进行 Java 类的生命周期管 ...

  5. Java基础:JVM垃圾回收算法

    众所周知,Java的垃圾回收是不需要程序员去手动操控的,而是由JVM去完成.本文介绍JVM进行垃圾回收的各种算法. 1. 如何确定某个对象是垃圾 1.1. 引用计数法 1.2. 可达性分析 2. 典型 ...

  6. Java基础篇——JVM之GC原理(干货满满)

    原创不易,如需转载,请注明出处https://www.cnblogs.com/baixianlong/p/10697554.html ,多多支持哈! 一.什么是GC? GC是垃圾收集的意思,内存处理是 ...

  7. 【Java_基础】JVM内存模型与垃圾回收机制

    1. JVM内存模型 Java虚拟机在程序执行过程会把jvm的内存分为若干个不同的数据区域来管理,这些区域有自己的用途,以及创建和销毁时间. JVM内存模型如下图所示 1.1 程序计数器 程序计数器( ...

  8. 基础03 JVM到底在哪里?

    1.Java是编译型语言还是解释型语言? 是解释型定义: 编译型语言:把做好的源程序全部编译成二进制代码的可运行程序.然后,可直接运行这个程序. 解释型语言:把做好的源程序翻译一句,然后执行一句,直至 ...

  9. 大数据基础篇----jvm的知识点归纳-5个区和垃圾回收机制

    一直对jvm看了又忘,忘了又看的.今天做一个笔记整理存放在这里. 我们先看一下JVM的内存模型图: 上面有5个区,这5个区干嘛用的呢? 我们想象一个场景: 我们有一个class文件,里面有很多的类的定 ...

随机推荐

  1. php获取json文件数据并动态修改网站头部文件meta信息 --基于CI框架

    话不多说了.直接开始吧  (如果有中文.请注意json只认utf-8编码) 首先你需要有一个json文件数据 {        "index": {                ...

  2. 人活着系列之平方数 分类: sdutOJ 2015-06-22 17:10 7人阅读 评论(0) 收藏

    人活着系列之平方数 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 偶然和必然?命运与意志?生与死?理性与情感?价值与非价值?在&quo ...

  3. Java 期末复习提纲

    Java 开发环境 Java 的特点 面向对象.跨平台.能把中小型程序写成大型程序 开发 Java 的流程 设计类 写代码 重构 Java 程序规范 Javadoc 风格注释 接口以 able 结尾 ...

  4. ArrayList实现原理

    转载:http://wiki.jikexueyuan.com/project/java-collection/arraylist.html ArrayList 概述 ArrayList 可以理解为动态 ...

  5. java配置自动任务,定期执行代码

    任务调用类: package business.tools.service; import java.util.ArrayList; import java.util.Calendar; import ...

  6. WPF中两个窗口的互斥

    这里所讲的互斥是两个窗口不同时存在,打开一,只显示一:点一相关按钮显示二,关闭一:关闭二,显示一. 窗口一: history winResult winChoice = new winResult() ...

  7. sql 清空所有数据

    近来发现数据库过大,空间不足,因此打算将数据库的数据进行全面的清理,但表非常多,一张一张的清空,实在麻烦,因此就想利用SQL语句一次清空所有数据.找到了三种方法进行清空.使用的数据库为MS SQL S ...

  8. InstallShield 打包时需要注意

    32位的程序可以在64位运行,但64位的程序不能再32位上运行 32位的包和64位的包要分开打,不然在32位的机器上安装不上

  9. BZOJ 2584: [Wc2012]memory(扫描线+线段树)

    题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2584 题意:给出平面n个线段,任意两个线段严格不相交,且每个线段不平行于坐标轴.移 ...

  10. ios runtime的相关知识

    一.iOS runtime原理 对于runtime机制,在网上找到的资料大概就是怎么去用这些东西,以及查看runtime.h头文件中的实现,当然这确实是一种很好的学习方法,但是,其实我们还是不会知道r ...