jvm的经典回收算法

一.垃圾回收的两个方法 1.引用计数算法 对象添加计数器,被引用一次计数器自加1,当引用失效计数器减1,当计数器为0的时候, 对象就是处于可以回收的状态。(也就是不可用的状态) 这个计数算法的好处就是实现简单。坏处就是当有两个对象相互引用,GC收集就会失败。 2.根搜索算法 根搜索算法这个就是 GC ... »

虚拟机中数据的那些事儿

一.虚拟机的数据域 虚拟机的运行时数据域组成:程序计数器,虚拟机栈,本地方法栈,堆,方法区,运行时常量池(方法区的一部分) 1.线程隔离部分:虚拟机栈,本地方法栈,程序计数器 2.线程共享:方法区,堆 程序计数器:当前线程的所执行字节码的行号指示器。(各种分支,循环,跳转等都是由当前线程的程序计数器 ... »

JVM-垃圾回收

java内存区域 一些概念 http://www.importnew.com/18694.html https://www.cnblogs.com/wangyayun/p/6557851.html 1.方法区和堆是所有线程共享的内存区域;而java栈、本地方法栈和程序员计数器是运行时线程私有的内存区 ... »

Java的ThreadContext类加载器

疑惑 以前在看源码的时候,总是会遇到框架里的代码使用Thread.currentThread.getContextClassLoader()获取当前线程的Context类加载器,通过这个Context类加载器去加载类。 我们平时在程序中写代码的时候,遇到要动态加载类的时候,一般使用Class.for ... »

JVM学习记录-线程安全与锁优化(二)

前言 高效并发是程序员们写代码时一直所追求的,HotSpot虚拟机开发团队也为此付出了很多努力,为了在线程之间更高效地共享数据,以及解决竞争问题,HotSpot开发团队做出了各种锁的优化技术常见的有:自适应自旋锁(Adaptive Spinning)、锁消除(Lock Elimination)、锁粗 ... »

JVM学习记录-线程安全与锁优化(一)

前言 线程:程序流执行的最小单元。线程是比进程更轻量级的调度执行单位,线程的引入,可以把一个进程的资源分配和执行调度分开,各个线程既可以共享进程资源(内存地址、文件I/O等),又可以独立调度(线程是CPU调度的基本单位)。 Java语言定义了5中线程状态,在任意一个时间点,一个线程只能有且只有其中的 ... »

知识点:Java 内存模型完全解密

Java虚拟机(JVM) 规范中定义了一种Java的内存模型,即Java Memoory Model(简称JMM),用来实现让Java程序在各个平台下都能达到一致的内存访问效果。 JVM是整个虚拟机,JMM模型属于JVM的一部分。JDK1.5后Java内存模型才逐渐的成熟和完善起来。 主内存与工作内 ... »

JVM学习记录-Java内存模型(二)

对于volatile型变量的特殊规则 关键字volatile可以说是Java虚拟机提供的最轻量级的同步机制。 在处理多线程数据竞争问题时,不仅仅是可以使用synchronized关键字来实现,使用volatile也可以实现。 Java内存模型对volatitle专门定义了一些特殊的访问规则,当一个变 ... »

JVM学习记录-Java内存模型

前言 Java虚拟机规范中定义了一种Java的内存模型,即Java Memoory Model(简称JMM),用来实现让Java程序在各个平台下都能达到一致的内存访问效果。JVM是整个虚拟机,JMM模型属于JVM的一部分。 定义Java内存模型并不是一件容易的事情,即要足够严谨,又要足够宽松。初始的 ... »

JVM学习记录-类加载器

前言 JVM设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作房东Java虚拟机外面去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。 类与类加载器 类加载器虽然只用户实现类的加载动作,但它在Java程序中起到的作用却远远不 ... »

JVM学习记录-类加载的过程

类的整个生命周期的7个阶段是:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)、卸载(Unloading)。 类加载的全过程主要包括:加载、验证、准备、解析、初始化这5个 ... »

JVM学习记录-类加载时机

虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是类的加载机制。 在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的。类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括: 加载 ... »

JVM内存异常与常用内存参数设置总结

Java Web程序由于引入大量第三方java类库,在启动时经常会遇到内存溢出(Memory Overflow)或者内存泄漏(Memory leak)问题,导致程序启动失败。 一、OOM异常分类: OOM异常主要分为java堆溢出、虚拟机栈和本地方法栈溢出、方法区和运行时常量池溢出、本地直接内存溢出 ... »

JVM学习记录-垃圾收集器

先回顾一下上一篇介绍的JVM中常见几种垃圾收集算法: 标记-清除算法(Mark-Sweep)。 复制算法(Copying)。 标记整理算法(Mark-Compact)。 分代收集算法(Generational Collecting)。 如果说收集算法是内存回收的方法论。那么垃圾收集器就是内存回收的具 ... »

JVM学习记录-垃圾回收算法

简述 因为各个平台的虚拟机的垃圾收集器的实现各有不同,所以只介绍几个常见的垃圾收集算法。 JVM中常见的垃圾收集算法有以下四种: 标记-清除算法(Mark-Sweep)。 复制算法(Copying)。 标记整理算法(Mark-Compact)。 分代收集算法(Generational Collect ... »

JVM笔记9-Class类文件结构

1.Class类文件结构 Class 文件是一组以 8 位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在 Class 文件之中,中间没有添加任何分隔符,这使得整个 Class 文件中存储的内容几乎全部是程序运行的必要数据,没有空隙存在。 当遇到需要占用 8 位字节以上空间的数据项时, ... »

JVM笔记8-虚拟机性能监控与故障处理工具

1.JDK命令行工具 Java开发人员肯定都知道JDK的bin目录有“java.exe”,"javac.exe"这两个命令行工具,但并非所有程序员都了解过JDK的bin目录之中其他命令行程序的作用。每次JDK更新,bin目录下命令行工具的数量和功能总会不知不觉地增强。 主要包括用于监控虚拟机和故障处 ... »

G1 GC技术解析

介绍 G1 GC,全称Garbage-First Garbage Collector,通过-XX:+UseG1GC参数来启用。G1收集器是工作在堆内不同分区上的收集器,分区既可以是年轻代也可以是老年代,同一个代的分区不需要连续。并且每个代分区的数量是可以动态调整的。为老年代设置分区的目的是老年代里有 ... »

CMS垃圾收集器

介绍 CMS垃圾回收器的全称是Concurrent Mark-Sweep Collector,从名字上可以看出两点,一个是使用的是并发收集,第二个是使用的收集算法是Mark-Sweep。从而也可以推测出该收集器的特点是低延迟并且会有浮动垃圾的问题。下面详细介绍一下这个收集器的特点。 CMS收集器 C ... »