JVM-垃圾回收器
摘要:1 GC分类与性能指标 分类 按线程数分:可以分为串行垃圾回收器和并行垃圾回收器。串行回收默认被应用在客户端的Client模式下的JVM中。 按工作模式分:可以分为并发式垃圾回收器和独占式垃圾回收器。 并发式垃圾回收器与应用线程交替工作,尽可能减少应用程序的暂停。独占式垃圾回收器一旦运行,就停止应用
阅读全文
JVM-垃圾回收相关概念
摘要:1 Sysyem.gc()的理解 在默认情况下,System.gc()或者Runtime.getRuntime().gc()的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。 其附带免责声明,无法保证对垃圾收集器的调用。 { byte[] buffer =
阅读全文
JVM-垃圾回收相关算法
摘要:1 垃圾标记阶段 在堆里存放几乎所有的java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。 判断对象存活一般有两种方式:引用计数算法和可达性分析算法。 2 引用计数算法 对于一个对象A,只要有任何一个对象引用了A,A的引用计数器就加1,当引用失效就减一
阅读全文
JVM-垃圾回收概述
摘要:1 什么是垃圾 垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。 2 为什么要学习GC 1)对高级语言而言,一个基本的认知就是如果不进行垃圾回收,内存迟早都会被消耗完。 2)除了释放没用的对象,垃圾回收也可以清理内存里的记录碎片。碎片整理将所用的堆内存移到堆的一端,以便jv
阅读全文
JVM-String Table
摘要:1 String的基本特性 1)字符串,使用一对”“引起来表示。 2)String 声明为final,不可被继承 3)String实现了Serializable接口:表示字符串是支持序列化的。实现了comparable接口,表示String是可以比较大小的。 4)String在JDK8及其以前使用F
阅读全文
JVM-执行引擎
摘要:1 执行引擎概述 执行引擎是java虚拟机核心的组成部分之一,虚拟机的执行引擎是由软件自行实现,不受物理条件的制约,能够执行那些不被硬件支持的指令集格式。 JVM的主要任务是负责装在字节码到其内部,执行引擎的任务是将字节码指令编译/解释为对应平台上的本地机器指令才可以。 2 java代码编译和执行过
阅读全文
JVM-直接内存
摘要:1)不是虚拟机运行时数据区的一部分,也不是《java虚拟机规范》中定义的内存区域。 2)直接内存是java堆外、直接向系统内存申请的内存空间。 3)来源于NIO,通过存在堆中的DirectByteBuffer操作native内存。 4)访问直接内存的速度会优于java堆,不需要虚拟机和内存的相互co
阅读全文
JVM-对象实例化内存布局与定位访问
摘要:1 创建对象的步骤 1)判断对象对应的类是否加载、链接和初始化。 2)为对象分配内存,如果内存规整,采用指针碰撞的方式分配内存,如果内存不规整,则使用空闲列表分配。 3)解决并发安全问题:为每个线程分配一个TLAB。 4)初始化分配到的空间。对定义的变量赋初始化值。 5)设置对象的对象头。 6)执行
阅读全文
JVM-方法区
摘要:1 栈、堆、方法区的交互关系 图1 2 方法区的具体理解 1)方法区可以看作是一块独立于java堆的内存空间。 2)方法区于java堆一样,是各个线程共享的内存区域。 3)方法区的大小,跟堆空间一样,可以选择固定大小或者可扩展长度。 4)方法区的大小决定了系统可以保存多少个类,如果系统定义了太多类,
阅读全文
JVM-堆
摘要:1 堆的概述 一个进程代表一个jvm实例,一个进程只有唯一的一个堆,堆也是java内存管理的核心区域。所有的对象实例和数组都应该在运行时分配在堆上。 java7以前,堆逻辑上分为新生区、养老区和永久区,java8以后分为新生区、养老区和原空间。我们常说的堆空间的大小指的时新生区和养老区的总和。 2
阅读全文
JVM-本地方法栈和本地方法接口
摘要:1 本地方法栈 java虚拟机栈用于管理java方法的调用,而本地方法栈用于管理本地方法的调用。其基本特性与迅即栈类似,不过本地方法时使用c原因实现的。 当某个进程调用一个本地方法时,它就进入了一个全新的并且不再受虚拟机限制的世界。它和虚拟机拥有同样的权限。 并不是所有jvm都支持本地方法,在主流的
阅读全文
JVM-虚拟机栈
摘要:1 虚拟机栈概述 背景:由于跨平台的设计,java指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器。 栈是运行时单位,而堆是存储的单位。即:栈解决程序运行的问题,即程序如何执行,或者说如何处理数据,堆解决是数据存储的问题,即数据怎么放,放在哪。 栈中可能出现的异常:java栈
阅读全文
JVM-程序计数器
摘要:作用:PC寄存器用于存储向下一条指令的的地址,也是即将要执行的指令地址。 PC寄存器介绍: 1)是一块很小的内存空间,几乎可以忽略不记,也是运行速度最快的存储区域。 2)在JVM规范中,每个线程都有自己的程序计数器,是线程私有的,生命周期与线程的生命周期一致。 3)任何一个事件一个一个线程都只有一个
阅读全文
JVM-运行时数据区概述
摘要:java虚拟机定义了若干种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机的启动而创建,随着虚拟机的退出而销毁,另外一些则是于线程一一对应,这些与程序对应的数据区域会随着线程开始和结束而创建和销毁。 每个线程:独立包括程序计数器、虚拟机栈、本地方法栈 线程共享:堆、堆外内存 关于线程共享的
阅读全文
jvm-类加载器子系统
摘要:1 类加载器与类的加载过程 类加载器子系统的作用:类加载子系统负责从文件或者网络中加载class文件,class文件在文件头有特定的文件标识。 类的加载过程: 加载: 1)通过一个类的全限定名获取定义此类的二进制字节流 2)将这个字节流所表示的静态存储结构转化为方法区的运行时数据结构 3)在内存中生
阅读全文
初识JVM
摘要:随着java7的正式发布,java虚拟机的设计者们通过JSR-292规范基本实现在java虚拟机平台上运行非java语言编写的程序。java是跨平台的语言,jvm是跨语言的平台。java虚拟机根本不关心运行在其内部的程序到底是使用何种编程语言编写的,它只关心“字节码”文件,字节码文件也可以看作jvm
阅读全文