JVM
文章平均质量分 89
JVM的学习笔记,欢迎大家指正
殷素素
程序媛咋了????
展开
-
类加载器
虚拟机设计团队把类的加载阶段中“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”两个类是否相等,只有在这连哥哥是由同一个类加载器加载的前提下才有意义,否则,即使这两个类来源于同一个Class文件,被同一个虚拟机加载,只要加载他们的类加载器不同,那这两个类就必定不相等。使...原创 2019-07-28 19:55:18 · 158 阅读 · 0 评论 -
虚拟机类加载机制
类的加载时机类从被加载到虚拟机内存中开始,到卸载出内存为止,整个生命周期包括:加载(Loading)验证(Verification)准备(Preparation)解析(Resolution)初始化(Initialization)使用(Using)卸载(Unloading)加载、验证、准备、初始化和卸载5个阶段的顺序是确定的,而解析不一定,在某些情况下可以在初始化之后开始,这是...原创 2019-07-28 19:54:45 · 155 阅读 · 0 评论 -
类文件结构
字节码是构成平台无关性的基石。Class文件格式所具备的平台中立(不依赖于特定硬件及操作系统)、紧凑、稳定和可扩展的特点,是Java技术体系实现平台无关,语言无关两项特性的重要支柱。实现语言无关性的基础:虚拟机和字节码存储格式。Java虚拟机不和包括Java在内的任何语言绑定,它只和“Class文件“这种特定的二进制文件格式锁关联,Class文件中包含了Java虚拟机指令集和符号表达以及若干...原创 2019-07-28 19:53:27 · 203 阅读 · 0 评论 -
内存分配与回收策略
Java技术体系中所提倡的自动内存管理最终可以归结为自动化地解决了两个问题给对象分配内存回收分配给对象的内存对象的内存分配,往大方向讲,就是在堆上分配(但也可能经过JIT编译后被拆散为标量类型并间接地栈上分配)对象主要分配在堆的新生代的Eden区上(如何理解),如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配。少数情况下也可能会直接分配在老年代中。分配的规则并不是百分百固定的...原创 2019-07-28 19:52:46 · 231 阅读 · 0 评论 -
垃圾收集器
Serial收集器(单线程)Serial(串行)收集器是最近本、发展历史最悠久的收集器,曾经(JDK1.3之前)是虚拟机新声代收集的唯一选择。这是一个单线程收集器。它的“单线程”的意思并不仅仅说明它只会使用一个CPU或一条收集线程去完成垃圾收集工作,更重要的是它在进行垃圾回收是,必须暂停其他所有的工作线程(Stop The World),直到它收集结束。新生代采用复制算法,老年代采用标记-...原创 2019-07-28 19:52:10 · 150 阅读 · 0 评论 -
垃圾回收算法
标记-清除算法算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。缺点效率低空间碎片多复制算法为了解决效率问题,“复制”算法出现了。他将可用的内存按容量划分为大小相等的两块。每次只使用一块。当一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已经使用过的内存空间一次清理掉。这样使得每次都对整个半区进行内存回收,内存分...原创 2019-07-28 19:49:03 · 170 阅读 · 0 评论 -
JVM--对象已死吗
概述当需要排查各种内存溢出、内存泄漏问题是,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就需要对这些自动化的技术试试必要的监控和调节程序计数器、虚拟机栈、本地方法栈随线程而生、随线程而灭;栈帧随着方法的开始入栈、方法结束出栈。这几个内存区域的内存分配和回收都具有确定性,在这几个区域内不需要过多考虑回收问题,因为方法结束或者线程结束时,内存自然就跟着回收了。而对于Java堆和方法区,...原创 2019-07-28 19:46:28 · 216 阅读 · 0 评论 -
HotSpot虚拟机对象探秘
对象的创建类加载检查虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个富豪引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行想用的类加载过程。分配内存在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存大小在类加载完后便可完全确定,为对象分配空间等同于把一块确定大小的内存从Java堆中划分出来。分配方...原创 2019-07-28 19:43:45 · 162 阅读 · 0 评论 -
JVM内存结构(运行时数据区)
1 概述对于Java程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要为每一个new操作去写配对的delete/free代码,不容易出现内存泄漏和内存溢出问题,由虚拟机处理内存这一切看起来都很美好。不过,也正是因为Java程序员把内存控制权利交给Java虚拟机,一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎样使用内存的,那么排查错误将会是一个非常艰巨的任务。2 运行时数据区域...原创 2019-07-28 19:38:46 · 263 阅读 · 0 评论 -
堆转储快照文件分析工具MAT使用
背景我们知道jmap命令可以生成对转储快照文件,那么如何分析呢?除了jdk自带的工具(不好用,看不出来东西)下面介绍eclipse的memory analyze tool(mat)的使用mat可以独立于开发工具使用,是个比较方便不错的内存分析工具。下载下载地址:https://eclipse.org/mat/downloads.php选择适合自己的版本,笔者选择的是mac osx版本。...原创 2019-07-20 15:38:51 · 1887 阅读 · 0 评论