JVM
文章平均质量分 92
慢就是【快】
三律:律行、律言、律心
展开
-
JVM:StringTable
文章目录String基本特性测试StringTableSize参数大小String的内存分配StringTable为什么要调整?String的基本操作字符串拼接操作intern()的使用new String("ab")会创建几个对象?new String("a")+new String("b")会创建几个对象?itern()在JDK6中的使用场景itern()在JDK7/8中的使用场景拓展题使用intern()测试执行效率:空间使用上小结StringTable的垃圾回收String的垃圾回收示例G1中的St原创 2020-06-23 06:09:50 · 494 阅读 · 0 评论 -
JVM知识汇总
JVM总结汇总,整理了作为一个Java工程师在面试中需要用到或者可能用到的基础性知识。一来为了加深学习印象,二来为以后面试做准备。后期会持续整理更深、更细、面试频率更高的知识点…序号整理内容内容链接1JVM与java体系结构https://blog.csdn.net/u012068483/article/details/1056596152类加载子系统https://blog.csdn.net/u012068483/article/details/106500841原创 2020-06-19 23:32:04 · 171 阅读 · 0 评论 -
JVM:垃圾回收相关概念
文章目录System.gc()的理解内存溢出与内存泄漏内存溢出(OOM)内存泄漏(Memory Leak)Stop The World垃圾回收的并行与并发并发(Concurrent)并行(Parallel)并发VS并行(两者对比)垃圾回收的并发与并行安全点与安全区域安全点(safepoint)安全区域(safe Region)强、软、弱、虚引用引用强引用(Strong Reference)——不回收软引用(Soft Reference)——内存不足即回收弱引用(Weak Reference)——发现即回收虚原创 2020-06-19 23:05:19 · 185 阅读 · 0 评论 -
JVM:垃圾回收器
文章目录GC分类与性能指标垃圾回收器分类评估GC的性能指标不同的垃圾回收器概述垃圾收集器发展史7款经典的垃圾收集器经典的垃圾收集器7款经典收集器与垃圾分代之间的关系垃圾收集器的组合关系不同的垃圾回收器概述如何查看默认的垃圾收集器Serial回收器:串行回收ParNew回收器:并行回收Parallel回收器:吞吐量优先CMS回收器:低延迟G1回收器:区域化分代式垃圾回收器总结GC日志分析GC分类与性能指标垃圾回收器分类垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现由于原创 2020-06-19 23:04:21 · 320 阅读 · 0 评论 -
JVM:垃圾回收相关算法
文章目录标记阶段:引用计数算法垃圾标记阶段:对象存活判断引用计数算法小结标记阶段:可达性分析算法可达性分析(或根搜索算法、追踪性垃圾收集)GC Roots对象的finalization机制MAT与JProfiler的GC Roots溯源MAT简介使用MAT查看GC Roots使用JProfiler进行GC Roots溯源使用JProfiler分析OOM清除阶段:标记-清除算法概述背景执行过程示意图缺点特殊说明:何为清除?清除阶段:复制算法核心思想示意图优点缺点特殊说明应用场景清除阶段:标记-压缩算法背景执行原创 2020-06-19 23:01:46 · 205 阅读 · 0 评论 -
JVM:执行引擎
文章目录执行引擎概述执行引擎的工作过程Java代码编译和执行过程Java代码编译Java代码执行什么是解释器,什么是JIT编译器?为什么说Java是半编译半解释型语言?机器码、指令、汇编语言机器码指令、指令集汇编语言高级语言C、C++源程序执行过程字节码解释器解释器工作机制(或工作任务)解释器分类现状JIT编译器Java代码的执行分类解释器与编译器的抉择?HotSpot JVM的执行方式经典案例JIT编译器概念解释热点代码及探测方式方法调用计数器回边计数器HotSpot VM中JIT分类总结扩展内容关于AO原创 2020-06-19 06:10:35 · 429 阅读 · 0 评论 -
JVM:垃圾回收概述
文章目录一、垃圾回收概述什么是垃圾(Garbage)?为什么需要GC?早期垃圾回收Java垃圾回收机制二、垃圾回收相关算法标记阶段:引用计数算法垃圾标记阶段:对象存活判断引用计数算法小结标记阶段:可达性分析算法可达性分析(或根搜索算法、追踪性垃圾收集)GC Roots对象的finalization机制MAT与JProfiler的GC Roots溯源MAT简介使用MAT查看GC Roots使用JProfiler进行GC Roots溯源使用JProfiler分析OOM清除阶段:标记-清除算法概述背景执行过程示意原创 2020-06-18 23:30:22 · 198 阅读 · 0 评论 -
JVM:对象的实例化、内存布局与访问定位
对象的实例化创建对象的方式new关键字最常见的方式变形1:Xxx的静态方法(单例模式)变形2:XxxBuilder/XxxFactory的静态方法Class的newInstance()反射的方式,只能调用空参的构造器,权限必须是publicConstructor的newInstance(Xxx)反射的方式,可以调用空参、带参的构造器,权限没有要求使用clone()不调用任何构造器,当前类需要实现Cloneable接口,实现clone()使用反序列化从文件原创 2020-06-18 06:43:24 · 225 阅读 · 0 评论 -
JVM:直接内存
直接内存概述非直接缓冲区读写文件,需要与磁盘交互,需要由用户态切换到内核态。在内核态时,需要内存如上图所示。使用IO,这里需要两份内存存储重复数据,效率低直接缓存区使用NIO时,如上图,操作系统划出的直接缓冲区可以被Java代码直接访问,只有一份,NIO适合大文件读写操作小结简单的来看,Java Process Memory= Java heap + native memory...原创 2020-06-18 06:38:33 · 216 阅读 · 0 评论 -
JVM:方法区
文章目录栈、堆、方法区的交互关系从线程共享与否的角度来看方法区的理解方法区在哪里?方法区的基本理解HotSpot中方法区的演进方法区概述设置方法区大小与OOM如何解决这些OOM?方法区的内部结构示意图方法区(Method Area)存储什么?类型信息域(Field)信息方法(Method)信息non-final的类变量全局常量:static final运行时常量池VS常量池为什么需要常量池?常量池中有什么?小结运行时常量池方法区使用举例方法区的演进细节永久代为什么要被元空间替换?StringTable为什么原创 2020-06-18 06:09:55 · 168 阅读 · 0 评论 -
JVM:堆
文章目录堆的核心概述内存细分堆空间内部结构(JDK7)堆空间内部结构(JDK8)设置堆内存大小与OOM堆空间大小的设置OutOfMemory举例年轻代与老年代图解对象分配过程概述总结Minor GC、Major GC与Full GC最简单的分代GC策略的触发条件堆空间分代思想为什么需要把Java堆分代?不分代就不能正常工作了吗?内存分配策略内存分配策略(或对象提升Promotion规则)大对象直接进入老年代验证示例为对象分配内存:TLAB为什么有TLAB(Thread Local Allocation Bu原创 2020-06-15 17:10:02 · 153 阅读 · 0 评论 -
虚拟机栈
一、虚拟机栈概述虚拟机栈出现的背景由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的优点是跨平台,指令集小,编译器容易实现缺点是性能下降,实现同样的功能需要更多的指令内存中的栈与堆栈是运行时的单位,而堆是存储的单位栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,即数据怎么放、放在哪儿Java虚拟机栈是什么?Java虚拟机栈,早期也叫Java栈。每个线程在创建时都会创建一个虚拟机栈,原创 2020-06-14 23:24:36 · 223 阅读 · 0 评论 -
本地方法接口和本地方法栈
本地方法接口什么是本地方法?**一个Native Method就是一个Java调用非Java代码的接口。**一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其他的编程语言都有这一机制,比如在C++中,可以用extern "C"告知C++编译器去调用一个C的函数定义一个Native Method时,并不提供实现体,因为其实现是由非Java语言在外面实现的本地接口的作用是融合不同的编程语言为Java所用,他的初衷是融合C/原创 2020-06-09 17:14:36 · 305 阅读 · 0 评论 -
程序计数器
PC Register介绍JVM中的程序计数寄存器(Proggram Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。作用PC寄存器用来存储指向下一条指令的地址,也即将要执行的指令代码。由执行引擎读取下一条指令它是原创 2020-06-09 17:12:03 · 353 阅读 · 0 评论 -
二、类加载器子系统
一、类加载器子系统的作用类加载器子系统负责从文件系统或网络中加载Class文件,class文件在文件开头有特定的文件标识CLassLoader只负责class文件的加载,至于是否可以运行,则由Execution Engine来决定加载的类信息存放于一块成为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分地内存映射)二、类加载器ClassLoader角色class file存在本地硬盘上,可以理原创 2020-06-02 17:24:12 · 192 阅读 · 0 评论 -
一、JVM及Java体系结构
1、跨平台的语言Java和跨语言的平台JVM(1)Java生态圈Java是目前应用最为广泛的软件开发平台之一。随着Java以及Java社区的不断状大,Java也不再是简简单单的一门语言,他更是一个平台、一种文化、一个社区。作为一个平台,Java虚拟机扮演者举足轻重的作用。Groovy、Scala、JRuby、Kotlin等都是Java平台的一部分作为一种文化,Java几乎成为了“开源”的...原创 2020-04-25 21:46:24 · 364 阅读 · 0 评论