随笔分类 - JVM
JVM调优(十七)JVM常见调优问题和工具的使用
摘要:### JVM调优(十七)JVM常见调优问题和工具的使用 #### 说辞 - 熟悉GC常见算法 - 熟悉常见的垃圾回收器,具有实际JVM调优经验 #### 1 什么是调优 - 根据需求进行JVM优化和预调优 - 优化JVM的运行环境(慢、卡顿) - 解决JVM运行过程中出现的各种问题(OOM) ##
JVM(十五)垃圾回收器概述
摘要:JVM (十五)垃圾回收器概述
1 垃圾回收器概述
2 垃圾回收器分类
3 GC的性能指标
4 垃圾回收器的发展迭代史5 垃圾回收器的组合关系
6 查看默认的垃圾回收器
JVM(十四)垃圾回收的一些额外点
摘要:### JVM(十四)垃圾回收的一些额外点 #### 1 System.gc()的理解 - 在默认情况下,通过`System.gc()`或者`Runtime.getRuntime().gc()`的调用,会显式触发`Full GC`,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存 - `S
JVM(十三)分代收集、增量收集以及分区算法
摘要:### JVM(十三)分代收集、增量收集以及分区算法 #### 1 分代收集算法 前面的所有算法中,没有一种算法能够完全替代其他算法,它们都有自己独特的优势和特点,分代收集算法应运而生: - 分代收集算法对不同生命周期的对象采取不同的收集方式,一般划分为新生代和老年代,以便提高回收效率 > 在J
JVM(十二)垃圾清除阶段算法
摘要:### JVM(十二)垃圾清除阶段算法 - 垃圾清除阶段是指,当成功区分出内存区域中的存活对象和死亡对象之后,GC接下来的任务就是**执行垃圾回收,释放掉无用对象所占用的内存空间,以便有足够的可用内存空间为新对象分配内存**。 - 目前在JVM中比较常见的三种垃圾收集算法是`标记-清除算法(Mark
JVM(十一)垃圾回收概述和垃圾标记阶段的算法
摘要:### JVM(十一)垃圾回收概述和垃圾标记阶段的算法 #### 1 Java垃圾回收概述 - **什么是垃圾?** - 垃圾是在**程序运行过程中不被任何指针指向的对象**,这个对象就是需要被回收的垃圾 - **为什么要进行垃圾回收?** - 如果不及时对内存中的垃圾进行清理,那么这些垃圾对象所占
JVM(十)StringTable
摘要:### JVM(十)StringTable #### 1 String的基本特性 - **String即字符串,通过一对引号""表示**,String创建的方式主要有 - String s = "abc"; // 字面量的方式 - String s = new String("abc"); // 类
JVM(九)执行引擎
摘要:### JVM(九)执行引擎 #### 1 执行引擎概述 - 执行引擎是Java虚拟机核心的组成部分之一 - 虚拟机是一个相对于物理机的概念,这两种机器都有代码执行能力,区别在于**物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的**,而**虚拟机的执行引擎是由软件自主实现的,因此
JVM(八)对象的实例化内存布局与访问定位
摘要:### JVM(八)对象的实例化内存布局与访问定位 #### 1 对象创建的方式 - **new** - 变形1: - **Class的`newInstance()`**,即反射 > Class的`newInstance`反射的使用较为苛刻,要求只能调用空参的构造器,而且权限必须是public >
JVM(七)方法区
摘要:### JVM(七)方法区 #### 1 方法区 - 方法区和Java堆一样,是各个**线程共享**的内存区域,**用于存储编译后的字节码中的类的机构信息,如运行时常量池、属性方法数据以及方法、构造器的字节码** - 方法区在JVM启动的时候被创建,并且它的实际物理内存空间和Java堆区一样都是可以
JVM(五)本地方法接口
摘要:JVM(五)本地方法接口和本地方法栈 1 本地方法 一个Native Method就是一个Java调用非Java代码的接口。 在定义本地方法的时候,不提供实现体 标识符native能够和除了abstract的java标识符连用 public class NativeTest{ public nati
JVM(四)虚拟机栈(三)虚拟机栈面试题
摘要:JVM(四)虚拟机栈(三)虚拟机栈面试题 1 举例栈溢出的情况? 当方法调用不停将栈帧压入虚拟机栈导致栈内空间不足而出现StackOverFlowError即是出现了栈溢出 可以通过-Xss设置栈的大小,栈的大小可以是固定的也可以是动态变化的,如果固定且超出设定值则就会出现栈溢出;如果是动态变化的,
JVM(四)虚拟机栈(一)栈帧结构:局部变量表与操作数栈
摘要:JVM(四)虚拟机栈(一)栈帧结构:局部变量表与操作数栈 1 虚拟机栈 1.1 简介 虚拟机栈出现的背景:由于跨平台性的设计,Java的指令都是根据栈来设计的,不同平台的CPU架构不同,所以不能基于寄存器。这样做的优点是跨平台,指令集更小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令
JVM(四)虚拟机栈(二)栈帧结构:动态链接、方法返回地址与附加信息
摘要:JVM(三)虚拟机栈(二)栈帧结构:动态链接、方法返回地址与附加信息 1 动态链接技术 每一个栈帧,都包含着一个指向运行时常量池中该指针所属方法的引用,即方法区中的方法地址,包含该引用的目的就是为了支持当前方法能够实现动态链接。所以动态链接又称为运行时常量池中的方法引用 在java源文件被编译为字节
JVM(三)运行时数据区概述及线程
摘要:运行时数据区概述及线程 简介 内存是硬盘和CPU的中间仓库和桥梁,承载着操作系统和应用程序的实时运行。JVM的内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的JVM对内存的划分方式和管理机制存在着部分差异。 如下图,主要流程是类加载子系统加载字节码文件
JVM(二)类加载器子系统和类加载过程
摘要:类加载器子系统和类加载过程 1 简介 类加载器子系统:负责从文件系统或者网络中加载字节码文件,字节码文件在文件开头有特定的文件标识(Coffee Baby)。ClassLoader只负责文件的加载,它是否可以运行由Execution Engine决定。 加载的类信息存放在内存中一块成为方法区的空间,
JVM(一)JVM与Java体系结构
摘要:[toc] ### JVM与Java体系结构 Java是目前应用最广泛的软件开发平台之一,是一门**跨平台的语言**,write once,runanyWhere。Java程序编译为字节码文件之后,可以被各个平台的JVM解释运行。 而JVM则是**跨语言的平台**,不仅仅支持java语言,其他提供的