VM基本是BAT面试必考的内容,今天我们先从JVM内存模型开启详解整个JVM系列,希望看完整个系列后,可以轻松通过BAT关于JVM的考核. BAT必考JVM系列专题 1.JVM内存模型 2.JVM垃圾回收算法 3.JVM垃圾回收器 4.JVM参数详解 5.JVM性能调优 JVM内存结构 由上图可以清楚的看到JVM的内存空间分为3大部分: 堆内存 方法区 栈内存 其中栈内存可以再细分为java虚拟机栈和本地方法栈,堆内存可以划分为新生代和老年代,新生代中还可以再次划分为Eden区.From Sur…
垃圾回收算法 1.标记清除 标记-清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段. 在标记阶段首先通过根节点(GC Roots),标记所有从根节点开始的对象,未被标记的对象就是未被引用的垃圾对象.然后,在清除阶段,清除所有未被标记的对象. 适用场合: 存活对象较多的情况下比较高效 适用于年老代(即旧生代) 缺点: 容易产生内存碎片,再来一个比较大的对象时(典型情况:该对象的大小大于空闲表中的每一块儿大小但是小于其中两块儿的和),会提前触发垃圾回收 扫描了整个空间两次(第一次:标记存活对象:第…
JVM内存调优 对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数. 1.Full GC 会对整个堆进行整理,包括Young.Tenured和Perm.Full GC因为需要对整个堆进行回收,所以比较慢,因此应该尽可能减少Full GC的次数. 2.导致Full GC的原因 1)年老代(Tenured)被写满 调优时尽量让对象在新生代GC时被回收.让对象在新生代多存活一段时间和不要创建过大的对象及数组避免直接在旧生代创建对象 . 2)持久代Pemanet Generati…
类加载器的关系 类加载器的分类 JVM支持两种类加载器,一种为引导类加载器(Bootstrap ClassLoader),另外一种是自定义类加载器(User Defined ClassLoader) 引导类加载器是由C/C++编写的无法访问到 Java虚拟机规定:所有派生于抽象类ClassLoader的类加载器都划分为自定义加载器 最常见的类加载器只有三个(如上图所示) 用户自定义的类会被系统类加载器所加载,核心类库的类会被引导类加载器所加载 public class ClassLoaderTe…
垃圾回收(GC)是JVM的一大杀器,它使程序员可以更高效地专注于程序的开发设计,而不用过多地考虑对象的创建销毁等操作.但是这并不是说程序员不需要了解GC.GC只是Java编程中一项自动化工具,任何一个工具都有它适用的范围,当超出它的范围的时候,可能它将不是那么自动,而是需要人工去了解与适应地适用. 拥有一定工作年限的程序员,在工作期间肯定会经常碰到像内存溢出.内存泄露.高并发的场景.这时候在应对这些问题或场景时,如果对GC不了解,很可能会成为个人的发展瓶颈. 接下来的两文将详细学习下JVM中垃圾…
垃圾回收要解决的问题: 哪些内存需要回收? 线程私有区域不需要回收,如PC.Stack.Native Stack:Java 堆和方法区需要 什么时候回收? 以后的文章解答 如何回收? 首先进行对象存活性的分析,然后利用GC回收算法进行回收,具体算法请看下文. 如何判断对象是否可以回收? 有两种方式:引用计数算法和可达性分析算法,目前主流商业JVM普遍采用可达性分析算法 引用计数算法 引用计数算法顾名思义,为对象的引用计数,每当有一地方引用它时,计数器加1,引用失效(离开作用域时)减1,当计数器值…
 相信和小编一样的程序猿们在日常工作或面试当中经常会遇到JVM的垃圾回收问题,有没有在夜深人静的时候详细捋一捋JVM垃圾回收机制中的知识点呢?没时间捋也没关系,因为小编接下来会给你捋一捋. 一. 技术背景你要了解吧 二. 哪些内存需要回收? 2.1 引用计数算法 2.1.1 算法分析 2.1.2 优缺点 2.1.3 是不是很无趣,来段代码压压惊 2.2 可达性分析算法 2.3 Java中的引用你了解多少 2.4 对象死亡(被回收)前的最后一次挣扎 2.5 方法区如何判断是否需要回收 三.常用的垃…
收集一些实用php面试题及答案给大家 做为程序员,到IT企业面试的时候肯定会有笔试这关,那就要考考你的PHP知识了,所以本站收集一些实用的php面试题及答案给大家.  基础题:  1.表单中 get与post提交方法的区别?  答:get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息.   2.session与cookie的区别?  答:session:储存用户访问的全局唯一变量,存储在服务器上的php指定的目录中的(session_dir)的位…
前言 本文主要阐述一些Visual Studio开发下需要知道的少部分且比较实用的功能,也是很多人忽略的部分.一些不常用而且冷门的功能不在本文范围,当然本文的尾巴[.Net必知系列]纯属意淫,如有雷同,基情四射.. 目录 WEB项目版本发布时 Web.config 中 Web.Release.config 和 Web.Debug.config 的使用. 项目属性下[生成事件]使用. 快速分析未知架构和类调用结构的方式(VS2010/2012). 一:Web.Release.config 和 We…
mysql必知必会系列是本人在读<mysql必知必会>中的笔记,方便自己以后查看. MySQL. Oracle以及Microsoft SQL Server等数据库是基于客户机-服务器的数据库.客户机-服务器应用分为两个不同的部分.服务器部分是负责所有数据访问和处理的一个软件.这个软件运行在称为数据库服务器的计算机上. 在处理SQL语句时,其中所有空格都被忽略,sql语句不分大小写. 基本知识 数据库(database) : 保存有组织的数据的容器(通常是一个文件或一组文件). 表(table)…