幻风_huanfeng
没有梦想和神经网络有什么区别?
展开
-
Java高级互联网架构师之路:排查当前JVM错误的步骤
这个程序是有问题的,我们通过一些命令来分析这个程序究竟是哪里出了问题。首先把当前的程序通过SSH工具传输到centos系统中,之后我们就可以在linux环境下编译和执行。原创 2024-03-16 22:35:48 · 322 阅读 · 0 评论 -
JVM虚拟机:各种JVM报错总结
出现这个问题的原因就是,我们的应用进程中创建了太多的线程了,使得超过了系统的极限。这个和堆的内存溢出的区别是,堆内存对象数据超过了堆的极限,那么就是堆的内存溢出,而这个是堆内存一直没有达到极限,但是一直占有将近98%的空间,因为每次回收的只能回收到2%。出现这个问题的原因是:如果不断分配本地内存,而堆内存很好用,那么JVM就不需要执行GC,那么这种情况下,DirectByteBuffer对象们就不会被回收,这样堆内存足够,但是本地内存已经满了,此时再次尝试分配本地内存就会出现错误了。原创 2024-01-02 23:39:48 · 1422 阅读 · 0 评论 -
JVM虚拟机:各种类型的垃圾回收器参数总结
Parallel常用参数。原创 2023-12-15 23:08:46 · 507 阅读 · 0 评论 -
JVM虚拟机:GC垃圾回收器的常用参数总结
Xms:堆空间最小为多少-Xmx:堆空间最大为多少-Xss:栈空间大小-Xmn:年轻代的空间大小-XX:MetaspaceSize:元空间大小-XX:+PrintGCDetails:打印GC的细节-XX:+PrintHeapAtGC:打印堆的情况-XX:SurvivorRatio:新生代中Eden和s0、s1之间的比例-XX:NewRatio:新生代和来年代的比例-XX:+UseTLAB :使用TLAB,默认打开-XX:+PrintTLAB :打印TLAB的使用情况。原创 2023-12-14 23:45:15 · 883 阅读 · 0 评论 -
JVM虚拟机:JVM参数之xx参数的配置
前面我们学习了标配参数和x参数,其实这两种参数都是比较基础的,而本文我们将学习重头戏,xx参数。原创 2023-12-11 23:40:18 · 351 阅读 · 0 评论 -
JVM虚拟机:命令行查看JVM垃圾回收器的执行信息
这个命令可以查看一些配置信息,其中最重要的配置信息就是,当前使用的G1回收器。原创 2023-12-10 22:27:16 · 489 阅读 · 0 评论 -
JVM虚拟机:执行Java程序并指定JVM参数
在前面我们设置参数值的时候,需要在eclipse中的VM中进行参数设置,查询的时候需要先jps,然后jinfo。这里尝试动态的设置和查询,也就是说在运行程序的时候就对其进行设置,并且进行查询。其中Shi是一个具体的java类,这个命令的解释是,查询所有的修改之后的参数,设置MetaspaceSize的大小为512m,并且运行shi类。这里只截取了一部分,我们可以看到metaspaceSize的大小就是修改之后的了。为了确定参数修改了,这里我们先使用下面的命令来查询初始化的参数。原创 2023-12-08 21:25:39 · 487 阅读 · 0 评论 -
JVM虚拟机:如何查看JVM初始和最终的参数?
在前面的课程中,我们学习了如何查看当前程序所处于的xx参数,本文再介绍一种如何参看JVM的xx参数?原创 2023-12-07 23:57:53 · 667 阅读 · 0 评论 -
JVM虚拟机:如何查看JVM的XX参数?
这种查询方式可以总结为当一个程序运行的时候,使用jps命令获取到它的端口号,然后通过jinfo查看当前程序的参数配置。原创 2023-12-06 23:42:01 · 751 阅读 · 0 评论 -
JVM虚拟机:JVM参数之X参数
本文将学习x参数。原创 2023-12-05 23:28:31 · 474 阅读 · 0 评论 -
JVM虚拟机:JVM参数之标配参数
本文我们将学习JVM中的标配参数。原创 2023-12-02 20:37:05 · 393 阅读 · 0 评论 -
JVM虚拟机:JVM调优第一步,了解JVM常用命令行参数
本文重点从本文课程开始,我们将用几篇文章来介绍JVM中常用的命令行的参数,这个非常重要,第一我们可以通过参数了解JVM的配置,第二我们可以通过参数完成对JVM的调参。以及后面的JVM的调优也需要用到这些参数,所以我们将对这些参数进行认真的讲解。原创 2023-11-25 22:07:23 · 692 阅读 · 0 评论 -
JVM虚拟机:G1垃圾回收器的日志分析
本文我们将学习G1垃圾回收器的日志。原创 2023-11-25 22:01:58 · 779 阅读 · 0 评论 -
JVM虚拟机:CMS垃圾回收器的日志分析
本文我们将学习CMS垃圾回收器的日志。原创 2023-11-18 20:51:25 · 336 阅读 · 0 评论 -
JVM虚拟机:通过日志学习PS+PO垃圾回收器
PSYoungGen表示GC类型,2048K表示YoungGC前新生代内存占用,488K表示GC后新生代内存占用,2560K表示新生代的总大小。然后后面的2048K表示GC前堆内存占用,773K表示表示GC后堆内存的占用,9728K表示堆的总大小,0.0015243表示YoungGC耗时。日志是有规则的,我们需要按照这个规则来理解日志中的内容,它有两个格式,一个格式是GC的格式(新生代),另外一个格式是FUll GC(老年代)。GC前堆内存为3767K,GC后堆内存为3724,总的为9216K。原创 2023-11-18 20:48:22 · 925 阅读 · 0 评论 -
JVM虚拟机:JVM中垃圾回收器的总结
在Java虚拟机(JVM)中,垃圾回收器(Garbage Collector)扮演着一个重要的角色,负责自动回收不再使用的内存资源。垃圾回收器的设计和实现是Java语言的一大特点,它极大地简化了开发人员的内存管理工作。本文将对JVM中的垃圾回收器进行总结,包括垃圾回收的原理、常见的垃圾回收算法以及各种垃圾回收器的特点和适用场景。原创 2023-11-16 23:35:21 · 738 阅读 · 0 评论 -
JVM虚拟机:垃圾回收器ZGC和Shenandoah算法
1ms内完成垃圾回收,ColoredPointers(颜色指针) + LoadBarrierGC信息记录在指针上,不是记录在头部,可以更改GC信息的时候,就不需要频繁地修改头部信息了。指针总共有64位,其中42位是地址指针,4位是颜色指针(只能有1个为1,其它的全是0,四种状态Marked0、Marked1、Remapped、Finalizable),剩余18位没有使用。原创 2023-11-16 23:28:51 · 259 阅读 · 0 评论 -
JVM虚拟机:垃圾回收之三色标记
本文重点在前面的课程中我们已经学习了垃圾回收器CMS和G1,其中CMS和G1中的mixedGC都存在四个过程,这四个过程中有一个过程叫做并发标记,也就是说程序一边运行,一边标记垃圾。这个过程最困难的是:如果在标记垃圾的时候,如果对象的引用关系发生了改变,此时应该如何处理?原创 2023-11-14 23:44:35 · 117 阅读 · 0 评论 -
JVM虚拟机:垃圾回收器之G1
在前面的课程中我们介绍了六个垃圾回收器,分别是新生代的三个以及老年代的三个,本文我们将介绍一个垃圾回收器,它既可以用于新生代又可以用于老年代,这个垃圾回收器就是G1。原创 2023-11-14 23:42:33 · 372 阅读 · 0 评论 -
JVM虚拟机:垃圾回收器之CMS(老年代)
在前面的课程中我们学习了Serial和PO垃圾回收器,本文将学习一种新的在老年代使用的垃圾回收器CMS。原创 2023-11-11 22:07:25 · 885 阅读 · 0 评论 -
JVM虚拟机:垃圾回收器之Parallel Old(老年代)
本文将学习老年代的另外一种垃圾回收器Parallel Old(PO),这是一种用于老年代的并行化垃圾回收器,它使用标记整理算法进行垃圾回收。原创 2023-11-11 22:04:24 · 590 阅读 · 0 评论 -
JVM虚拟机:垃圾回收器之Serial Old(老年代)
Serial Old是Serial垃圾回收器的老年代版本,它同样是单线程的收集器,使用标记-整理算法,这个收集器也主要运行在Client,目前它主要是作为老年代的CMS收集器的后备垃圾收集方案,也就是说当CMS垃圾回收器在老年代出现大量碎片的时候,此时会让Serial Old垃圾回收器在老年代工作进行串行化的垃圾回收(如果此时JVM的老年代非常的大,那么此时的速度会非常的慢)。原创 2023-11-08 11:13:07 · 295 阅读 · 0 评论 -
JVM虚拟机:垃圾回收器之ParNew(年轻代)
在前面的课程中,我们学习了新生代的垃圾回收器PS,本文我们将学习新生代的另一个垃圾回收器ParNew。原创 2023-11-08 11:11:48 · 146 阅读 · 0 评论 -
JVM虚拟机:垃圾回收器之Parallel Scavenge
在前面的课程中,我们学习了新生代的串行化垃圾回收器Serial,本文我们将学习新生代的另外一个垃圾回收器Parallel Scavenge(PS),PS是一个并行化的垃圾回收器,它使用复制算法来清理新生代的垃圾。原创 2023-11-06 22:49:47 · 344 阅读 · 0 评论 -
JVM虚拟机:垃圾回收器之Serial(年轻代)
本文将介绍年轻代的Serial回收器,它最主要的特征就是串行化的回收器。原创 2023-11-06 22:47:39 · 153 阅读 · 0 评论 -
JVM虚拟机:如何查看自己的JVM默认的垃圾回收器
这里有一个很有意思的现象,1.8是PS+PO,1.9是G1,没有默认使用CMS的,这是因为CMS存在一些问题,所以不是很常用,但是并不能说CMS没有意义,它实现的并发标记的方式,是G1的灵感所在,后面我们会进行详细的介绍。只需要在程序运行的时候指定下面的参数就可以看到当前自己的JVM默认的垃圾回收器是什么?如果你的jdk的版本是1.8,那么此时默认的垃圾回收器为:PS + ParallelOld。如上所示,默认使用的是G1回收器,这是我的电脑,因为我的电脑安装jdk的版本是1.9。原创 2023-11-04 21:48:17 · 734 阅读 · 0 评论 -
JVM虚拟机:垃圾回收器组合参数设定
前面的课程中我们介绍了目前JVM中主流的垃圾回收器,不同的回收器会有不同的组合,其中1.8版本的jdk中,默认使用的是Parallel Scavenge+Parallel Old,也就是说新生代使用Parallel Scavenge,然后老年代使用Parallel Old,这是默认的,当然我们也可以通过参数的方式进行指定,本文就介绍一下常见垃圾回收器组合参数设定。原创 2023-11-04 21:46:18 · 186 阅读 · 0 评论 -
Java高级互联网架构师之路:垃圾回收器的介绍
从本文开始我们将开启垃圾回收器的介绍了,我们知道垃圾回收算法是逻辑改变,而垃圾回收器是具体的实现。我们前面介绍的垃圾回收器有7个,本文将在添加三个,但是这三个目前来看不是很常用,我们只了解一下,我们主要还是讲解这7个垃圾回收器。原创 2023-11-03 19:31:53 · 134 阅读 · 0 评论 -
JVM虚拟机:垃圾回收算法和垃圾回收器之间的关系
在前面的课程中我们学习了GC垃圾回收算法,分别为:引用回收算法复制算法标记清除算法标记整理算法这些垃圾回收算法是理论,有多种垃圾回收器可以实现这些理论。目前为止没有最完美的垃圾回收器,只能针对具体的情况选择最合适的垃圾回收器,进行分代收集(也就是说年轻代和老年代使用不同的垃圾回收器)。原创 2023-11-01 22:58:40 · 260 阅读 · 0 评论 -
JVM虚拟机:JVM的垃圾回收清除算法(GC)有哪些
没有效率高而且内存利用率好的算法,只能因地制宜。比如对于年轻代对象存活率低,而复制算法的效率和存活对象的数量有关,所以复制算法比较适合年轻代。而复制算法的内存利用率不高(只是用了一半),所以通过hotspot中的两个survivor的设计得到缓解。老年代的特点是区域较大,对象存活率高,所以要使用复制算法就需要复制大量的对象,所以此时一般使用标记清除算法和标记整理算法的混合实现。标记清除(mark sweep) - 位置不连续 产生碎片 效率偏低(两遍扫描)原创 2023-11-01 22:57:02 · 857 阅读 · 0 评论 -
JVM虚拟机:你是如何理解Java中的垃圾?
垃圾就是内存中不再被使用到的空间,当一个对象不再被引用后那么久成为垃圾可以回收了,但是线程计算没有引用也可以独立运行,因此线程和对象不同。如果一个对象没有任何一个引用指向它了,那么这个对象就是垃圾。还有一种情况可以产生一堆垃圾:如上所示,三个对象相互指向,而没有一个引用指向他们,那么他们三个就是垃圾。原创 2023-11-01 22:54:05 · 153 阅读 · 0 评论 -
JVM虚拟机:如何调整堆空间的大小?
如上所示,我们通过maxMemory获取到java虚拟机试图使用的最大内存量,默认为物理内存的1/4,比我本机的物理内存是8G,那么最多java虚拟机可以获取到2G。如上所示,从物理角度来说呢,堆内存就是蓝色的区域,从逻辑角度来说,堆内存包含这个红色的部分,调优肯定是条物理的大小了,我们先来看一下物理内存的大小是多少?10M是虚拟机的内存大小,虚拟机分为新生代和老年代,其中新生代占比1/3,而老年代占比2/3,所以这两个的大小就分别为10/3,20/3。一共10M,很容易用完,如果用完会出现什么问题?原创 2023-10-31 22:38:47 · 243 阅读 · 0 评论 -
JVM虚拟机:堆结构的逻辑分区
堆内存的逻辑分区如下所示:堆内存中分为新生代和老年代,二者空间大小1:3。在新生代里面分为两类区域(eden、survivor),三个区域(eden、survivor、survivor),三个区大小比例为8:1:1。原创 2023-10-31 22:36:32 · 640 阅读 · 0 评论 -
JVM虚拟机:通过一个例子解释JVM中栈结构的使用
d1为对象引用,位于虚拟机栈的局部变量表中,对象new BirthDate()存在堆中,调用构造方法,创建栈帧并压栈,栈帧中的局部变量表存储了基础类型int的day,month,year。当BirthDate构造方法执行完之后,栈帧出栈,day,month,year将从栈中消失,栈帧可被回收。当main方法执行完之后,d变量,test,d1引用都在栈帧中,栈帧出栈,可被回收,堆中的new Test(),new BirthDate()将等待垃圾回收。main方法执行,创建栈帧并压栈。原创 2023-10-31 22:33:34 · 160 阅读 · 0 评论 -
JVM虚拟机:从结构到指令让你对栈有足够的认识
我们下面将通过两个具体的例子来解释一下,程序运行的时候,程序是如何通过指令来操作栈的,以此来帮助大家对栈运行原理的理解。bipush 8istore_1iload_1istore_1iload_1return如上所示,上面的程序就是对应上面的命令,首先main方法执行,就会开启一个main线程,在栈中开辟一个栈空间,此时调用main方法,那么就会往这个栈空间中建立一个栈帧(main),此时会有一个局部变量表,对应这个方法的局部变量,其中0索引位置为args数组,然后1位置就是i。原创 2023-10-29 23:42:16 · 303 阅读 · 0 评论 -
JVM虚拟机:堆、栈、方法区的关系
在计算机科学领域,Java虚拟机(JVM)是一个关键的概念。它是Java语言的核心,也是其他基于Java的编程语言的基础。JVM的核心组成部分包括堆、栈和方法区。这些组成部分之间的关系非常重要,因为它们共同构成了程序执行的基础。原创 2023-10-29 23:38:58 · 827 阅读 · 0 评论 -
JVM虚拟机:运行时数据区详解
本文先简略的了解一下运行时数据区的各个部分以及它的作用,之后我们将对每一部分进行详细的解释和介绍。原创 2023-10-28 11:33:02 · 111 阅读 · 0 评论 -
JVM虚拟机:Java对象的头信息有什么?
比如在无锁的情况下,它的锁标志位为01,然后是否是偏向锁为0,然后4bit存储分代年龄(0到15,所以最大为15),然后25bit存储对象的hashCode(原创 2023-10-27 21:57:08 · 216 阅读 · 0 评论 -
JVM虚拟机:对象在内存中的存储布局
在前面的过程中,我们学习了对象创建过程,那么一个对象在内存中的布局是什么样的呢?原创 2023-10-27 21:54:24 · 532 阅读 · 0 评论 -
JVM虚拟机:定位对象的两种方式
1. 句柄池:在Java的句柄池模型中,Java虚拟机(JVM)会为每个对象创建一个句柄,句柄包含了对象的实例变量和一个指向对象实例数据的指针。当我们需要访问对象时,首先通过句柄找到对象的句柄,然后再通过句柄中的指针找到对象的实例数据。这种方式可以提高对象访问的灵活性和安全性,因为句柄可以被移动和重分配,而不会影响对象的引用。2. 直接指针:在Java的直接指针模型中,对象引用直接指向对象的内存地址,而不需要通过句柄进行间接访问。这种方式可以提高对象访问的效率,因为不需要额外的指针解引用操作。原创 2023-08-27 12:16:34 · 375 阅读 · 0 评论