【JVM】JVisualVM的介绍、使用和GC过程
VisualVM介绍
VisualVM 是Netbeans的profile子项目,已在JDK6.0 update 7 中自带,能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来的)。在JDK_HOME/bin(默认是C:\Program Files\Java\jdk1.6.0_13\bin)目录下面,有一个jvisualvm.exe文件,双击打开,从UI上来看,这个软件是基于NetBeans开发的了。
VisualVM 提供了一个可视界面,用于查看 Java 虚拟机 (Java Virtual Machine, JVM) 上运行的基于 Java 技术的应用程序的详细信息。VisualVM 对 Java Development Kit (JDK) 工具所检索的 JVM 软件相关数据进行组织,并通过一种使您可以快速查看有关多个 Java 应用程序的数据的方式提供该信息。您可以查看本地应用程序或远程主机上运行的应用程序的相关数据。此外,还可以捕获有关 JVM 软件实例的数据,并将该数据保存到本地系统,以供后期查看或与其他用户共享。
在cmd中执行 jvisualvm
Visual GC插件
本来使用这个是看GC的,结果发现没有Visual GC选项插件,接下来说一下怎么安装
安装 Visual GC插件
流程:
点击上方【工具】–【插件】–【可用插件】
选中需要的插件,然后点击安装,安装完成后,重启jvisualvm即可。
但是肯定有的小伙伴可用插件是空的,下面就是解决【可用插件】中为空的情况。
步骤1:
找到新的插件地址
打开这个地址: VisualVM: Home
选中上方的Plugins
步骤2:
更换插件地址
将步骤1中复制出来的地址放进去。
如果更换了还是在【可用插件】中刷不出来,那么可以尝试多添加几个地址。
最后多刷新,多尝试几遍。就可以在【可用插件】中找到了,然后勾选,安装,重启即可。
测试
工具测试如下图
测试代码
import java.util.ArrayList;public class JVMTest {//100KBbyte[] b = new byte[1024*100];public static void main(String[] args) throws InterruptedException {ArrayList<JVMTest> heapTests = new ArrayList<>();while(true){heapTests.add(new JVMTest());Thread.sleep(50);//System.out.println("执行中....");}}
}
整个区域划分为三个部分,分别为 spaces、graphs、histogram
spaces 区域
代表虚拟机内存分布情况,从图中可以看出,虚拟机被分为 Perm、Old、Eden、S0、S1
Perm
英文名叫做 Permanent Generation,我们称之为永久代,Java 8 之后称为元空间
通过 VM Args:-XX:PermSize=128m -XX:MaxPermSize=256m 设置初始值与最大值
Heap
Java 堆(Java Heap)。它包括老年代(对应图中的 Old 区域)和新生代(对应图中的 Eden、S0、S1 三个统称为新生代,分为 Eden 区和两个 Survivor 区域),它们默认是 8:1:1 分配内存
通过 VM Args:-xms512m -Xmx512m -XX:+HeapDumpOnOutofMemoryError -XX:SurvivorRatio=8 设置初始堆内存、最大内存、内存异常打印 dump、新生代内存、新生代内存分配比例(8:1:1),因为 Heap 分为新生代和老年代,所以 512M - 100M = 412M,老年代就是 412M(初始内存跟最大内存最好相等,防止内存不够时扩充内存或者 Full GC,导致性能下降)
Graphs 区域
Compile Time(编译时间)
图中 996 compiles 表示编译总数,1.413 s 表示编译累计时间。一个脉冲表示一次 JIT 编译,窄脉冲表示持续时间短,宽脉冲表示持续时间长
Class Loader Time(类加载时间)
图中 1675 loaded 表示加载类数量,42 unloaded 表示卸载的数量,905.329ms 表示类加载花费的时间
GC Time
图中 5 collections 表示垃圾收集的总次数,468.449 ms 表示垃圾收集花费的时间,last cause 表示最近垃圾收集的原因
Eden Space(Eden 区)
图中括号内的 315.500 M 表示最大容量,15.000M 表示当前容量,后面的 9.873 M 表示当前使用情况, 1 collections 表示垃圾收集次数,4.732 ms 表示垃圾收集花费时间
Survivor 0 / Survivor 1(S0 和 S1 区)
图中括号内的 105.500 M 表示最大容量,2.500 M 表示当前容量,之后的 0 值是当前使用情况
Old Gen(老年代)
图中括号内的 633.500 M 表示最大容量,633.500 M 表示当前容量,后面的 632.474 M 表示当前使用情况,4 collections 表示垃圾收集次数,463.717 ms 表示垃圾收集花费时间
Metaspace(元空间)
图中括号内的 1.008 G 表示最大容量,9.750 M 表示当前容量,8.973 M 表示当前使用情况
配置jvm参数如下:
-Xms512m-Xmx512m-XX:-UseGCOverheadLimit-XX:MaxPermSize=50m
Jvisualvm查看GC流程
老年代
这些位于老年代的经典对象有:数据库连接池、静态变量有很多,只要程序一直运行,一直有指针指向他,他就是属于老不死的对象
测试查看GC过程
这个字节数组占用的内存是100KB,也就是这个对象一旦new出来,至少占内存空间是大于100KB的
下面代码不断创建对象,放到list中,这个程序一直执行,会产生大量新的对象,同时是被list指向的,是有用的,是不会被minorGC回收掉的,程序不断执行,最终将会导致内存溢出
使用jvisualvm(jdk自带的命令)监控,cmd窗口直接执行jvisualvm
命令,将启动该程序,Jvisualvm会自动寻找本机的所有java进程
启动刚才的程序heapTest
新new出来的对象位于eden区域,所以eden区域一直在增长,一开始是0的,随着程序的运行,慢慢的增长,然后降到最低然后又增长
增长到峰值的时候,伊甸园区满了,就会马上做一次GC,就会在GC时间图上打印一条峰值标识,然后就会马上把伊甸园区的内存释放掉,这时候伊甸园区又回到初始位置
同时把一部分有用的对象挪移到survivor0区域,当survivor0区域满了以后,又会进行一次GC,清理无效对象,剩余有效对象一次全部挪移到survivor1区域,然后反复,可以看到是交叉的
可以看到old区是一会平稳然后突然内存占用上一个台阶,继续平稳,
这部分平稳的区域正好是survivor区经历了15次minor GC,他才可能突然把一堆对象加到old区
元空间即方法区的内存在程序运行的时候是不动的,但是在程序刚开始运行,加载程序的时候,他的内存是一下增长到最高点的,因为在加载类
Old区放满以后会出现什么事情?
答案:程序已经奔溃了,oom:heap space
原因:当old区满以后,底层会触发Full GC,将会对老年代的垃圾进行收集,但是当他收集的时候发现,老年代里面的对象都是有用的,那么GC不会释放任何东西,这样,再往老年代放东西,就会出现空间不够用的情况,即OOM
虚拟机调优初步
一般用的垃圾收集器是G1收集器,每秒几十万并发的系统会频繁发生Full GC
Java虚拟机调优的目的是什么?
Full gc是一个非常慢的过程,java虚拟机在执行full GC的时候,很多情况下会出现
Stop the world,即停掉我们应用程序(应用线程)的执行,即会让我们应用程序卡住,影响我们程序的执行
因此,java虚拟机调优的目的是为了减少Full GC的次数,出现的越少越好
同时,减少一次Full GC的时间,因为full GC的时间越长,stop the world的时间就越长,应用程序卡死的时间就越长
怎么调优?
通过观察他的调优日志
如果为idea,通过如下方式配置打印GC日志
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:./gc.log
Java HotSpot(TM) 64-Bit Server VM (25.171-b11) for windows-amd64 JRE (1.8.0_171-b11), built on Mar 28 2018 16:06:12 by "java_re" with MS VC++ 10.0 (VS2010)
Memory: 4k page, physical 8263504k(2346828k free), swap 16652112k(6491288k free)
CommandLine flags: -XX:InitialHeapSize=132216064 -XX:MaxHeapSize=2115457024 -XX:+PrintGC -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
2019-10-15T10:27:29.145+0800: 14.641: [GC (Allocation Failure) [PSYoungGen: 33211K->5116K(38400K)] 33211K->28718K(125952K), 0.0187916 secs] [Times: user=0.02 sys=0.05, real=0.02 secs]
2019-10-15T10:27:45.962+0800: 31.456: [GC (Allocation Failure) [PSYoungGen: 38339K->5084K(38400K)] 61941K->61199K(125952K), 0.0184338 secs] [Times: user=0.00 sys=0.02, real=0.02 secs]
2019-10-15T10:27:45.979+0800: 31.475: [Full GC (Ergonomics) [PSYoungGen: 5084K->0K(38400K)] [ParOldGen: 56115K->60903K(129024K)] 61199K->60903K(167424K), [Metaspace: 3964K->3964K(1056768K)], 0.0167096 secs] [Times: user=0.03 sys=0.00, real=0.02 secs]
2019-10-15T10:28:02.924+0800: 48.419: [GC (Allocation Failure) [PSYoungGen: 33189K->5028K(38400K)] 94093K->93836K(167424K), 0.0237348 secs] [Times: user=0.02 sys=0.11, real=0.02 secs]
2019-10-15T10:28:20.109+0800: 65.604: [GC (Allocation Failure) [PSYoungGen: 38283K->5096K(38400K)] 127091K->127017K(167424K), 0.0119623 secs] [Times: user=0.03 sys=0.02, real=0.01 secs]
2019-10-15T10:28:20.121+0800: 65.616: [Full GC (Ergonomics) [PSYoungGen: 5096K->0K(38400K)] [ParOldGen: 121920K->126915K(196096K)] 127017K->126915K(234496K), [Metaspace: 3964K->3964K(1056768K)], 0.0333172 secs] [Times: user=0.06 sys=0.00, real=0.03 secs]
2019-10-15T10:28:37.102+0800: 82.597: [GC (Allocation Failure) [PSYoungGen: 33260K->5028K(37888K)] 160175K->160248K(233984K), 0.0248040 secs] [Times: user=0.03 sys=0.03, real=0.03 secs]
2019-10-15T10:28:53.840+0800: 99.335: [GC (Allocation Failure) [PSYoungGen: 37777K->37733K(72192K)] 192997K->192953K(268288K), 0.0377579 secs] [Times: user=0.01 sys=0.01, real=0.04 secs]
2019-10-15T10:29:06.706+0800: 112.201: [GC (Allocation Failure) [PSYoungGen: 63333K->53736K(78848K)] 218553K->218157K(274944K), 0.0216211 secs] [Times: user=0.08 sys=0.05, real=0.02 secs]
2019-10-15T10:29:06.727+0800: 112.223: [Full GC (Ergonomics) [PSYoungGen: 53736K->22503K(78848K)] [ParOldGen: 164421K->195543K(261120K)] 218157K->218047K(339968K), [Metaspace: 3964K->3964K(1056768K)], 0.0354184 secs] [Times: user=0.05 sys=0.02, real=0.04 secs]
2019-10-15T10:29:19.435+0800: 124.930: [GC (Allocation Failure) [PSYoungGen: 47505K->47535K(86016K)] 243049K->243079K(347136K), 0.0192741 secs] [Times: user=0.05 sys=0.00, real=0.02 secs]
2019-10-15T10:29:29.547+0800: 135.041: [GC (Allocation Failure) [PSYoungGen: 67433K->50535K(91136K)] 262976K->262882K(352256K), 0.0232305 secs] [Times: user=0.05 sys=0.03, real=0.02 secs]
2019-10-15T10:29:39.623+0800: 145.118: [GC (Allocation Failure) [PSYoungGen: 70435K->39750K(93696K)] 282781K->282733K(354816K), 0.0192353 secs] [Times: user=0.05 sys=0.00, real=0.02 secs]
2019-10-15T10:29:39.642+0800: 145.137: [Full GC (Ergonomics) [PSYoungGen: 39750K->21803K(93696K)] [ParOldGen: 242983K->260769K(325632K)] 282733K->282572K(419328K), [Metaspace: 3964K->3964K(1056768K)], 0.0280720 secs] [Times: user=0.06 sys=0.00, real=0.03 secs]
2019-10-15T10:29:49.799+0800: 155.294: [GC (Allocation Failure) [PSYoungGen: 41703K->19867K(39936K)] 302472K->302440K(365568K), 0.0166059 secs] [Times: user=0.03 sys=0.02, real=0.02 secs]
2019-10-15T10:30:00.007+0800: 165.502: [GC (Allocation Failure) [PSYoungGen: 39765K->19867K(87040K)] 322337K->322267K(412672K), 0.0201685 secs] [Times: user=0.00 sys=0.03, real=0.02 secs]
2019-10-15T10:30:00.027+0800: 165.522: [Full GC (Ergonomics) [PSYoungGen: 19867K->0K(87040K)] [ParOldGen: 302400K->322185K(385024K)] 322267K->322185K(472064K), [Metaspace: 3964K->3964K(1056768K)], 0.0175613 secs] [Times: user=0.03 sys=0.03, real=0.02 secs]
HeapPSYoungGen total 87040K, used 6995K [0x00000000d5f80000, 0x00000000dfb00000, 0x0000000100000000)eden space 19968K, 35% used [0x00000000d5f80000,0x00000000d6654c80,0x00000000d7300000)from space 67072K, 0% used [0x00000000db980000,0x00000000db980000,0x00000000dfb00000)to space 69632K, 0% used [0x00000000d7300000,0x00000000d7300000,0x00000000db700000)ParOldGen total 385024K, used 322185K [0x0000000081e00000, 0x0000000099600000, 0x00000000d5f80000)object space 385024K, 83% used [0x0000000081e00000,0x00000000958a2570,0x0000000099600000)Metaspace used 3970K, capacity 4628K, committed 4864K, reserved 1056768Kclass space used 435K, capacity 464K, committed 512K, reserved 1048576K
底层没有做GC的时候,任何日志是没有的,只有当底层做了GC才会有这个日志,通过这个日志就可以知道我们的应用程序执行GC的频率以及为什么会去做GC?
可以看到我们的heaptest测试的时候频繁发生FullGC,因为list添加的对象都是有用的对象,old区满就会出现Full GC
一般不用管minor GC,因为速度很快,主要侧重点在于Full GC
https://www.jianshu.com/p/73563cae3bde
https://blog.csdn.net/Woo_home/article/details/107247525
https://blog.csdn.net/Renren151/article/details/126454097
相关文章:
【JVM】JVisualVM的介绍、使用和GC过程
VisualVM介绍 VisualVM 是Netbeans的profile子项目,已在JDK6.0 update 7 中自带,能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几…...
个人在家如何获取World Scientific文献的经验分享
今天有位同学求助一篇World Scientific文献,他的学校虽然有这个数据库,但订购的该数据库资源内容有限,这位同学所需的文献不在学校订购范围内所以下载不了。今天小编就分享一个在家就可获取各个数据库文献的方法。本文以这篇求助文献为例&…...
Java 收集常见面试题
set和list的区别?给定一系列字符串,从集合的set和list中查询,如何查询出相关的数据? 在Java中,Set和List都是用于存储对象的集合 Set: 不允许包含重复的元素。 没有顺序(即不保证元素的迭代顺序…...
JS 严格模式和正常模式的区别
严格模式使用"use strict"; 作用: 消除 Javascript 语法的一些不合理、不严谨之处,减少一些怪异行为;消除代码运行的一些不安全之处,保证代码运行的安全;提高编译器效率,增加运行速度;为未来新…...
9种编程语言的对比分析
在当今的软件开发领域,编程语言扮演着至关重要的角色。不同的编程语言各有其特点和适用场景,选择合适的编程语言能够提高开发效率和软件质量。本文将对十种常见的编程语言进行对比分析,帮助读者了解它们的优缺点和适用场景。 Java 特点&…...
模拟14位相机输出Verilog代码
1 代码 `timescale 1ns / 1psmodule simulate_camera_out (input clk,input rest_n,output camera_clk, //像素时钟output [13:0] camera_data, //像素值数据output [19:0] pixel_xy, //此时输出的像素值坐标output reg frame_valid //帧有效信号,1代表帧有效0代表帧无效…...
Linux远程访问及控制
SSH远程管理 SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能。SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令。与早期的 Telent(远程登录)、RSH(Remote Shell,远程执…...
归并排序个人见解
归并排序个人见解 思路实现代码实现题目 思路实现 归并排序属于分治算法,分治算法有三个步骤: 分:将问题划分为多个规模较小的子问题,这些子问题与原始问题相似。治:递归地解决这些子问题。如果子问题足够小…...
软考初级网络管理员__网络单选题
1.观察交换机状态指示灯初步判断交换机故障,交换机运行中指示灯显示红色表示()。 警告 正常 待机 繁忙 2.通常测试网络连通性采用的命令是()。 Netstat Ping Msconfig Cmd 3.一台16端口的交换机可以产生()个冲突域? 1 4 15 16…...
22.2 正则表达式-数据验证、数据变换
1. 数据验证 正则表达可用于验证文本是否满足某种给定的模式。 正则表达式也是一种语言,因此在使用之前必须先对其进行编译,并将编译结果保存在一个Regexp类型的变量里。以下两个函数即返回该变量的指针。 re, err : regexp.Compile("^[a-zA-Z0-…...
示例:WPF中应用DataGrid读取实体DisplayAttribute特性自动自动生成列名
一、目的:通过重写DataGrid的OnAutoGeneratingColumn方法实现根据定义特性自动生成列头信息功能 二、实现 <DataGrid ItemsSource"{local:GetStudents Count50}"/>实体定义如下 public class Student{[DataGridColumn("*")][Display(Na…...
八股文之JVM
目录 1.JVM内存划分 2.JVM类加载过程 3.JVM垃圾回收机制GC 3.1.判断谁是垃圾 3.2.如何释放对应的内存 1.JVM内存划分 在一个Java程序运行起来之后,jvm就会从操作系统中申请一块内存,然后就会将该内存划分成多个部分,用于不同的用途。 …...
给wordpress添加限制游客浏览数量功能
wordpress游客只可以浏览5个内容,其它更多的是的需要注册后才能浏览。以下是使用自定义代码来实现这一功能的基本步骤: 创建一个自定义角色: 使用wp_create_roles函数来创建一个名为“访客”的新角色。 该角色将只具有阅读权限。 限制文章…...
[二分枚举]特殊密码锁
描述 有一种特殊的二进制密码锁,由n个相连的按钮组成(n<30),按钮有凹/凸两种状态,用手按按钮会改变其状态。 然而让人头疼的是,当你按一个按钮时,跟它相邻的两个按钮状态也会反转。当然&am…...
MT1434 找数字
题目 输入一个字符串(包含26个英文字母大小写及 . 空格,不含其他字符),把其中连续的数字作为一个整数,依次存放到一个数组中,输出这些整数的和。 格式 输入格式 输入字符串 输出格式 输出整型 样例1 输入: a12…...
2024年6月四六级考试复盘
一、考试情况 1.1四级考试情况 听力:一开始没有进入状态。总共对了9道。7.1*37.1*314.2*3 8.2 新闻听力:3/7 长对话:3/8 讲座/讲话:3/10 阅读:3.55*7 7.1*8 14.2 * 7 181.05 选词填空:保守估计7/1…...
join和left join性能比较
1、join和left join性能比较(AI生成) 在MySQL中,JOIN和LEFT JOIN的效率并不是绝对的,它们之间的性能差异取决于多种因素,如表的大小、使用的索引、查询的复杂性等。 一般来说: 如果两个表之间的连接条件能…...
Qt正则表达式
需求:对输入的内容进行限制 只能以字母或下划线开始不能以数字开始 不能有中文 字母,数字,下划线混合使用 QRegExp rx("^[A-Za-z_][A-Za-z0-9_]*$");QRegExpValidator validator(rx);QLineEdit edit;edit.setValidator(&va…...
排序-快排算法对数组进行排序
目录 一、问题描述 二、解题思路 1.初始化 2.将右侧小于基准元素移到左边 3.将左侧大于基准元素移到右边 4.重复执行上面的操作 5.对分好的左、右分区再次执行分区操作 6.最终排序结果 三、代码实现 四、刷题链接 一、问题描述 二、解题思路 快排算法实现数组排序&am…...
flink学习-容错机制
checkpoint(检查点) 在flink中最重要的容错机制,就是checkpoint机制,使用checkpoint可以将之前某个时间点的所有的状态进行保存,这个存档就是checkpoint。 检查点的保存 周期性存储保存,间隔时间可以由用…...
InfluxDB技术分享
InfluxDB是一个开源的时间序列数据库,它被设计用来处理高速写入和查询大量的时间序列数据。以下是一份关于“InfluxDB在Java开发中的使用”的三十分钟技术分享内容概要: 1. 引言 (2分钟) 介绍时间序列数据和时间序列数据库的概念。引入InfluxDB的特点和…...
Windows10安装配置Docker客户端和WSL2与Hyper-V虚拟机
一、需求说明 需要在Windows系统中安装配置Docker的客户端,方便直接管理配置docker镜像容器内容。 二、Windows10安装Docker客户端步骤 2.1、下载安装Docker客户端 对于Windows 10以下的用户,推荐使用Docker Toolbox Windows安装文件:http://mirrors.aliyun.com/docker-…...
EIQ-ABC 分析法在配送中心储位分配中的应用
配送中心运作效率的高低主要取决于仓储业务流程的作业效率,在配送作业流程中,储位分配的是否合理性成为影响配送运作效率的重要因素。为实现储位的合理分配,提出通过对订单信息的分析,并应用 EIQ-ABC 分析法,以此实现缩…...
【安装笔记-20240613-Linux-在 OpenWrt 的 LuCI界面支持命令行调试】
安装笔记-系列文章目录 安装笔记-20240613-Linux-在 OpenWrt 的 LuCI界面支持命令行调试 文章目录 安装笔记-系列文章目录安装笔记-20240613-Linux-在 OpenWrt 的 LuCI界面支持命令行调试 前言一、软件介绍名称:ttyd主页官方介绍特点 二、安装步骤测试版本…...
React小记(一)_基础部分
1、项目搭建与结构 2、类组件和函数组件 主要区别:1、函数组件没有生命周期2、函数组件没有this指向3、函数组件没有状态4、函数组件通过hooks实现各种操作5、props在函数的第一个参数接收6、函数体相当于类组件的render函数import React from reactfunction App()…...
40、基于深度学习的线性预测设计(matlab)
1、原理及流程 深度学习的线性预测是一种利用深度神经网络模型进行线性回归预测的方法。其设计原理主要基于神经网络的层次化特性,利用多层感知器(MLP)等模型进行特征学习和非线性变换,从而提高线性预测的准确性。 设计流程如下…...
【初体验 threejs】【学习】【笔记】hello,正方体 3!
前言 为了满足工作需求,我已着手学习 Three.js,并决定详细记录这一学习过程。在此旅程中,如果出现理解偏差或有其他更佳的学习方法,请大家不吝赐教,在评论区给予指正或分享您的宝贵建议,我将不胜感激。 项…...
第04章:IDEA的安装与使用
第04章:随堂复习与企业真题(IDEA安装与使用) 一、随堂复习 1. IDEA的认识 IDEA(集成功能强大、符合人体工程学(设置人性化))Eclipse 2. IDEA的下载、安装、卸载 卸载:使用控制面板进行卸载,…...
[原创][Delphi多线程]使用TMonitor, TEvent和TQueue配合实现TThreadQueue的经典使用案例.
[简介] 常用网名: 猪头三 出生日期: 1981.XX.XX QQ: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delph…...
6.12ctf练习
[西湖论剑 2022]Node Magical Login 源码在这里:GitHub - CTF-Archives/2022-xhlj-web-node_magical_login: A web challenge in 2022 西湖论剑大赛打开 打开环境是个登录框,先进行了扫描和抓包都没有看见什么有价值的东西,看源码 大致连接…...
网站结构优化怎么做/制作网站的软件有哪些
文/ 智能相对论(ID:aixdlun) 作者/ 离离 上周,Lady Gaga外出拍戏,家中的爱犬却在散步途中被歹徒掳走,她聘请的遛狗员也遭受枪击。心急如焚的她在社群网站上悬赏五十万美元,希望找回被歹徒掳走的…...
如何域名解析网站建设/企业seo服务
(1)使用ICU4JString src "AaAアいろはアイウエイウエ";//全角文字→半角文字に変換Transliterator trF2H Transliterator.getInstance("Fullwidth-Halfwidth");System.out.println(src "→★(…...
网站建设198/2023年4月疫情恢复
本文章为《互联网高并发微服务化架构实践》系列课程的第六篇 前五篇为: 微服务化的基石——持续集成 微服务的接入层设计与动静资源隔离 微服务化的数据库设计与读写分离 微服务化之无状态化与容器化 微服务化之缓存的设计 一、服务拆分的前提 说到微服务࿰…...
扬中最近最新事件/网站seo优化技能
为了防止我们的数据泄露,我们往往会对数据进行加密,特别是敏感数据,我们要求的安全性更高。下面将介绍几种常用的加密算法使用。这些算法的加密对象都是基于二进制数据,如果要加密字符串就使用统一编码(如:…...
彩票网站开发有连带/qq空间秒赞秒评网站推广
通过前面的学习,我们了解到一个PHP文件在服务器端的执行过程包括以下两个大的过程:递给php程序需要执行的文件, php程序完成基本的准备工作后启动PHP及Zend引擎, 加载注册的扩展模块。初始化完成后读取脚本文件,Zend引…...
wordpress最受欢迎的主题/刷seo关键词排名软件
MySQL服务器重写器查询重写插件MySQL支持查询重写插件,该插件可以在服务器执行SQL语句之前检查并可能修改服务器收到的SQL语句。请参阅查询重写插件。MySQL发行版包括一个名为的后解析查询重写插件,Rewriter以及用于安装该插件及其相关组件的脚本。这些组…...