JVM
勿念先生
诸事万物有迹可循。
展开
-
JVM内存模型
对于Java程序员来说,在虚拟自动内存管理机制下,不再需要为每一个new操作去写配对的delete/free代码,不容易出现内存泄漏和内存溢出问题,会有虚拟机自动管理内存。不过,也正因为这样将内存的控制权利交给了Java虚拟机,所以一旦出现内存泄漏和内存溢出方面的问题,如果不了解虚拟机是如何管理内存的,那么排查问题将会成为一项异常艰难的工作。一、运行时数据区域(一)程序计数器(Progra...原创 2018-03-18 20:06:04 · 297 阅读 · 0 评论 -
类加载机制
一、类加载的时机二、类加载的过程三、类加载器原创 2018-03-25 19:28:18 · 270 阅读 · 0 评论 -
内存分配和回收策略
Java技术体系中所提倡的自动内存管理最终可以归结为两个问题:给对象分配内存和回收分配给对象的内存。对象的内存分配,大方向就是在堆上的分配(但也可能经过JIT编译后被拆散为标量类型并间接的栈上分配),对象主要分配在新生代上的Eden区,如果启动了本地分配缓冲,将按照线程优先在TLAB上分配。少数情况下也可能会直接分配在老年代中,细节取决于当前使用哪一种垃圾收集器组合和虚拟机中与内存相关的参...原创 2018-03-25 19:25:15 · 248 阅读 · 0 评论 -
垃圾收集器
如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。这里讨论的收集器基于JDK1.7Update14之后的HotSpot虚拟机,这个虚拟机包含的所有收集器如图所示: 如果收集器直接存在连线就说明可以搭配使用,重点分析CMS和G1这两款相对复杂的收集器。一、垃圾收集器类型(一)Serial收集器 Serial收集器是最基本、发展历史最悠久的收集器,它是一个单线...原创 2018-03-25 18:07:59 · 220 阅读 · 0 评论 -
垃圾收集算法
一、标记-清除算法 该算法分为标记和清除两个阶段:首先标记出所有需要回收的对象,然后在标记完成后统一回收所有被标记的对象。该算法有两个不足之处:一个是效率问题,标记和清除两个过程的效率不高,另一个是空间问题,标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配较大对象时候,无法找到足够的连续内存而不得不提现触发一次垃圾收集动作。二、复制算法 为了解...原创 2018-03-25 17:47:31 · 175 阅读 · 0 评论 -
如何判别对象已死?
GC的历史比Java还有久远,我们在思考GC时候需要思考三个问题:哪些内存需要回收?什么时候回收?如何回收? 在Java中程序计数器、虚拟机栈、本地方法栈这三个区域随线程而生,随线程而灭:栈中的栈帧随着方法的调用和退出而有条不紊的进行着入栈和出栈的过程。每个栈帧分配多少内存在类结构确定下来时就已知的,方法结束或者线程结束内存自然跟着回收了。 而Java堆和方法区不一样,一个接口...原创 2018-03-25 17:44:08 · 744 阅读 · 0 评论 -
JVM内存运行时区域中的OutOfMemoryError
在Java虚拟机规范中,除了程序计数器外,虚拟机内存的其他几个运行时数据区域都有可能发生OutOfMemoryError异常的可能。一、Java堆溢出 Java堆用于存储对象实例,只要不断地创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么对象数量到达最大的容量限制后就会产生内存溢出异常。public class HeapOMM { s...原创 2018-03-19 23:17:15 · 413 阅读 · 0 评论 -
Java中New一个对象是个怎么样的过程?
在语言层面创建对象(例如克隆、反序列化)通常仅仅是一个new关键字而已,而在虚拟机中,对象(普通Java对象,不包括数组和Class对象等)的创建时一个怎么样的过程?一、对象的创建 当虚拟机遇到一条new指令时候,首先去检查这个指令的参数是否能在常量池中能否定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。 ...原创 2018-03-19 23:09:50 · 23674 阅读 · 2 评论 -
JVM知识概要
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Jav...原创 2018-03-13 17:05:26 · 272 阅读 · 0 评论 -
类加载案例分析
一、Tomca:正统的类加载器架构二、OSGi:灵活的类加载器架构原创 2018-03-25 19:33:29 · 262 阅读 · 0 评论