当前位置: 首页 > news >正文

02JVM_垃圾回收GC

二、垃圾回收GC

里面存放着java的所有对象实例,当对象为“死去”,也就是不再使用的对象,就会进行垃圾回收GC

1.如何判断对象可以回收

1.1引用计数器

介绍

在对象中添加一个引用计数器,当一个对象被其他变量引用时这个对象的引用计数器加1。当某个变量不再引用这个对象时引用计数器减1。当这个引用计数变为0时,这个对象就会被垃圾回收。

优点

判定效率很高

缺点

不完全准确,当两个对象相互引用就判断失效了。当A引用B对象,B引用A对象,然后A和B不再被其他变量引用,垃圾不会回收,出现了垃圾回收失效。

1.2可达性分析算法(Java)

介绍

①要确定一个根对象GC Roots(肯定不会被垃圾回收的对象)作为起始节点,当垃圾回收前会对堆对象进行扫描,判断这些对象是否被根对象引用,如果没有被引用那么这个对象就可以垃圾回收。

②java虚拟机是通过可达性分析判断存活对象

哪些对象可以作为GC Root?

①虚拟机栈中引用的对象

各个线程调用的方法(参数,局部变量)

②本地方法栈中native方法引用的对象

③方法区中类静态属性引用的对象

Java类的引用类型静态变量

④方法区中常量引用的对象

字符串常量池StringTable里的引用

⑤所有被同步锁synchronized持有的对象

⑥java虚拟机内部的引用,核心类

1.3四种引用

1.强引用-不回收

介绍

程序代码中普遍存在的引用赋值“Object obj = new Object()”这种引用关系。

特点

不回收,只要沿着GC Root引用链能够找到这个对象,这个对象就不会被垃圾回收。

2.软引用-内存不足回收

介绍

软引用(间接引用)是一些还有用但非必需的对象,当被软引用关联的对象,系统发生内存溢出钱,会把这些对象列进回收范围进行二次回收。如果这次回收没有足够的内存,会抛出内存溢出异常

特点

当垃圾回收后,此时内存仍不够,软引用关联的对象会进行垃圾回收(内存不够才回收)

3.弱引用-发现就回收

介绍

弱引用是一些还有用但非必需的对象,生存到下一次垃圾回收为止。在系统进行垃圾回收时,发现弱引用,不管系统堆空间是否充足,都会回收软引用关联的对象。

特点

当发生垃圾回收时,弱引用关联的对象都会被回收。(内存不管够不够都回收)

4.虚引用-对象回收跟踪

介绍

当虚引用对象创建时会关联一个引用队列。虚引用在创建时必须提供引用队列作为参数。当垃圾回收准备回收一个对象时,如果发现他是虚引用,在垃圾回收后把这个虚引用加入引用队列,通知应用程序对象的回收情况。

5.终结器引用-引用队列配合

介绍

用于实现对象的finalize()方法。当终结器对象创建时会关联一个引用队列。当准备回收一个对象时,发现是终结器引用,会把终结器引用对象放入引用队列(此时对象没回收)。由Finalizer线程调用该对象的finalize()方法,第二次垃圾回收就会回收此对象。

2.垃圾回收算法

2.1标记清除

什么时候垃圾回收

扫描整个堆对象的过程中,如果发现对象被GC Root引用了,需要保留。如果这个对象没有被GC Root引用,就要进行垃圾回收。

标记清除算法的两个阶段

①把没有引用的对象标记为垃圾。

②把垃圾对象占用的空间释放,清除

③释放不是空间清0,而是把起始地址记录下来,然后将来把创建的新对象存储这个位置

优点

垃圾回收速度快

缺点

产生内存碎片

2.2标记整理

标记整理两个阶段

①把没有引用的对象标记为垃圾

②把可用的对象向前移动,让内存更加紧凑。连续的空间变多。

优点

没有内存碎片

缺点

对象整理过程中需要移动,垃圾回收效率低。

2.3复制

复制两个阶段

①把没有引用的对象标记为垃圾

②把活着的内存分为两块from区和to区。把from区存活的对象复制到to区。然后清空from区,然后交换from和to的位置

优点

没有内存碎片

缺点

占用双倍内存空间

3.分代垃圾回收

介绍

垃圾回收时,JVM结合3种算法协程工作。通过分代的垃圾回收机制,把堆内存划分为2块新生代和老年代,新生代(对象用完丢弃)划分为3个区域:伊甸园,幸存区From,幸存区To。

老年代(对象长时间使用) 不同的区域,算法不同。

 

工作机制

①创建新的对象占用伊甸园的内存空间,当伊甸园内存满时,触发垃圾回收Minor GC。沿着GC Roots引用链去找,如果对象没有被引用,就进行垃圾标记。然后采用复制的算法把伊甸园存活的对象复制到幸存区To中,并且对象寿命加1。然后交换from和to的位置。

 ②当伊甸园内存空间再次溢出时,触发第二次垃圾回收Minor GC。沿着GC Roots根引用链进行扫描伊甸园幸存区。把存活的对象复制到幸存区To中,并且对象寿命加1。然后交换from和to的位置。

 ③幸存区的对象寿命超过了阈值15,对象利用率高。晋升到老年代。(对象长时间使用

 ④当新生代老年代内存要溢出时,触发Full GC垃圾回收。

总结

①对象首先分配在伊甸园区域

②新生代空间不足时,触发Minor gc。伊甸园和from存活的对象,使用复制算法copy到to中。存活的对象年龄加1.交换from和to。

③minor gc会引发stop the world暂停其他用户的线程。垃圾回收结束,用户恢复运行。

④当对象寿命超过阈值时,会晋升到老年代,最大寿命是15

⑤老年代空间不足,触发Minor gc内存仍不足,那么full gc.

相关JVM参数

4.垃圾回收器

4.1串行垃圾回收器

介绍

①单线程垃圾回收器

②堆内存较小,适合个人电脑

③开启串行垃圾回收器 -XX:+UseSerialGC = Serial + SerialOld

Serial工作新生代,复制算法

SerialOld 工作在老年代,标记整理算法

工作流程

当堆内存要溢出时,触发垃圾回收。让其他线程在安全点停止下来,等待垃圾回收线程的结束。

 

4.2吞吐量优先:并行

介绍

①多线程

②堆内存较大,多核cpu支持

③让单位时间内,STW时间最短

工作流程

多核CPU中,有4个线程运行。当堆内存要溢出时,触发了垃圾回收。用户线程在安全点停止。此时的垃圾回收器会开启多个线程(跟CPU核数相关)进行垃圾回收。然后恢复其他线程的运行。

相关参数

-XX:+UseParallelGC ~ -XX:+UseParallelOldGC  开启吞吐量优先垃圾回收器

-XX:+UseAdaptiveSizePolicy  自适应大小策略,新生代

-XX:GCTimeRatio=ratio  调整吞吐量

-XX:MaxGCPauseMillis=ms 最大暂停毫秒数

-XX:ParallelGCThreads=n 运行时线程数

4.3响应时间优先

介绍

①多线程

②堆内存交大,多核cpu支持

③尽可能让单次STW时间变短

相关参数

-XX:+UseConcMarkSweepGC~-XX:+UseParNewGC~SerialOld 开启响应时间优先回收器

-XX:ParallelGCThreads=n~-XX:ConcGCThreads=threads 线程数

-XX:CMSInitiatingOccupancyFraction=percent 何时进行垃圾回收

-XX:+CMSScavengeBeforeRemark 新生代垃圾回收

工作流程

老年代发生内存泄漏,其他线程到达安全点暂停下来,垃圾回收器执行初始标记,用户线程恢复运行。垃圾回收线程进行并发标记,然后进行重新标记工作。垃圾回收线程进行并发清理。

5.G1垃圾回收器

简介

Garbage First

JDK 9默认

适用场景

①同时注重吞吐量和低延迟,默认暂停目标是200ms

②超大堆内存,会将堆划分多个大小相等的Region

③整体上是标记+整理算法,两个区域之间是复制算法。

相关JVM参数

-XX:+UseG1GC 开启G1垃圾回收

-XX:G1HeapRegisonSize=size 设置划分区域的大小

-XX:MaxGCPauseMills=time JVM最大暂停时间的目标值

5.1 G1垃圾回收阶段

1.Young Collection 新生代垃圾收集

①、G1会把堆内存划分成多个相等的区域。每个区域独立作为伊甸园,幸存区,老年代

②、新创建的对象会存储在伊甸园,当伊甸园内存满时会触发新生代垃圾回收机制,会STW。

③、伊甸园存活的对象使用copy算法到幸存区。

④、当幸存区的内存溢出时,触发新生代垃圾回收。幸存区对象存活年龄超过一定时间会晋升到老年代

2. Young Collection+Concurrent Mark新生代垃圾收集+并发标记

①在Young GC时进行GC Root的初始标记

②老年代占用堆空间比例达到阈值时,进行并发标记(不会STW)

-XX:InitiatingHeapOccupancyPercent=percent(默认45%)

3.Mixed Collection混合收集

介绍

会对E、S、O进行全面垃圾回收

①最终标记会STW

②拷贝存活会STW

-XX:MaxGCPauseMillis=ms

E:伊甸园区的存活对象通过复制算法到幸存区中

S:幸存区存活的对象复制到另一个幸存区,符合晋升条件的到老年区

O:老年代区把存活对象复制到另一个老年代区

优先收集垃圾最多的区,目的是达到暂停时间段的目标

5.2 Full GC     

1.SerialGC

①新生代内存不足发生的垃圾收集—minor gc

②老年代内存不足发生的垃圾收集—full gc

2.ParallelGC

①新生代内存不足发生的垃圾收集—minor gc

②老年代内存不足发生的垃圾收集—full gc

3.CMS

①新生代内存不足发生的垃圾收集—minor gc

②老年代内存不足,并发失败后才会full gc。

4.G1

①新生代内存不足发生的垃圾收集—minor gc

②老年代内存不足,老年代内存跟堆内存占比达到45%,触发并发标记和混合收集阶段。回收速度>垃圾产生速度,并发垃圾收集阶段。回收速度<垃圾产生速度,此时是full gc

5.3Young Collection跨代引用

1.新生代回收的跨代引用(老年代引用新生代)

①根对象有部分是来自老年代,老年代存活对象比较多,遍历效率低。所以采用CardTable把老年代区域进行细分成一个个的card。每个card是512k。如果老年代的对象引用了新生代的对象,就会把这个card标记为脏卡。只关注脏卡,减少搜索范围。

 ②脏卡引用了新生代的对象。新生代通过Remembered Set知道对应的脏卡。通过脏卡区域遍历GC Roots

5.4 Remark-重新标记

并发标记阶段的对象处理状态

 

黑色已经处理完成,存活的对象。灰色是处理当中的。白色是尚未处理的垃圾。

在并发标记阶段可能出现B对C引用,接着断开后C成为垃圾,然后A对C引用。此时C被判成垃圾了。

这个时候需要用到remark

Remark:对对象进行进一步检查,当对象引用发生改变时,会给引用提供一个写屏障(将C加入队列),接着进入重新标记阶段,对队列对象进行检查,有强引用的不标记为垃圾。

5.5 JDK8 u20字符串去重

指令

-XX:+UseStringDeduplication

规则

①将所有新分配的字符串放入一个队列

②当新生代回收时,G1并发检查是否有字符串重复

③如果值一样,让他们引用同一个char[]

优缺点

优点:节约大量内存

缺点:多占用CPU时间,新时代回收时间略微增加

跟String.intern()不一样

①String.intern()关注的是字符串对象

②字符串去重关注的是char[]

③JVM内部使用不同的字符串表

5.6 JDK8 u40并发标记类卸载

所有对象都经过并发标记后,知道哪些类不再使用。当一个类加载器所有类不再使用,则卸载它所加载的所有类

-xx:+ClassUnloadingWithConcurrentMark默认启用

5.7 JDK8 u60 回收巨型对象

①一个对象大于region的一半时,成为巨型对象。

②G1不会对巨型对象进行拷贝

③回收时优先考虑

④G1会跟踪老年代所有incoming引用。这样老年代incoming引用为0的巨型对象在新生代垃圾回收处理掉。

5.8 JDK9 并发标记起始时间的调整

①并发标记必须在堆空间占满前完成,否则退化为FullGC

②JDK 9之前需要使用 -XX:InitiatingHeapOccupancyPercent

③JDK 9可以调整:

-XX:InitiatingHeapOccupancyPercent 用来设置初始值

进行数据采样并动态调整

总会添加一个安全的空挡空间

相关文章:

02JVM_垃圾回收GC

二、垃圾回收GC 在堆里面存放着java的所有对象实例&#xff0c;当对象为“死去”&#xff0c;也就是不再使用的对象&#xff0c;就会进行垃圾回收GC 1.如何判断对象可以回收 1.1引用计数器 介绍 在对象中添加一个引用计数器&#xff0c;当一个对象被其他变量引用时这个对象…...

ARM Linux DIY(八)USB 调试

前言 V3s 带有一个 USB 接口&#xff0c;将其设置为 HOST 或 OTG 模式&#xff0c;这样可以用来接入键盘、鼠标等 USB 外设。 USB 简介 USB 有两种设备&#xff1a;HOST 和 USB 功能设备。 在 USB2.0 中又引入了一个新的概念 OTG&#xff0c;即设备角色可以动态切换。 切换方…...

编程小白的自学笔记十四(python办公自动化创建、复制、移动文件和文件夹)

系列文章目录 编程小白的自学笔记十三&#xff08;python办公自动化读写文件&#xff09; 编程小白的自学笔记十二&#xff08;python爬虫入门四Selenium的使用实例二&#xff09; 编程小白的自学笔记十一&#xff08;python爬虫入门三Selenium的使用实例详解&#xff09; …...

MySQL使用Xtrabackup备份到AWS存储桶

1.安装Xtrabackup cd /tmp wget https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.33-28/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.33-28.1.el7.x86_64.rpm yum -y localinstall percona-xtrabackup-80-8.0.33-28.1.el7.x86…...

(高阶)Redis 7 第11讲 BIGKEY 优化篇

面试题 问题答案如何在海量数据中查询某一固定前缀的Keyscan生产环境如何限制 keys */FLUSHDB/FLUSHALL 等危险命令,防止误删误用# 修改配置文件 rename-command keys "" rename-command flushdb "" rename-command flushall ""如何使用MEMORY U…...

一阶差分和二阶差分概念及其举例

一阶差分和二阶差分概念及其举例 目录 一阶差分和二阶差分概念及其举例1、一阶差分1.1 概念1.2 举例 2、二阶差分2.1 概念2.2 举例 1、一阶差分 1.1 概念 一阶差分是指对一个数列中的每个元素&#xff0c;计算其与其前一个元素之差的操作。 1.2 举例 举例来说&#xff0c;对…...

使用自定义注解和SpringAOP捕获Service层异常,并处理自定义异常

目录 一 自定义异常二 自定义注解三 注解切面处理类四 使用 一 自定义异常 /*** 自定义参数为null异常*/ public class NoParamsException extends Exception {//用详细信息指定一个异常public NoParamsException(String message){super(message);}//用指定的详细信息和原因构…...

Kotlin(六) 类

目录 创建类 调用类 类的继承------open 构造函数 创建类 创建类和创建java文件一样&#xff0c;选择需要创建的目录New→Kotlin File/Class Kotlin中也是使用class关键字来声明一个类的&#xff0c;这一点和Java一致。现在我们可以在这个类中加入字段和函数来丰富它的功…...

蓝桥杯官网练习题(灌溉)

题目描述 小蓝负责花园的灌溉工作。 花园可以看成一个 n 行 m 列的方格图形。中间有一部分位置上安装有出水管。 小蓝可以控制一个按钮同时打开所有的出水管&#xff0c;打开时&#xff0c;有出水管的位置可以被认为已经灌溉好。 每经过一分钟&#xff0c;水就会向四面扩展…...

数据结构:树的概念和结构

文章目录 1. 树的概念2. 树的结构3. 树的相关概念4. 树的表示孩子表示法双亲表示法孩子兄弟表示法 5. 树在实际中的应用5. 树在实际中的应用 1. 树的概念 树是一种非线性的数据结构,它是由 n (n > 0)个有限结点组成一个具有层次关系的. 把它叫做树是因为它看起来像一棵倒挂的…...

【GIS】栅格转面报错:ERROR 000864输入栅格: 输入不在定义的属性域内。 ERROR 000863: 无效的 GP 数据类型

问题: 栅格转面(矢量)时,ArcGIS窗口显示:ERROR 000864输入栅格: 输入不在定义的属性域内。 ERROR 000863: 无效的 GP 数据类型. 原因: 栅格转面时输入的栅格数据集的字段必须是整型. 解决办法: 使用Spatial Analyst中的转为整型工具,将栅格数据转为整型后再进行栅格转面的操作…...

32 WEB漏洞-文件操作之文件下载读取全解

目录 介绍利用获取数据库配置文件文件名&#xff0c;参数值&#xff0c;目录符号 涉及案例:Pikachu-文件下载测试-参数Zdns-文件下载真实测试-功能点小米路由器-文件读取真实测试-漏洞RoarCTF2019-文件读取真题复现-比赛百度杯2017二月-Zone真题复现-比赛拓展 下载和读取都差不…...

Linux之history、tab、alias、命令执行顺序、管道符以及exit

目录 Linux之history、tab、alias、命令执行顺序、管道符以及exit history历史命令 格式 参数 修改默认记录历史命令条数 案例 案例1 --- 显示history历史记录中出现次数最高的top10 案例2 --- 增加history显示的时间信息 命令与文件名补全 --- tab 命令别名 格式 案…...

vcomp100.dll丢失怎样修复?5个靠谱的修复方法分享

VCOMP100.DLL 是由微软打造的动态链接库&#xff0c;它对于一些图形密集型应用&#xff0c;例如Photoshop&#xff0c;以及多款知名游戏如巫师3的运行至关重要。 如果操作系统在启动应用程序时无法找到此vcomp100.dll&#xff0c;则会出现vcomp100.dll丢失或未找到错误。 如果D…...

Vue3自定义指令(directive)

文章目录 前言一、Vue3指令钩子函数二、自定义指令的两种方式1.局部使用例子1&#xff1a;鉴权例子2&#xff1a;拖拽 2.全局使用例子1&#xff1a;监听宽高指令例子2&#xff1a;监听是否出现在视口 总结 前言 此文章主要讲了vue3中自定义指令的使用&#xff0c;以及一些WebA…...

大数据课程L9——网站流量项目的实时业务处理代码

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握网站流量项目的SparkStreaming代码; ⚪ 掌握网站流量项目的HBaseUtil代码; ⚪ 掌握网站流量项目的MysqlUtil代码; ⚪ 掌握网站流量项目的LogBean代码; ⚪ 掌握网站流量项目的To…...

【2023最新B站评论爬虫】用python爬取上千条哔哩哔哩评论

文章目录 一、爬取目标二、展示爬取结果三、爬虫代码四、同步视频五、附完整源码 您好&#xff0c;我是 马哥python说&#xff0c;一枚10年程序猿。 一、爬取目标 之前&#xff0c;我分享过一些B站的爬虫&#xff1a; 【Python爬虫案例】用Python爬取李子柒B站视频数据 【Pyt…...

mysql设置max_sp_recursion_depth,sql_mode

mysql 中设置 @@max_sp_recursion_depth select @@max_sp_recursion_depth; 今天在mysql 写存储过程递归调用时,发现老是报错(recovery limit 0(as set by the max_sp_recursion_depth));后来百度下发现 max_sp_recursion_depth设置不对; 这个修改涉及到全局和session级修…...

论文阅读:SERE: Exploring Feature Self-relation for Self-supervised Transformer

Related Work Self-supervised 学习目的是在无人工标注的情况下通过自定制的任务&#xff08;hand-crafted pretext tasks&#xff09;学习丰富的表示。 Abstract 使用自监督学习为卷积网络&#xff08;CNN&#xff09;学习表示已经被验证对视觉任务有效。作为CNN的一种替代…...

遥感数据与作物模型同化应用:PROSAIL模型、DSSAT模型、参数敏感性分析、数据同化算法、模型耦合、精度验证等主要环节

查看原文>>>遥感数据与作物模型同化实践技术应用 基于过程的作物生长模拟模型DSSAT是现代农业系统研究的有力工具&#xff0c;可以定量描述作物生长发育和产量形成过程及其与气候因子、土壤环境、品种类型和技术措施之间的关系&#xff0c;为不同条件下作物生长发育及…...

Navicat15工具连接PostgreSQL15失败

1.错误现象及原因 错误现象&#xff1a; 错误原因&#xff1a; postgresql 15版本中 pg_database 系统表把 datlastsysoid 列删除了&#xff0c;所以造成了此错误。 2.解决方法 &#xff08;1&#xff09;将Navicat工具更新到官网最新版本。 &#xff08;2&#xff09;更换…...

开源AI家庭自动化助手-手机控制家庭智能家居服务

产品简介 将本地控制和隐私放在首位的开源家庭自动化。由全球开发者和 DIY 爱好者社区提供支持。非常适合在 Raspberry Pi 或本地服务器上运行。 功能介绍 1. 控制面板在控制面板&#xff0c;你可以查看家庭的灯光&#xff0c;温度&#xff0c;门铃&#xff0c;音响&#xf…...

解决CSS定位错乱/疑难杂症的终极绝招==》从样式污染开始排查

我们接手他人或者第三方项目的时候&#xff0c;有时候会遇到一些莫名其妙的问题&#xff1a; 明明自己的样式写的没有问题&#xff0c;但是网页上却显示的乱七八糟的&#xff0c;或者效果完全出不来。 案例如下&#xff1a; 这里只用了很典型的flex弹性布局&#xff0c;并没有…...

【笔记】《C++性能优化指南》Ch3 测量性能

【笔记】《C性能优化指南》Ch3 测量性能 1. 优化思想1.1 专业的性能测试流程1.2 优化准则1.2.1 90/10规则1.2.2 Amdahl定律 2. 进行实验2.1 记实验笔记2.2 测量基准性能并设定目标2.3 你只能改善你能够测量的 3. 分析程序执行3.1 实现分析器的方式3.2 分析器的优缺点 4. 测量长…...

2023大数据面试总结

文章目录 Flink&#xff08;SQL相关后面专题补充&#xff09;1. 把状态后端从FileSystem改为RocksDB后&#xff0c;Flink任务状态存储会发生哪些变化&#xff1f;2. Flink SQL API State TTL 的过期机制是 onCreateAndUpdate 还是 onReadAndWrite&#xff1f;3. watermark 到底…...

udev自动创建设备节点的机制

流程框图如下 自动创建 1 内核检测到设备插入后&#xff0c;会发送一个uevent事件到内核中&#xff0c;并提供有关硬件设备的信息。 2 udevd守护程序收到uevent事件后&#xff0c;创建一个设备类&#xff0c;&#xff08;向上提交目录信息&#xff09;&#xff0c;会在内核中…...

访问局域网内共享文件时报错0x80070043,找不到网络名

我是菜鸡 此篇只为分享一个我遇到的很简单的但是排查了好久的小问题。 我的网络环境是在校园网内&#xff0c; 自己的办公电脑设置了固定IP&#xff1a;10.11.128.236&#xff0c;同事电脑IP为&#xff1a;10.11.128.255 本人需要访问同事在局域网内分享的文件&#xff0c;…...

Java定时器

对于定时器的设定&#xff0c;想必大家在不少网站或者文章中见到吧&#xff0c;但是所谓的定时器如何去用Java代码来bianx呢&#xff1f;&#xff1f;感兴趣的老铁&#xff0c;可以看一下笔者这篇文章哟~~ 所谓的定时器就是闹钟&#xff01;&#xff01; 设定一个时间&#x…...

科普js加密时出现的错误

当你在使用Babel解析JavaScript代码时&#xff0c;可能会遇到一个错误信息&#xff1a;“Deleting local variable in strict mode”&#xff08;在严格模式下删除本地变量&#xff09;。这个错误信息通常表示你正在尝试删除一个使用let或const关键字声明的变量。在JavaScript的…...

MYSQL优化——B+树讲解

B-/B树看 MySQL索引结构 B-树 B-树,这里的 B 表示 balance( 平衡的意思),B-树是一种多路自平衡的搜索树.它类似普通的平衡二叉树&#xff0c;不同的一点是B-树允许每个节点有更多的子节点。下图是 B-树的简化图. B-树有如下特点: 所有键值分布在整颗树中&#xff1b; 任何一…...

烟台做网站系统/关键词三年级

在使用vxe-table 下拉选时遇到一个问题选中后值不显示(针对这个问题做一下记录)图:选择前选择后值不显示代码如下<解决方法:给下拉选加change事件 在事件触发时使单元格清除激活状态,然后立刻将该单元格设置为激活状态.<js代码selectChange效果:选择前选择后值显示了...

塑料袋销售做哪个网站推广好/代码优化

Hexo 我的博客到目前为止&#xff0c;可以分为3个阶段&#xff1a;博客园->Octopress->Hexo 我并没有经历过经典的WordPress的阶段&#xff0c;考虑到买域名、租VPS的费用&#xff0c;及麻烦程度。 我博客园的CSS经历过两次大修改&#xff0c;我一直寻求一种较为Geek风格…...

wordpress+在线播放/疫情最新资讯

点击上方蓝色字体&#xff0c;选择“设为星标”回复”资源“获取更多资源大数据技术与架构点击右侧关注&#xff0c;大数据开发领域最强公众号&#xff01;大数据真好玩点击右侧关注&#xff0c;大数据真好玩&#xff01;1. JVM crash了下面是一份crash report, 下面是截取了cr…...

番禺网站建设知乎/日本产品和韩国产品哪个好

网上解决办法都是用淘宝镜像&#xff0c;但我先切换了镜像&#xff0c;安装还是慢&#xff0c;最后发现了一个比较快的方案。 打开cmd 先装一个cnpm&#xff0c;指向淘宝npm仓库 npm install -g cnpm --registryhttps://registry.npm.taobao.org再安装vue cli npm install -g…...

网站建设详细方案/大一html网页制作作业简单

上网查了一下&#xff0c;官方貌似没有提供flash builder 4.5的下载&#xff0c;但是既然是基于eclipse的&#xff0c;那么应该能被安装在linux下。 首先&#xff0c;安装eclipse sudo apt-get install eclipse 然后&#xff0c;下载eclipse的flash builder 插件 最后就是安装了…...

河北建基官网/徐州seo顾问

<script type"text/javascript"> //替换字符串 function Replace(str, from, to) { return str.split(from).join(to); } // 日期类型格式成指定的字符串 function FormatDate(date, format) { format Replace(format, "…...