随笔分类 - JVM
jvm详细解析
摘要:GC分类与性能指标 GC分类: 按照线程数分,可以分为串行垃圾回收器和并行垃圾回收器 串行回收指的是在同一时间段内只允许有一个CPU用于执行垃圾会回收操作,此时工作线程被暂停,直至垃圾收集工作结束。 * 在诸如单CPU处理器或者较小的应用内存等硬件平台不是特别优越的场合,串行回收器的性能表现可以超过
阅读全文
摘要:System.gc()的理解 在默认情况下,通过System.gc()或者Runtime.getRuntime().gc()的调用,会显示的触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。 然而System.gc()调用附带一个免责声明,无法保证对垃圾收集器的调用。即
阅读全文
摘要:什么是垃圾 垃圾是指运行程序中没有任何指针指向的对象 标记阶段:引用计数算法 引用计数法(Reference Counting)比较简单,对每个对象保存一个整型的引用计数器属性。用于记录对象被引用的情况。 对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1;当引用失效时,引用计数器就
阅读全文
摘要:String的基本特性 String 在jdk8之前内部定义了final char[] value 用于存储字符串数据。jdk9时改为byte[]。 字符串常量池中不会存储相同内容的字符串。 String 的String Pool是一个固定大小的HashTable,默认值大小长度是1009.如果放进
阅读全文
摘要:执行引擎概述 “虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。
阅读全文
摘要:引入直接内存的缘由 JDK8将元空间从堆内存移至直接内存 不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域 直接内存是在Java堆外的、直接向系统申请的内存区间 来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存(NIO在JDK4引入,JDK
阅读全文
摘要:对象的实例化 大厂面试题: 创建对象的方式 new 的方式(构造方法) Class的newInstance():反射的方式,只能调用空参的构造器,权限必须是public Constructor的newInstance(Xxx):反射的方式,可以调用空参、带参的构造器,权限没有要求 使用clone()
阅读全文
摘要:栈、堆、方法区的交互关系 方法区(Method Area)与Java堆一样,是各个线程共享的内存区域 方法区在JVM启动的时候被创建,并且它的实际的物理内存空间中和Java堆区一样都可以是不连续的。 方法区的大小,跟堆空间一样,可以选择固定大小或者可扩展 方法区的大小决定了系统可以保存多少个类,如果
阅读全文
摘要:堆的核心概述 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。 Java堆区在JVM启动的时候即被创建,其空间大小也就确定了,是JVM管理的最大一块内存空间。 * 堆内存的大小是可以调节的 《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间,但在逻辑上它应该被视为连续的。
阅读全文
摘要:本文结构 虚拟机栈概述 虚拟机出现的背景 由于跨平台性的设计,Java的指令都是根据栈来设计的,不同平台CPU架构不同,所以不能设计为基于寄存器的。 优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。 栈的存储单位 * 每个线程都有自己的栈,栈中的数据都是以栈帧(
阅读全文
摘要:虚拟机内存结构简图 PC寄存器作用 PC寄存器用来存储指向下一条指令的地址,也即将要执行的指令代码,由执行引擎读取下一条指令。 简介 它是一块很小的内存空间,几乎可以忽略不计。也是运行速度最快的存储区域。 在JVM规范中,每个线程都有它自己的程序计数器,是线程私有的,声明周期与线程的声明周期保持一致
阅读全文
摘要:类加载系统总体架构 类加载系统经过三个阶段非别为:加载(此处的加载为狭义上的加载)、链接、初始化三步。其中链接又分为:验证、解析、准备阶段。 加载 通过一个类的全限定名获取定义此类的二进制字节流。 将这个字节流中静态的存储结构转换为方法区运行时数据结构。 在内存中生成一个代表这
阅读全文

浙公网安备 33010602011771号