文章内容概要:
在这里插入图片描述

文章目录

  • 一、什么是JVM
  • 二、JDK,JRE,JVM的关系
  • 三、JVM结构
  • 四、GC垃圾回收机制
  • 五、垃圾回收算法
  • 六、JVM运行实例

一、什么是JVM

     JVM是Java Virtual Machine(Java虚拟机)的缩写,它是整个Java实现跨平台的最核心的部分
    所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行,也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。
    JVM是Java平台的基础,和实际的机器一样,它也有自己的指令集,并且在运行时操作不同的内存区域。 JVM通过抽象操作系统和CPU结构,提供了一种与平台无关的代码执行方法,即与特殊的实现方法、主机硬件、主机操作系统无关。JVM的主要工作是解释自己的指令集(即字节码)到CPU的指令集或对应的系统调用,保护用户免被恶意程序骚扰。 JVM对上层的Java源文件是不关心的,它关注的只是由源文件生成的类文件(.class文件)。

几个重要概念
1、Java虚拟机的生命周期:声明周期起点是当一个java应用main函数启动时虚拟机也同时被启动,而只有当在虚拟机实例中的所有非守护进程都结束时,java虚拟机实例才结束生命。

2、Java虚拟机与main方法的关系:main函数就是一个java应用的入口,main函数被执行时,java虚拟机就启动了。启动了几个main函数就启动了几个java应用,同时也启动了几个java的虚拟机。

3、JVM结构图各模块
在这里插入图片描述

二、JDK,JRE,JVM的关系

    JDK(Java Development Kit)是Java 语言的软件开发工具包(SDK)。在JDK的安装目录下有一个jre目录,
    JRE里面有两个文件夹bin和lib
    在这里可以认为bin里的就是JVMlib中则是JVM工作所需要的类库,而jvm和 lib合起来就称为jre。
    jdk,jre,JVM的关系图

在这里插入图片描述

三、JVM结构

在这里插入图片描述
我们总结出JVM内存包含两个子系统两个组件
两个子系统是:
Classloader子系统Executionengine(执行引擎)子系统
两个组件分别是:
Runtimedataarea(运行时数据区域)组件Nativeinterface(本地库接口)组件

(一)两大子系统

1、Classloader子系统
(1)作用
    类加载指的是将类的class文件读入到内存,并为之创建一个对应java.lang.Class对象,也就是说,当程序中使用任何类时,系统都会之建立一个java.lang.Class对象(联合“反射”理解)。
(2)类加载器
     类的加载由类加载器完成,类加载器通常由JVM提供,这些类加载器也是前面所有程序运行的基础,JVM提供的这些类加载器通常被称为系统类加载器。
    jvm虚拟机位于操作系统的堆中,并且,程序员写好的类加载到虚拟机执行的过程是:当一个classLoder启动的时候,classLoader的生存地点在jvm中的堆,然后它会去主机硬盘上将A.class文件装载到jvm的方法区,方法区中的这个字节文件是用以被虚拟机拿来new A对象,并在堆内存生成了一个A.class对象(联合“反射”理解),然后A字节码这个内存文件有两个引用一个指向A的class对象,一个指向加载自己的classLoader

在这里插入图片描述

(3)双亲委派机制
双亲委派机制:JVM在加载类时默认采用的是双亲委派机制。通俗的讲,就是某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载。

采用双亲委派模式的是好处是Java类随着它的类加载器可以具备了一种带有优先级的层次关系,通过这种层级关可以避免类的重复加载,当父亲已经加载了该类时,就没有必要子ClassLoader再加载一次。

在这里插入图片描述

例如:当jvm要加载Test.class的时候,
(1)首先会到自定义加载器中查找(其实是看运行时数据区的方法区有没有加载),看是否已经加载过,如果已经加载过,则返回字节码。
(2)如果自定义加载器没有加载过,则询问上一层加载器(即AppClassLoader)是否已经加载过Test.class。
(3)如果没有加载过,则询问上一层加载器(ExtClassLoader)是否已经加载过。
(4)如果没有加载过,则继续询问上一层加载(BoopStrap ClassLoader)是否已经加载过。
(5)依次类推,最后到自定义类加载器指定的路径还没有找到Test.class字节码,则抛出异常ClassNotFoundException。

2、执行引擎(Executionengine子系统)

(1)概念
    负责执行来自类加载器子系统(class loader subsystem)中被加载类中在方法区包含的指令集(指令集存在于.class文件),通俗讲就是类加载器子系统把代码逻辑(什么时候该if,什么时候该相加,相减)都以指令的形式加载到了方法区,执行引擎就负责执行这些指令就行了。
用网上最流行的一张图表示就是:
在这里插入图片描述
(2)代码转化
    但是执行引擎拿到的方法区中的指令还是人能够看懂的,这里执行引擎的工作就是要把指令转成JVM执行的语言(也可以理解成操作系统的语言),最后操作系统语言再转成计算机机器码。

在这里插入图片描述
(二)两大组件
在这里插入图片描述
两大组件分别为Nativeinterface(本地库接口)组件Runtimedataarea(运行时数据区域)组件
从图中可以看出Runtimedataarea(运行时数据区域)组件包含5部分:
方法区,堆,虚拟机栈,本地方法栈,程序计数器

1、Nativeinterface(本地库接口)组件

  • 本地方法库接口:即操作系统所使用的编程语言的方法集,是归属于操作系统的。
  • 本地方法库:保存在动态链接库中,即.dll(windows系统)文件中,格式是各个平台专有的。

2、Runtimedataarea(运行时数据区域)组件
从图中可以看出运行时数据区域包含5部分:
方法区,堆,虚拟机栈,本地方法栈,程序计数器

虚拟机栈、本地方法栈、程序计数器这三个模块是线程私有的,有多少线程就有多少个这三个模块,声明周期跟所属线程的声明周期一致。

(1)程序计数器(Program Counter Register):也叫PC寄存器,是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解释器工作时就是通过这个计数器的值来选取下一条需要执行的字节码指令。分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。

(2)Java虚拟机栈(Java Virtual Machine Stack)
    ①Java虚拟机栈是线程私有的,它的生命周期与线程相同,每个线程都有一个。
    ②每个线程创建的同时会创建一个JVM栈,JVM栈中每个栈帧存放的为当前线程中局部变量,操作数帧,动态链接,方法出口与其他内容
    ③每一个方法从被调用直至执行完成的过程就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程
    ④栈运行原理:栈中的数据都是以栈帧(Stack Frame)的格式存在,栈帧是一个内存区块,是一个有关方法和运行期数据的数据集,当一个方法A被调用时就产生了一个栈帧F1,并被压入到栈中,A方法又调用了B方法,于是产生栈帧F2也被压入栈,B方法又调用了C方法,于是产生栈帧F3也被压入栈…… 依次执行完毕后,先弹出后进…F3栈帧,再弹出F2栈帧,再弹出F1栈帧。
    ⑤JAVA虚拟机栈的最小单位可以理解为一个个栈帧,一个方法对应一个栈帧,一个栈帧可以执行很多指令,如下图:

在这里插入图片描述

  • 局部变量表
        存储方法里的局部变量,基础类型和引用类型。
    虚拟机通过索引定位的方式使用局部变量表。JVM栈中每个栈帧存放的为当前线程中局部基本类型的变量(java中定义的八种基本类型:boolean、char、byte、short、int、long、float、double;和引用变量
  • 操作数栈
        操作数栈是代码执行时存放操作数的栈,例如加法操作,先将两个参数从栈顶取出,计算得到结果以后,再将结果压入栈。操作数栈和局部变量表会有一部分重叠
  • 动态链接
        Class 文件中存放了大量的符号引用,字节码中的方法调用指令就是以常量池中指向方法的符号引用作为参数,每个栈帧都包含一个执行运行时常量池中该栈帧所属方法的引用,持有这个引用是为了支持方法调用过程中的动态连接(运行时链接)。
        描述一个方法调用了另外的其他方法时,就是通过常量池中指向方法的符号引用来表示的,那么动态链接的作用就是为了将这些符号引用转换为调用方法的直接调用
        与之对应:静态链接:当一个字节码文件被装进JVM内部时,如果被调用的目标方法在编译期可知且运行期保持不变。这种情况下调用方法的符号引用转换
  • 方法返回地址
        方法的退出有两种方式,正常执行结束退出和异常退出。异常退出一般根据异常处理表来确定返回地址,栈帧中不会存储这一部分信息。方法的退出实际上就是将栈帧从栈里弹出,恢复上一层栈帧的本地变量表和操作数栈,并且将返回值压入上一栈帧的操作数栈。

(3)本地方法栈(Native Method Stack)
    作用同java虚拟机栈类似,区别是:虚拟机栈为虚拟机执行Java方法服务,而本地方法栈则是为虚拟机使用到的Native方法服务。是线程私有的,它的生命周期与线程相同,每个线程都有一个。
本地(native)方法讲解:
     ①本地方法就是带有native标识符修饰的方法
     ②有时java应用需要与java外面的环境交互。这是本地方法存在的主要原因,你可以想想java需要与一些底层系统如操作系统或某些硬件交换信息时的情况。本地方法正是这样一种交流机制:它为我们提供了一个非常简洁的接口,而且我们无需去了解java应用之外的繁琐的细节
     ③存在的意义:不方便用java语言写的代码,使用更为专业的语言写更合适;甚至有些JVM的实现就是用c编写的,所以只能使用c来写,

(4)Java 堆(Java Heap)
  ①在虚拟机启动的时候创建(虚拟机在main方法执行时创建)。
  ②是Java虚拟机所管理的内存中最大的一块。
  ③不同于上面3个,堆是jvm所有线程共享的
  ④唯一目的就是存放对象实例,几乎所有的对象实例以及数组都要在这里分配内存。
  ⑤Java堆是垃圾收集器管理的主要区域
  ⑥因此很多时候java堆也被称为“GC堆”(Garbage Collected Heap)。从内存回收的角度来看,由于现在收集器基本都采用分代收集算法,所以Java堆还可以细分为:新生代和老年代;新生代又可以分为:Eden 空间、From Survivor空间、To Survivor空间
  ⑦java堆是计算机物理存储上不连续的、逻辑上是连续的,也是大小可调节的(通过-Xms和-Xmx控制)
  ⑧如果在堆中没有内存完成实例的分配,并且堆也无法再扩展时,将会抛出OutOfMemoryError异常

(5)方法区(Method Area)
  ①在虚拟机启动的时候创建(虚拟机在main方法执行时创建)。
  ②所有jvm线程共享
  ③除了和堆一样不需要不连续的内存空间和可以固定大小或者可扩展外,可以选择不实现垃圾收集
  ④用于存放已被虚拟机加载的类信息、常量池、静态变量、以及编译后的方法实现的二进制形式的机器指令集等数据
  ⑤运行时常量池(Runtime Constant Pool)是方法区的一部分。Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池(Constant Pool Table),用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池中存放。
  ⑥方法区逻辑上属于堆的一部分,但是为了与堆进行区分,通常又叫“非堆”

四、GC垃圾回收机制

(一)了解堆内存
类加载器读取了类文件后,需要把类、方法、常变量放到堆内存中,以方便执行器执行,堆内存分为三部分
在这里插入图片描述
(二)新生区
新生区是类的诞生、成长、消亡的区域,一个类在这里产生,应用,最后被垃圾回收器收集,结束生命。
新生区又分为两部分:伊甸区(Eden space)和幸存者区(Survivor pace)
伊甸区:所有的类都是在伊甸区被new出来的
幸存区有两个:0区(Survivor 0 space)和1区(Survivor 1 space)
执行过程:当伊甸园的空间用完时,程序又需要创建对象,JVM的垃圾回收器将对伊甸园进行垃圾回收(Minor GC,轻GC),将伊甸园中的剩余对象移动到幸存0区。若幸存0区也满了,再对该区进行垃圾回收(Minor GC,轻GC),然后移动到1区。那如果1去也满了呢?再移动到养老区。

如果出现java.lang.OutOfMemoryError: Java heap space异常,说明Java虚拟机的堆内存不够。原因有二:

  • Java虚拟机的堆内存设置不够,可以通过参数-Xms、-Xmx来调整。
  • 代码中创建了大量大对象,并且长时间不能被垃圾收集器收集(存在被引用)

(三) 养老区
  养老区用于保存从新生区筛选出来的 JAVA 对象,一般池对象都在这个区域活跃。
  若养老区也满了,那么这个时候将产生FullGC(或MajorGC,重GC),进行养老区的内存清理。若养老区执行FullGC之后发现依然无法进行对象的保存,就会产生OOM异常“OutOfMemoryError”。

(四) 永久区(永久代)(非堆)
   永久存储区是一个常驻内存区域,用于存放JDK自身所携带的 Class,Interface 的元数据,也就是说它存储的是运行环境必须的类信息,被装载进此区域的数据是不会被垃圾回收器回收掉的,关闭 JVM 才会释放此区域所占用的内存

   如果出现java.lang.OutOfMemoryError: PermGen space(此异常存在于jdk1.6及之前),说明是Java虚拟机对永久代Perm内存设置不够。原因有二:

  • 程序启动需要加载大量的第三方jar包。例如:在一个Tomcat下部署了太多的应用。
  • 大量动态反射生成的类不断被加载,最终导致Perm区被占满。

(五)永久代变更历程
(1)JDK1.6及之前,方法区位于永久代(PermGen),永久代和堆相互隔离,永久代的大小在启动JVM时可以设置一个固定值,不可变;
(2)JDK1.7中,存储在永久代的部分数据就已经转移到Java Heap堆或者Native memory本地内存,譬如符号引用(Symbols)转移到了native memory;字符串常量池(interned strings),类的静态变量(class statics)转移到了Java heap。但永久代仍存在于JDK 1.7中,并没有完全移除,
(3)JDK8中,取消永久代,方法存放于元空间(Metaspace),元空间仍然与堆不相连,逻辑上可认为在堆中(JDK 1.8中参数PermSize和MaxPermSize已经失效,(java.lang.OutOfMemoryError: PermGen space(PermGen space意为永久代)这种错误将不会出现在JDK1.8中)。

介绍两篇对JVM内存详细探究的帖子
JAVA 方法区与堆–java7前,java7,java8各不相同
Java8内存模型

五、垃圾回收算法

下面介绍几种垃圾回收的算法:
(一)引用计数法
    这个算法的思想很简单,既然我们说当一个对象A不再被引用时为垃圾对象,那就为对象A设置一个计数器,所以对于对象A,只要有任何一个对象引用了对象A,那么引用计数器就加一;而当这个引用失效了之后,引用计数器就减一。当一个对象的引用计数器的值为0的时候,那么这个对象就不可能再被使用了。
在这里插入图片描述
但是引用计数法有一个很麻烦的问题,就是它无法处理垃圾对象的循环引用,来看看下面这个图:
在这里插入图片描述
    由于这种算法存在上述缺陷,所以JVM其实并不使用它,而是使用另一种算法,是根搜索算法。这种算法是现代垃圾回收算法的思想基础。它的做法是:把一些对象设为根对象(也可以说是根结点),当任何一个根结点都不可达某一个对象的时候,这个对象就被认为是可以回收的。基于这种思想,上述引用计数法存在的问题就可以解决了,由于根对象无法到达那三个循环引用的对象,所以这三个对象都是视为可回收的垃圾。
那么什么对象可以作为根对象呢?

  • Java虚拟机栈中引用的对象;
  • 方法区中的类静态成员引用的对象(static修饰的);
  • 方法区中的常量引用的对象(主要是final修饰的);
  • 本地方法栈中JNI(Java Native Interface)引用的对象。

(二)标记-清除法
    标记-清除法将垃圾回收分为两个阶段,即标记阶段和清除阶段。做法是,首先在标记阶段,遍历所有的根结点,将这些根结点的可达对象进行标记;而在清除阶段,遍历堆中的所有对象,对那些没有被标记的对象进行清除。
我们来看看一个示意图:
1、标记-清除算法示意(标记阶段)
在这里插入图片描述

    上图中的整个表格是我们用来模拟堆内存的,其中表格中存储的是一系列的对象,我们从根结点出发,深蓝色的表格中的对象表示的是从根结点出发的可达的对象,而灰色表格中表示的是从根结点出发不可达的对象,而其余浅蓝色的表格表示的还是空闲的堆内存。上述进行的是标记阶段,由根结点出发可达的对象都进行了标记。

2、标记-清除算法示意(清除阶段)

标记阶段完成后,下面就是清除阶段,对没有进行标记的对象进行清除:
在这里插入图片描述
至此标记-清除算法就执行完毕。

(三)标记-压缩算法
    基于上一种算法的缺点,标记-压缩算法是对标记-清除算法的一种改良,它们的工作原理差不多,也是分为两个阶段:标记阶段和压缩阶段。标记阶段和标记-清除算法一样;而在压缩阶段的时候,它不是将所有的未标记的对象清除,而是将所有的标记对象压缩熬堆内存的一段,然后清除边界以 外的所有空间。

标记-压缩算法示意(标记阶段)在这里插入图片描述
标记完后,把对象进行压缩:
在这里插入图片描述
标记-压缩算法示意(压缩阶段):压缩对象

在这里插入图片描述
压缩完毕

清除边界以外的区域:
在这里插入图片描述

(四)复制算法
    复制算法的思想是,将堆内存分为两块大小完全相同的内存(不一定是全部堆内存空间),每一次只用一块(活跃空间),另一块(空闲空间)闲置不用。当其中的活跃空间使用完后,就将活跃空间中还存活的对象复制到空闲空间里去,按照地址整齐排好序。之后清除活跃空间中所有的对象。然后两者交换使用职位,现在空闲空间成为了活跃空间,活跃空间成为了空闲空间。
首先将存活对象复制到空闲空间

在这里插入图片描述
复制算法(复制存活对象)
在这里插入图片描述
转换两个空间的角色,以及清空原来的活跃空间:
在这里插入图片描述
至此,复制算法执行完毕。

(五)总结
1、标记-清除算法
    首先是速度慢,因为标记-清除算法在标记阶段需要使用递归的方式从根结点出发,不断寻找可达的对象;而在清除阶段又需要遍历堆中的所有对象,查看其是否被标记,然后清除。
    其次是其最大的缺点,使用这种算法进行清理而得的堆内存的空闲空间一般是不连续的,我们知道对象实例在堆中是随机存储的,所以在清理之后,会产生许多的内存碎片。
2、标记-压缩算法
    首先这种算法克服了标记-清除算法中会产生内存碎片的缺点,也解决了复制算法中内存减半使用的不足。
而其缺点则是速度也不是很快,不仅要遍历标记所有可达结点,还要一个个整理可达存活对象的地址,所以导致其效率不是很高。
3、复制算法
    复制算法很明显的缺点就是浪费内存空间,因为将内存分为两块,一次只能使用一块,这也意味着分的块越大,浪费的内存越多。而且当对象的存活率很高的时候,不断的复制操作也会显得费时和不可忽视。
    但是也是托了浪费内存的福,复制算法执行的速度较快,典型的空间换时间。

六、JVM运行实例

(一)各模块执行流程
运行时数据区各个模块协作工作的总结较好的图,首先要执行的代码是:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

(二)代码编译流程
Java代码编译(Java Compiler)过程,也就是由.java文件到.class文件的过程
在这里插入图片描述

注:源代码就是.java文件,JVM字节码就是.class文件
1、是先加载字节码文件还是先执行main方法:先加载字节码文件到方法区,然后在找到main执行程序。
2、java被编译成了class文件,JVM怎么从硬盘上找到这个文件并装载到JVM里呢?
答:是通过java本地接口(JNI),找到class文件后并装载进JVM,然后找到main方法,最后执行。

参考:
[1] 【狂神说Java】JVM快速入门篇
[2] Java的GC算法种类
[3] JVM原理最全、清晰、通俗讲解,五天40小时吐血整理

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 网络编程---Syn_Flood攻击

    Syn_Flood概述 Syn-Flood攻击是当前网络上最为常见的DDoS攻击,也是最为经典的拒绝服务攻击,它利用了TCP协议实现上的一个缺陷,通过向网络服务所在端口发送大量的伪造源地址的攻击报文,就可能造成目标服务器中的半开连接队列被占满,从而阻止其他合法用户进行访问。 这种攻击…...

    2024/4/23 15:34:07
  2. idea开发之设置jdk编译版本

    1.idea的settings、project structure中设置2.在pom.xml文件中引入...

    2024/4/25 16:33:56
  3. spring基于注解的增删改查

    首先新建一个实体类,这里不需要构造方法public class Account {private String username;private int money;public void setUsername(String username){this.username=username;}public void setMoney(int money){this.money=money;}public String getUsername() {return use…...

    2024/4/23 15:34:05
  4. LINUX学习笔记之awk用法

    [awk] 用-F指定多分隔符及正则表达式 命令行选项 -F"[@ t]" 告诉awk @, 空格和Tab都是字段分隔符,例如:awk -F"[@ t]" & 39;{print $2,$3}& 39; test以@,空格,Ta 命令行选项 -F"[@ /t]" 告诉awk @, 空格和Tab都是字段分隔符,例如:…...

    2024/4/23 15:34:07
  5. Windows SDK学习之滚动条

    如何获取客户区的尺寸 滚动条的出现最大限度(没有之一)的提高了用户体验,但首先需要客户区的尺寸。 1.在全屏模式下获得客户区的分辨率 GetSystemMetrics(SM_CXSCREEN);->宽度 GetSystemMetrics(SM_CYSCREEN);->高度 2.GetClientRect获取当前窗口尺寸 3.当窗口改变时,…...

    2024/4/23 15:34:04
  6. 点击跟进记录 查询这个学生的跟进信息出现的错误Parameter netStuId not found. Available parameters are [ arg0,param1]

    error: “Internal Server Error” “内部服务器错误” message: “nested exception is org.apache.ibatis.binding.BindingException: Parameter ‘netStuId’ not found. Available parameters are [arg0, netFollow, param1, param2]” 嵌套异常为org.apache.ibati.binding…...

    2024/4/26 14:18:42
  7. 利用C#进行AutoCAD .NET 二次开发 cad官方学习链接

    利用C# 进行cad2018的二次开发需要安装cad2018 vs2015 社区版即可cad2018的二次开发类库:Autodesk_ObjectARX_2018_Win_64_and_32_Bit.sfx项目创建模板:AutoCAD .NET Wizards2018 (非必须,但是安装后比较方法创建,是个项目创建模板)cad官方学习链接:帮助文档https://www.…...

    2024/4/23 15:34:04
  8. 让Hinton后悔投少了的AI公司:吴恩达弟子创办,李飞飞也是投资人

    郭一璞 发自 凹非寺 量子位 报道 | 公众号 QbitAI后悔了后悔了后悔了。位于伯克利的机器人创业公司CovariantAI,B轮4000万美元融资甫一公布,深度学习之父Geoffrey Hinton就后悔了:投少了,应该再多投100倍的。当我的朋友,Radical Ventures的Jordan Jacobs问我如何看待Covar…...

    2024/4/24 12:45:34
  9. 负载均衡集群——LVS

    目录一、LVS简介二、LVS的特点三、LVS常见术语四、LVS的组成五、LVS的工作原理 一、LVS简介LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。这是一个开源项目…...

    2024/4/20 17:54:46
  10. ThreadLocal 内存泄漏问题深入分析

    写在前面 ThreadLocal 基本用法本文就不介绍了,如果有不知道的小伙伴可以先了解一下,本文只研究 ThreadLocal 内存泄漏这一问题。 ThreadLocal 会发生内存泄漏吗? 先给出结论:如果你使用不当是有可能发生内存泄露的ThreadLocal 和 当前 Thread 栈堆布局图每个 Thread 里面都…...

    2024/4/17 2:19:17
  11. 【美团杯2020】平行四边形 解题报告

    原题地址:http://uoj.ac/problem/525这是一道构造题,如果知道原根的话就容易想出来,不知道就很难做了。题目为质数以及的排列已经暗示了要用原根(因为原根可以构造出一个排列,不会的可以去查查定义),那么怎么证明不会构成平行四边形呢?使用反证法,考虑四个点,不妨设,…...

    2024/4/24 19:48:59
  12. 无痕补单技术

    先说说什么是无痕技术补单吧 正常行为,访客踪迹,浏览行为,下单过程都是有记录所在对吧?从什么渠道进店,什么词成交,参谋里都可以看到对不对,无痕都目的就是不留任何痕迹,做到无法让系统稽查到数据情况,也就100%避免了数据异常等情况的稽查!最后的结果就是做到了神奇的…...

    2024/4/23 15:34:07
  13. 候选码的求解

    候选码的求解 1.一般求解方法(使用于属性较少的表) 主要方法:由少到多找出每个属性集的闭包,如果其属性集的闭包包含全部的属性集,那么这个属性集就是要求的候选码。 例子: 假设:R(U),U={A,B,C,D} F={AB->C,C->D,D->A},找出R的所有候选键。 方法:找出U中每个…...

    2024/4/23 15:34:06
  14. Xcode创建头文件

    首先点击到工程文件上去:然后创建头文件:记住要把你需要用到的Target给点上。然后譬如对头文件定义一个这样的函数:现在返回到Target文件:就可以编译运行了。...

    2024/4/23 15:33:59
  15. 负载均衡集群——LVS之四种模式

    目录一、DR模式二、TUN模式三、NAT模式四、full-nat模式 一、DR模式 Virtual Server via Direct Routing(VS-DR):用直接路由技术实现虚拟服务器。当参与集群的计算机和作为控制管理的计算机在同一个网段时可以用此方法,控制管理的计算机接收到请求包时直接送到参与集群的节点。…...

    2024/4/23 0:48:38
  16. python多进程 获取子进程的返回值

    1、使用进程的队列multiprocessing.Queue,put(),get()方法 子进程不需返回值,将目标结果放入队列中 在主进程中获取 get方法 """ coding:utf-8""" #coding:utf-8 import random import time import multiprocessingdef worker(k,q):t = 0print…...

    2024/4/23 15:34:04
  17. Win10系统下不同版本cuda切换

    前言在win10中显卡驱动只能安装一个,但是可以同时安装多个版本的cuda,如我安装了cuda10.0和cuda10.1cuda10.0向cuda10.1切换过程1.查看当前cudanvcc -V显示为cuda10.0此时检查系统环境变量CUDA_PATH、NVCUDASAMPLES_ROOT配置如下:环境变量PATH配置如下,可以看到v10.0的在最…...

    2024/4/23 15:33:56
  18. SpringCloudAlibaba之Nacos搭建及服务注册

    1.1. 什么是 Nacos Nacos 是阿里巴巴推出来的一个新开源项目,这是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流…...

    2024/4/23 15:33:57
  19. IDEA一个窗口显示多个项目

    IDEA一个窗口显示多个项目 当我们创建一个新的maven项目时,idea总是提示我们是当前窗口还是新的窗口,选择当前窗口会把原有项目覆盖,选择新的窗口会另开一个idea窗口,如果项目多了并且项目之间有联系的话,来回切换窗口是非常操蛋的。只有在一个窗口里显示出我们需要的所有…...

    2024/4/23 15:33:56
  20. 负载均衡集群——LVS之八种调度算法

    目录一、LVS调度算法的类型二、常用的静态调度算法1、RR:轮叫调度(Round Robin)2、WRR:加权轮叫(Weight RR)3、DH:目标地址散列调度(Destination Hash )4、SH:源地址 hash(Source Hash)三、常用的动态调度算法1、LC:最少链接(Least Connections)2、WLC:加权最少…...

    2024/4/23 15:33:53

最新文章

  1. websocket爬虫

    人群看板需求分析 先找到策略中心具体的数据。对应数据库中的数据 看看接口是否需要被逆向 点开消费者细分,可以找到人群包(人群名称) 点击查看透视 label字段分类: 在这里插入图片描述 预测年龄:tagTitle 苹果id&#x…...

    2024/4/27 7:38:34
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. mac安装nvm

    一、前景提示 1、保证自己的mac电脑上没安装node环境 2、保证自己的电脑上有安装git,不然下载nvm时会报错。git下载可以参考: 1)佛系安装:通过提示下载 XCode 2)brem安装 3)终极大法:git官网下…...

    2024/4/18 23:25:24
  4. JVM学习笔记

    文章目录 一、内存模型1. 程序计数器2. 栈3. 本地方法栈4. 堆5. 方法区方法区位置字符串常量池位置 6. 直接内存 二、虚拟机参数设置三、类的生命周期1. 加载2. 连接1)验证2)准备3)解析 3. 初始化4. 卸载 四、类加载器1. 启动类加载器2. 扩展…...

    2024/4/23 14:15:51
  5. 自动化标准Makefile与lds

    makefile的自动化,需要使用变量,以及自动变量。 实行命令行与参数的分离。 命令行只与变量打交道,而变量则携带不同的参数,这样,通过修改变量,命令的执行结果不同。 可以简单理解为,命令行是个…...

    2024/4/23 6:24:35
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/26 18:09:39
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/26 20:12:18
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/26 23:05:52
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/27 4:00:35
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/25 18:39:22
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/25 18:39:22
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/26 21:56:58
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/25 16:48:44
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/26 16:00:35
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/25 18:39:16
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/26 22:01:59
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/25 2:10:52
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/25 18:39:00
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/26 19:46:12
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/25 18:38:58
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/25 18:38:57
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57