自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 收藏
  • 关注

原创 11JVM中常用垃圾回收器分析与实践

JVM系统为了对内存中的垃圾进行回收,基于GC算法,开发了一些垃圾回收器,例如:其中:Serial GC是最古老也是最基本的收集器,但是现在依然广泛使用,JAVA SE5和JAVA SE6中客户端虚拟机采用的默认配置。1. Serial GC(串行收集器)应用特点:2. Serial GC(串行收集器)场景应用:3. Serial GC(串行收集器)算法应用新生代使用 mark-copy(标记-复制) 算法(新生代存活对象较少)。老年代使用 mark-sweep-compact(标记-清除-整理)算法(老

2023-03-22 13:45:54 306

原创 10GC简介

Young区存储的就是那些生命周期短,使用一两次就不再使用的对象,回收一次基本上该区域十之有八的对象全部被回收清理掉,因此Young区采用的垃圾回收算法也就是“标记-复制”算法。Old区存储的是那些生命周期长,经过多次回收后仍然存活的对象,就把它们放到Old区中,Old区一般不去判断这些对象的可达性,直到Old区不够用为止,再进行一次统一的回收,释放出足够的连续的内存空间。比方说,java中的垃圾回收会对内存中的对象进行遍历,对存活的对象进行标记,其未标记对象可认为是垃圾对象,然后基于特定算法进行回收。

2023-03-17 13:13:49 242

原创 09JVM内存泄漏分析与实践

动态分配的内存空间,在使用完毕后未得到释放,结果导致一直占据该内存单元,直到程序结束。这个现象称之为内存泄漏。因此良好的代码规范,可以有效地避免这些错误。

2023-03-17 13:13:14 418

原创 08JVM中的内存溢出

内存中剩余的内存不足以分配给新的内存请求就会内存溢出。内存溢出可能直接导致系统崩溃。

2023-03-17 13:11:43 177

原创 07JVM内存逃逸分析与实践

随着JIT编译期的发展与逃逸分析技术逐渐成熟,栈上分配、标量替换优化技术将会导致一些微妙的变化,所有的对象都分配到堆上也渐渐变得不那么“绝对”了。在Java虚拟机中,对象是在Java堆中分配内存的,这是一个普遍的常识。但是,有一种特殊情况,那就是如果经过逃逸分析(Escape Analysis)后发现,一个对象并没有逃逸出方法的话,那么就可能被优化成栈上分配。这样就无需在堆上分配内存,也无须进行垃圾回收了。这也是最常见的堆外存储技术。

2023-03-17 13:11:05 167

原创 06JVM运行时内存分析

Java 虚拟机栈(Java Virtual Machine Stacks)描述的是 Java 方法执行时的内存模型,解决的是程序运行时数据的操作问题,即程序如何执行,或者说如何处理数据。而堆解决的是数据存储的问题,即数据怎么放,放哪里。Java堆(Java Heap)是JVM 中内存最大的一块,被所有线程共享,在虚拟机启动 时创建,主要用于存放对象实例,大部分对象实例也都是在这里分配。

2023-03-17 13:10:25 171

原创 03字节码解读分析与实践

Java的源代码中编译后会生成一个class文件,文件内容为一些JAVA虚拟机指令,这些指令的内容,由多个十六进制值组成,两个十六进制值为一组,例如:Java虚拟机的指令由一个字节长度、代表某种特定操作含义的操作码(opcode)以及跟随其后的零个或多个的操作数(operand)构成。Java之所以可以“一次编译,到处运行”,一是因为JVM针对各种操作系统、平台都进行了定制。二是因为无论在什么平台,都可以编译生成固定格式的字节码(.class文件)供JVM使用。

2023-03-17 12:57:20 220

原创 05JVM常用工具应用

它可以显示本地或者远程(需要远程主机提供 RMI 支持)虚拟机进程中的类信息、内存、垃圾收集、JIT 编译等运行数据,在没有 GUI,只提供了纯文本控制台环境的服务器上,它将是运行期间定位虚拟机性能问题的首选工具。的作用并不仅仅是为了获取 dump 文件,它还可以查询 finalizer 执行队列、Java 堆和永久代的详细信息,如空间使用率、当前使用的是哪种收集器等。生成线程快照的目的主要是定位线程长时间出现停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等都是导致线程长时间停顿的原因。

2023-03-17 12:56:51 1463

原创 04字节码增强技术分析与实践

字节码增强技术相当于是一把打开运行时JVM的钥匙,利用它可以对现有字节码进行修改或者动态生成新的字节码,进而对运行中的程序做修改,实现热部署。也可以跟踪JVM运行中程序的状态,进行性能诊断等。此外,我们平时使用的动态代理、AOP也与字节码增强密切相关,它们实质上还是利用各种手段生成符合规范的字节码文件。综上所述,掌握字节码增强后可以高效地定位并快速修复一些棘手的问题(如线上性能问题、方法出现不可控的出入参需要紧急加日志等问题),也可以在开发中减少冗余代码,大大提高开发效率。

2023-03-17 12:56:06 506

原创 02类加载子系统分析与实践

类加载子系统是负责将类从磁盘或网络读到JVM内存,然后交给执行引擎执行,如图所示。说明:学习类加载有助于我们更深入地理解JAVA类成员的初始化过程,运行过程。并可以为后续的线上问题的解决及调优提供一种基础保障。我们可以通过继承java.lang.ClassLoader抽象类的方式,实现自己的类加载器,以满足一些特殊的需求。建议把自定义的类加载逻辑写在findclass()方法中。/*** ClassLoader没有抽象方法为什么还要将此类定义为抽象类?* 外界不允许直接构建此类对象。

2023-03-17 12:49:53 126

原创 01JVM简介

你用的什么JVM(JAVA虚拟机)?(HotSpot)你了解市面上有哪些JVM?JDK,JRE,JVM之间是什么关系?你觉得下一代JVM的发展方向应该是怎样的?(支持更多编程语言)JVM规范JVM由哪及部分构成?(类加载子系统,运行时数据区、执行引擎、本地方法接口)为什么我们要学习JVM?

2023-03-17 12:43:22 397 3

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除