随笔分类 -  JAVA / JVM

摘要:一、对象创建流程与内存分配 1、创建对象 2、堆的内存分配方式 堆的内存分配方式有指针碰撞和空闲列表两种方式: 指针碰撞:内存是连续的,年轻代使用,使用该种分配方式的垃圾回收器:Serial和ParNew收集器 空闲列表:内存地址不连续,老年代使用,使用该种分配方式的垃圾回收器:CMS和Mark-S 阅读全文
posted @ 2022-09-28 15:58 李聪龙 阅读(197) 评论(0) 推荐(0) 编辑
摘要:一、线上问题分类及排查手段 如果发现线上服务变慢等情况,应该如何排查? 1、查询业务日志: 可以发现这类问题:请求压力大,波峰,遭遇降级,熔断等等, 基础服务、外部 API 依赖出现故障。 2、查看系统资源和监控信息: 硬件信息、操作系统平台、系统架构; 排查 CPU 负载、内存不足,磁盘使用量、硬 阅读全文
posted @ 2022-05-09 13:22 李聪龙 阅读(903) 评论(0) 推荐(0) 编辑
摘要:一、JVM线程堆栈数据分析 JVM 内部线程主要分为以下几种: VM 线程:单例的 VMThread 对象,负责执行 VM 操作; 定时任务线程:单例的 WatcherThread 对象, 模拟在 VM 中执行定时操作的计时器中断; GC 线程:垃圾收集器中,用于支持并行和并发垃圾回收的线程; 编译 阅读全文
posted @ 2022-05-09 12:22 李聪龙 阅读(715) 评论(0) 推荐(0) 编辑
摘要:一、验证GC代码 程序并不复杂,我们指定一个运行时间作为退出条件,时间一到自动退出循环。在 generateGarbage 方法中,我们用了随机数来生成各种类型的数组对象并返回。 在 main 方法中,我们用一个数组来随机存放一部分生成的对象,这样可以模拟让部分对象晋升到老年代。具体的持续运行时间和 阅读全文
posted @ 2022-05-08 13:25 李聪龙 阅读(2444) 评论(0) 推荐(0) 编辑
摘要:一、按照规范范围区分 根据规范范围区分(也就是规范的是所有虚拟机、还是指定一款虚拟机、还是指定一款虚拟机的指定版本),JVM的参数主要分为三类:标准参数、-X非标准参数、-XX参数。 以 - 开头为标准参数,所有的 JVM 都要实现这些参数,并且向后兼容,例如下面示例的-server。 -D 设置系 阅读全文
posted @ 2022-05-01 11:24 李聪龙 阅读(518) 评论(0) 推荐(0) 编辑
摘要:一、简单字节码分析 JavaByte由单个字节(byte)的指令组成,理论上最多支持256个操作码,实际上Java只使用了200左右的操作码,还有一些操作码留给调试操作。 根据指令的性质,主要分为四大类: 1、栈操作指令,包括与局部变量交互的指令;JVM就类似一个计算机,计算机的运行有基于栈的、有基 阅读全文
posted @ 2022-04-30 15:01 李聪龙 阅读(299) 评论(0) 推荐(0) 编辑
摘要:一、安装Jmeter 下载地址:http://jmeter.apache.org/download_jmeter.cgi 下载后直接进入bin目录,直接运行jmeter即可,我这里用得是mac,直接sh jmeter 1、调整语言 Options--Choose Languages--Chinese 阅读全文
posted @ 2021-10-26 11:01 李聪龙 阅读(568) 评论(0) 推荐(0) 编辑
摘要:一、内置命令行工具 JDK内置的命令行工具默认在JDK的安装目录下的bin目录或者在jre所在目录的bin目录下,内置的命令行工具也可以再细分为开发、编译、分发、安全工具和运行期工具。 开发、编译、分发、安全工具: java、javac、javap:运行、编译、反编译,最常用的三个命令 javado 阅读全文
posted @ 2021-07-14 00:57 李聪龙 阅读(298) 评论(0) 推荐(0) 编辑
摘要:一、垃圾回收 垃圾回收一般发生在堆或方法区中,也就是线程共享的部分,堆和方法区的内存分配和垃圾回收都是通过垃圾回收器去实现的。 不同的垃圾回收器对应不同的垃圾回收算法。 (一)判断算法 1、判断哪些对象需要回收 判断哪些对象需要回收主要有引用计数法和根搜索算法。 引用计数法:给对象添加一个引用计数器 阅读全文
posted @ 2021-07-09 10:53 李聪龙 阅读(213) 评论(0) 推荐(0) 编辑
摘要:一、运行时数据区概述 (一)JVM运行时数据区规范 JVM运行时数据区按照线程占用的情况可以分为两类:线程共享和线程独享。线程共享的包括方法区和堆,线程独享的包括栈、本地方法栈和程序计数器。 JVM运行时数据区各个模块的使用顺序:在JVM启动的时候,为方法区和堆分配初始内存并设置最大内存(一般建议初 阅读全文
posted @ 2021-06-30 21:57 李聪龙 阅读(361) 评论(0) 推荐(0) 编辑
摘要:一、类加载时机 类加载主要有四个时机: 1、遇到 new 、 getstatic 、 putstatic 和 invokestatic 这四条指令时,如果对应的类没有初始化,则要对对应的类先进行初始化。 2、使用 java.lang.reflect 包方法时,对类进行反射调用的时候。 3、初始化一个 阅读全文
posted @ 2021-06-25 17:50 李聪龙 阅读(180) 评论(0) 推荐(0) 编辑
摘要:一、代码示例 后面的代码举例都已如下代码示例 package org.fenixsoft.clazz; public class TestClass { private int m; public int inc() { return m + 1; } } 编译后的class文件,使用16进制文本打 阅读全文
posted @ 2021-06-24 14:26 李聪龙 阅读(85) 评论(0) 推荐(0) 编辑
摘要:一、JVM介绍 (一)JVM简述 Java代码编译生成class文件,然后在JVM上运行;但是并不是只有Java一种语言可以编译成为class文件。 1、JVM、JRE、JDK: JVM:Java虚拟机,提供了class文件的运行支持 JRE:Java运行环境,提供了java应用程序运行所必须的软件 阅读全文
posted @ 2021-05-28 22:24 李聪龙 阅读(1364) 评论(0) 推荐(0) 编辑
摘要:一、什么是JMM (一)JMM定义 JMM 规范对应的是“[JSR-133. JavaMemory Model and ThreadSpecification]”,《Java 语言规范》的 [$17.4. Memory Model章节] JMM 规范明确定义了不同的线程之间,通过哪些方式,在什么时候 阅读全文
posted @ 2020-06-10 10:10 李聪龙 阅读(255) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示