JVM
文章平均质量分 55
JVM
小仙。
这个作者很懒,什么都没留下…
展开
-
JVM——》jmap详解
jmap -heap 是一个Java 命令行工具,用于获取Java 进程的堆内存信息。它会输出 Java 进程的整体堆内存使用情况,包括 heap 总大小、已使用大小、空闲大小等。同时还会输出堆内存中各种对象所占用的空间大小以及数量,如类、字符数组、字符串等。jmap -heap 命令通常用于诊断和调试 Java 应用程序的内存问题,例如内存泄漏、内存溢出等。通过 jmap -heap 命令获取到的堆内存信息可以帮助开发人员更加全面地了解 Java 应用程序的内存使用情况,找出内存问题的根本原因。原创 2023-06-14 14:34:38 · 17460 阅读 · 0 评论 -
JVM——》Java对象内存模型
JVM——》Java对象内存模型原创 2023-04-13 09:08:55 · 441 阅读 · 0 评论 -
JAVA——》模拟虚拟机栈溢出
JAVA——》模拟虚拟机栈溢出原创 2022-09-07 18:25:49 · 2303 阅读 · 0 评论 -
JVM——》javac编译过程
javac编译过程原创 2022-09-02 17:17:56 · 214 阅读 · 0 评论 -
Java——》自定义加载器ClassLoader
推荐链接: 总结——》【Java】 总结——》【JVM】 总结——》【Mysql】 总结——》【Spring】 总结——》【SpringBoot】Java——》自定义加载器ClassLoader一、怎么实现自定义?二、示例1、Hello.java2、自定义加载器3、.原创 2022-05-31 17:50:37 · 328 阅读 · 0 评论 -
JVM——》类文件
JVM——》类文件原创 2022-05-31 17:20:05 · 113 阅读 · 0 评论 -
总结——》【JVM】
JVM原创 2022-05-31 16:41:17 · 115 阅读 · 0 评论 -
JVM——》javac类编译过程
javac类编译过程原创 2022-05-31 16:42:15 · 151 阅读 · 0 评论 -
Java——》jstack分析死锁案例
1、代码//运行主类public class DeadLockDemo { public static void main(String[] args) { DeadLock d1 = new DeadLock(true); DeadLock d2 = new DeadLock(false); Thread t1 = new Thread(d1); Thread t2 = new Thread(d2); t1.sta原创 2022-04-27 23:56:23 · 807 阅读 · 0 评论 -
JVM——》垃圾收集器分类
参考链接: JVM——》垃圾收集器(1)串行 -XX:+UseSerialGC -XX:+UseSerialOldGC (2)并行(吞吐量优先): -XX:+UseParallelGC -XX:+UseParallelOldGC (3)并发收集器(响应时间优先) -XX:+UseConcMarkSweepGC -XX:+UseG1GC1、串行收集器Serial、Serial Old特点:只能有一个垃圾回收.原创 2022-04-27 23:17:26 · 214 阅读 · 0 评论 -
JVM——》垃圾收集器
收集算法是内存回收的方法论,垃圾收集器是内存回收的具体实现。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yAW2lQdG-1651071500090)(https://cdn.nlark.com/yuque/0/2022/png/12860409/1646619277921-29570ecb-e00d-4ae1-b1b3-be6291dcc024.png#clientId=u212c6796-1129-4&crop=0&crop=0&crop.原创 2022-04-27 23:05:41 · 205 阅读 · 0 评论 -
JVM——》性能优化
JVM的性能优化可以分为: 1、代码层面结合字节码指令进行优化,比如一个循环语句,可以将循环不相关的代码提取到循环体之外,这样在字节码层面就不需要重复执行这些代码了。 2、非代码层面一般情况可以从内存、gc以及cpu占用率等方面进行优化。一、内存1、内存分配正常情况下不需要设置,那如果是促销或者秒杀的场景呢?每台机器配置2c4G,以每秒3000笔订单为例,整个过程持续60秒2、内存溢出一般有2个原因:1)大并发2)内存泄露导致内存溢出(1)大并发浏览器缓存、本地.原创 2022-04-24 22:38:36 · 539 阅读 · 0 评论 -
JVM——》内存泄露案例
本案例,是由ThreadLocal引起的内存泄露,最终导致内存溢出模拟堆内存溢出: -Xms1000M -Xmx1000M 堆内存溢出时自动导出堆文件: -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=jvm.hprof一、代码1、TestApplication.javaimport org.springframework.boot.SpringApplication;import org.springframework.boot..原创 2022-04-24 21:41:12 · 607 阅读 · 0 评论 -
JVM——》常用命令
一、jps(查看java进程)The jps command lists the instrumented Java HotSpot VMs on the target system. The command is limited to reporting information on JVMs for which it has the access permissions.jps命令列出目标系统上已检测的Java热点虚拟机。该命令仅限于报告其具有访问权限的JVM上的信息。语法: jps原创 2022-04-22 09:31:09 · 750 阅读 · 0 评论 -
JVM——》常用参数
一、参数查询JVM参数.txt执行: java -XX:+PrintFlagsFinal注意: = 表示默认值 := 表示被JVM或者用户修改后的值二、参数分类1、标准参数 -version -help -server -cp2、-X参数(非标准,JDK各个版本中可能会变动)-Xint 解释执行 -Xcomp 第一次使用就编译成本地代码 -Xmixed 混合模式,JVM自己来决定3、-XX参数(非标准,相对不稳定,主要用于JVM调优)1)Boole原创 2022-04-21 08:35:59 · 191 阅读 · 0 评论 -
JVM——》常用参数
一、参数查询执行: java -XX:+PrintFlagsFinal注意: = 表示默认值 := 表示被JVM或者用户修改后的值二、参数分类1、标准参数-version -help -server -cp2、-X参数(非标准,JDK各个版本中可能会变动)-Xint 解释执行 -Xcomp 第一次使用就编译成本地代码 -Xmixed 混合模式,JVM自己来决定3、-XX参数(非标准,相对不稳定,主要用于JVM调优)1)Boolean类型格式: -XX原创 2022-04-20 17:10:57 · 181 阅读 · 0 评论 -
JVM——》G1垃圾收集器
一、概念官网链接发展过程:1.7出现1.8推荐使用1.9默认使用1、特点1、分代收集(仍然保留分代的概念)2、空间整合(整体上属于“标记-整理”算法,不会导致空间碎片)3、可预测的停顿(比CMS更先进的地方在于能让使用者明确指定一个长度为M毫秒的时间片段内,消耗在垃圾收集上的时间不得超过N毫秒)4、所谓Garbage-Frist,其实就是优先回收垃圾最多的Region区域2、Region将整个Java堆划分为多个 大小相等的独立区域(Region)个数:2048个大小:固定原创 2022-04-20 14:53:10 · 1244 阅读 · 1 评论 -
JVM——》CMS
CMS官网一、概念CMS:Concurrent Mark SweepCMS收集器是一种以获取 最短回收停顿时间 为目标的收集器。二、算法标记-清除三、过程(步骤)由于整个过程中,并发标记和并发清除,收集器线程可以与用户线程一起工作,所以总体上来说,CMS收集器的内存回收过程是与用户线程一起并发地执行的。1、初始标记 CMS initial mark 【STW】标记GC Roots直接关联对象,不用Tracing,速度很快 , 是STW的2、并发标记 CMS concurrent.原创 2022-04-19 22:26:47 · 622 阅读 · 0 评论 -
JVM——》吞吐量
公式吞吐量 = 运行代码时间 / (运行代码时间 + 垃圾收集时间)示例虚拟机总共运行了100分钟1)运行代码:99分钟2)垃圾收集:1分钟吞吐量 = 99/100 = 99%参数-XX:GCRatio 设置吞吐量的大小-XX:MaxGCPauseMillis 控制最大的垃圾收集停顿时间分析互联网交互式项目:需要在停顿时间范围内(100~200ms),保证最大吞吐量(96%~)传统项目:需要在保证最大吞吐量范围内,降低停顿时间吞吐量越大,代表着垃圾收集时间越短,那么用户代码可以充分原创 2022-04-19 17:16:00 · 1611 阅读 · 0 评论 -
JVM——》垃圾收集算法
标记-清除标记清除标记-复制标记复制标记-压缩标记压缩原创 2022-03-05 11:56:27 · 177 阅读 · 0 评论 -
什么时候会垃圾回收
GC是由JVM自动完成的,根据JVM系统环境而定,所以时机是不确定的。我们也可以手动进行,比如调用System.gc()通知JVM进行一次垃圾回收,但是具体什么时候运行也无法控制。但是不建议手动调用该方法,因为GC消耗的资源比较大。1、Eden区/Survivor区不够用了2、老年代不够用了3、方法区不够用了4、System.gc()...原创 2022-03-05 10:58:04 · 154 阅读 · 0 评论 -
JVM——》如何确定一个对象是垃圾
Java是自动做内存管理和垃圾回收的。自动垃圾回收机制就是寻找Java堆中的对象,并对对象进行分类判别,寻找出正在使用的对象和已经不用的对象,然后把那些不会使用的对象从堆上清除。一、引用计数法1、概念对于某个对象而言,只要应用程序中持有该对象的引用,就说明该对象不是垃圾如果一个对象没有任何指针对其引用,它就是垃圾。2、优点效率高3、缺点不能解决循环引用的现象(循环引用会导致内存泄漏,内存泄漏的堆积会导致内存溢出)二、根可达算法 / 根搜索算法1、概念GC ROOT:本质是一组活.原创 2022-03-05 10:29:00 · 511 阅读 · 0 评论 -
Java——》虚拟机栈溢出
Java——》虚拟机栈溢出原创 2022-03-05 09:46:14 · 955 阅读 · 0 评论 -
JAVA——》模拟堆内存溢出
JAVA——》堆内存溢出原创 2022-03-04 17:59:54 · 192 阅读 · 0 评论 -
JVM——》内存模型
如何理解Minor/Major/FullGCMinorGC:新生代MajorGC:老年代FullGC:新生代 + 老年代为什么需要Survivor区?只有Eden区不行吗?如果没有Survivor区,Eden区每进行一次MinorGC,存活的对象就会被送到老年代。这样一来,老年代很快被填满,就会触发MajorGC(一般伴随着Minor GC,也可以看做触发了Full GC)。老年代的内存空间远大于新生代,进行一次FullGC消耗的时间比Minor GC长得多。执行时间长有什么坏处.原创 2022-03-04 16:53:06 · 121 阅读 · 0 评论 -
JVM——》Java对象创建过程
我是一个普通的Java对象,我出生在Eden区,在Eden区我还看到和我长得很像的小兄弟,我们在Eden区中玩了挺长时间。有一天,Eden区中的人实在太多了,我就被迫去了Survivor区的“From”区。自从去了Survivor区,我就开始漂了,有时候在Survivor区的“From”区,有时候在Survivor区的“To”区,居无定所。直到我18岁的时候,爸爸说我成人了,该去社会上闯闯了。于是我去了年老化,年老代里的人很多,并且年龄都挺大的。...原创 2022-03-04 12:30:56 · 222 阅读 · 0 评论 -
JVM——》Java对象内存模型
Java对象内存模型原创 2022-03-04 12:19:33 · 337 阅读 · 0 评论 -
堆指向方法区
方法区中包含类的信息,堆中会有对象,那怎么知道对象是哪个类创建的呢?怎么记录的?这就需要了解一下Java对象的具体信息。原创 2022-03-04 12:01:04 · 118 阅读 · 0 评论 -
方法区指向堆详解
方法区指向堆示例private static Object obj = new Object();方法区指向堆示图原创 2022-03-04 10:12:27 · 132 阅读 · 0 评论 -
栈指向堆详解
栈指向堆示例栈帧中有一个变量obj,类型为引用类型,这就是典型的栈中元素指向堆中的对象。 Object obj = new Object();栈指向堆示图原创 2022-03-04 10:06:39 · 318 阅读 · 0 评论 -
Java——》运行时数据区Run-Time Data Areas
○ 所有线程共享:Method Area、Heap○ 每个线程单独:VMS、NMS、PC原创 2022-03-03 18:19:19 · 101 阅读 · 0 评论 -
Java——》栈帧Frame详解
结合字节码指令理解栈帧Compiled from "Person.java"class Person{... public static int calc(int,int); Code: 0:iconst_3 //将int类型常量3压入[操作数栈] 1:istore_0 //将int类型值存入[局部变量0] 2:iload_0 //从[局部变量0]中装载int类型值入栈 3:iload_1 //从[局部变量1]中装载int类型值入栈 4:ia..原创 2022-03-03 14:50:51 · 487 阅读 · 0 评论 -
Java——》类加载器ClassLoader
【代码示例】类加载器String.class文件被load到内存之后,内存里创建了2块内容:1、二进制代码,存在metaspace2、生成了class类的一个对象 ,这个对象指向了第一块内容public class T002_ClassLoaderLevel { public static void main(String[] args) { // null 底层是C++实现的,java没有类和它对应,所以返回null System.out.println..原创 2022-03-01 23:24:23 · 177 阅读 · 0 评论 -
Java——》类加载机制(过程)
参考链接:class类加载机制(过程)原创 2022-03-01 22:32:29 · 254 阅读 · 0 评论 -
Java——》JVM、JRE、JDK
Java——》JVM、JRE、JDK原创 2022-03-01 21:37:11 · 142 阅读 · 0 评论 -
class执行相关
参考链接:class执行相关class执行相关原创 2022-02-28 16:34:10 · 125 阅读 · 0 评论 -
class加载相关
参考链接:class加载相关class加载相关class生命周期类加载过程:4个层次原创 2022-02-28 16:26:45 · 124 阅读 · 0 评论 -
JVM基础相关
参考:JVM基础相关原创 2022-02-28 15:15:28 · 210 阅读 · 0 评论