首页 文章 精选 留言 我的

精选列表

搜索[系统],共10000篇文章
优秀的个人博客,低调大师

Jvm系列:问君能有几多愁,系统宕机重启流

上回说到《不识Jvm真面目,只缘身在增删查改中》 讲述了一些有关于Jvm,线程,栈的有关技术知识,还有两个关于JVM的面试题: JVM什么情况下会发生栈内存溢出? JVM中一次完整的GC流程是怎样的? GC——垃圾回收完整意味着有多种情况 今天就接着将视频内容介绍完 可达性分析算法——GC Roots 判断对象的存活 在Java, 可作为GC Roots的对象包括: 虚拟机栈(本地变量表)中引用的对象. 方法区: 类静态属性引用的对象; 方法区: 常量引用的对象; JVM中的堆 1.Java堆是垃圾回收器管理的主要区域 2.基于分代的方式 (1)新生代 Eden空间 From Survivor空间 To Survivor空间 (2)老年代 3.Java堆的大小参数设置 -Xmx 堆区内存可被分配的最大上限 -Xms 堆区内存初始内存分配的大小 新生代为什么分三个区? 新生代垃圾回收算法——复制算法 该算法的核心是将可用内存按容量划分为大小相等的两块, 每次只用其中一块, 当这一块的内存用完, 就将还存活的对象复制到另外一块上面, 然后把已使用过的内存空间一次清理掉. 优点 不必考虑内存碎片问题。 效率高。 缺点 可用容量减少为原来的一半,太浪费了。 最优设置 90%的对象都是朝生夕死的,所以使用10%的空间用作交换区,因为交换区必须有等量的两个,所以采用复制算法的新生代中的三个区采用8:1:1的默认分配比例。 新生代对象的分配和回收 对象分配 基本上新的对象优先在Eden区分配。 当Eden区没有足够空间时,会发起一次Minor GC。 Minor GC回收新生代采用复制回收算法的改进版本 From和To的两个交换区,这两个区只有一个区有数据 采用8:1:1的默认分配比例 (参数配置:-XX:SurvivorRatio )Eden区与Survivor区的大小比值。默认是8 思考:如果new对象过大? 老年代对象的分配和回收 老年代的对象一般情况下来自新生代 (1)长期存活对象进入老年代 年龄阈(yu)值:每个对象定义了年龄(Age)计数器, 经过一次Minor GC(在交换区)后年龄加1。 对象年龄达到15次后将会晋升到老年代,老年代空间不够时进行Full GC。 参数(-XX:MaxTenuringThreshold, 默认15)。 (2)大对象直接进入老年代 超过Eden剩余空间 超过一个参数值(-XX:PretenureSizeThreshold =XX, 无默认值) (3)对象提前晋升(组团) 动态年龄判定:如果在Survivor空间中相同年龄所有对象大小的总和大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代, 而无须等到晋升年龄. JVM中一次完整的GC流程是怎样的? 从上两节总结出的一个面试题 对象的正常流程 Eden -> Survivor区 -> 老年代 新生代 Minor GC 老年代 Full GC 总结 内存区域不够用了,就会引发GC 作为架构师该怎么做:Minor GC避免不了,Full GC尽量避免 处理方式:保存堆栈快照日志、分析内存泄露、调整内存设置控制垃圾回收频率,选择适合的垃圾回收器 这篇关于jvm视频的简述就到这里结束了,当然仅仅看这里的图文,有些人可能摸不着头脑,我这边为大家准备了完整的视频。有需要的朋友可以关注我一下,欢迎加入我的合作群:805685193 即可获取原视频。 还有一些Java架构视频讲解,需要获取Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术视频教程资料,架构思维导图,和BATJ面试题及答案的,都是免费分享的。 关注我,欢迎加入我的合作群:805685193即可获取以上相关视频。 另外,如果想提升自己的技术,这一点是远远不够的。我这里还是把之前那位大佬分享给我的Java架构思维路线知识点分享给大家。 1、高性能架构 性能优化如何理解 JVM调优 JAVA程序性能优化 Tomcat Mysql 2、开源框架解析 1.spring概述 2.Spring 容器 3.Spring AOP 4.Spring MVC 5.Spring 5新特性 6.Mybatis 3、微服务架构 SpringBoot SpringCloud Docker虚拟化技术 Dubbo应用及源码解读 4、架构筑基 分布式环境指挥官Zookeeper 分布式消息通讯 异步与MQ 分布式缓存 NoSql 数据存储 高并发分流技术Nginx 分布式文件存储fastdfs 5、团队协作开发 Git Maven Jenkins Sonar 6、B2C商城项目实战 7、设计模式 如果需要以上高清的技术图的话可以关注一下我,欢迎加入我的合作群:805685193 即可获取,以上知识点这边都有相应的视频讲解,同样可以免费获取。 需要获取Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术视频教程资料,架构思维导图,和BATJ面试题及答案的,都是免费分享的。 关注我,欢迎加入我的合作群:805685193即可获取以上相关视频。

优秀的个人博客,低调大师

Hadoop文件系统元数据管理机制

edits log 默认是 64MB,当写满的时候或者到一定周期的时候,Namanode就会进行 CheckPoint。Checkpoint是一个内部事件,这个事件激活以后会触发数据库写进程(DBWR)将数据缓冲(DATABUFFER CACHE)中的脏数据块写出到数据文件中。 这里仅仅是以一份副本来描述,实际上默认是切片后每一个切片的数据块都有三份副本,保存在不同的Datanode中,假设有多个不同的机架,每个机架有多台主机,意味着有多个机架上面的Datanode,每一台主机作为一个Datanode,数据块的副本保存顺序是: 1、先在本机架上面找寻最近的一台主机保存第一份副本; 2、然后到其他机架上面随机选择一台主机保存第二份副本; 3、最后再在本机架上面除第一份副本的主机外随机选择另一台主机保存第三份副本。 若是Namenode宕机了,还能否恢复数据?重启集群之后还能提供服务么? 可以恢复数据,通过FSimage恢复数据;Namenode宕机了提供不了查询数据和保存数据的功能,因此不能提供服务。 可以使用 多个Namenode副本,副本namenode与namenode的数据保持一致,这里是HA高可用机制,一个namenode宕机了,由另一个namenode顶替继续提供服务。

优秀的个人博客,低调大师

智能污水处理系统的最佳实践

作者:阿里云MVP 王俊杰 一、项目介绍 1.1 目前现状及存在问题 近年来,我国污水处理行业逐渐进入迅速发展的阶段,中国城市污水处理无论在数量还是质量上都得到了迅速的发展。现如今大部分的污水处理厂都处于自动化、人工化、半自动化等生产模式,很多在运行管理模式上仍存在很多弊端。 由于污水处理企业下属厂区分布零散,很多生产环节需要依靠人工来运营维护,无法远程对各水厂自动化设备进行管理,需要相关人员跑场操控,人工巡视成本高,工作效率低。同时污水处理厂相关的运行数据统计源头不一,导致多头统计,不仅造成资源浪费,相关管理人员也无法清晰掌控各厂区的水质、产量、能耗、设备维修等数据。 另外,污水处理过程中药品添加的剂量,以及设备启停的管控,都是依靠人工经验操作,缺乏科学的指导,很大程度上造成药品、电力能耗的资源的浪费,不仅增加污水处理厂的运行管理成本,还

优秀的个人博客,低调大师

Linux系统Docker配置阿里云镜像加速器

安装/升级Docker客户端 推荐安装1.10.0以上版本的Docker客户端,参考文档 docker-ce 配置镜像加速器 针对Docker客户端版本大于 1.10.0 的用户 您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器 mkdir -p /etc/docker tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://v2ltjwbg.mirror.aliyuncs.com"] } EOF systemctl daemon-reload systemctl restart docker

优秀的个人博客,低调大师

swift4.1 系统学习十三 结构体(一)

/* 结构体 大部分语言中都会有结构体。swift中的结构体属于四大基本类型(函数、枚举、结构体、类)之一,他属于值类型。 标准库中的很多类型都是结构体类型,像Int、Float、String、Array。 swift中的结构体还有很多灵活的语法特性: 可定义存储式实例与类型属性; 可定义计算式实例与类型属性; 可使用属性观察者; 可定义实例与类型方法; 可定义初始化器; 可定义数组下标; 可对结构体进行扩展; 可遵循协议。 */ // 1. 结构体基本语法 do { struct myStruct { /// 属性 let name = "小蓝" let age = 10 var nationality: String /// 初始化器 init() { nationality = "美国" } /// 实例方法 func study() { print("好好学习,天天向上") } } /// 创建结构体的实例,访问其属性以及实例方法 var xiaoming = myStruct() print("\(xiaoming.name), \(xiaoming.age), \(xiaoming.nationality)") xiaoming.study() xiaoming.nationality = "新加坡" print("\(xiaoming.name)修改了国籍,去了\(xiaoming.nationality)") } // 2. 存储式实例属性 /* 存储式实例属性是结构体与类类型中最简单的属性形式。我们直接在这些类型中使用var或者let来声明 一个变量或者常量,另外也可以直接对它们进行初始化,那么这些声明在类型中的对象就成为该类型的存储式 实例属性。 */ do { print("\n") struct Test { /// 存储式实例属性 let year = 2018 var language = "汉语" var array = [1, 2, 3, 4] let tuple = (1.0, "a", true) let null: Void = () } var test = Test() test.language += "、英语" test.array += [4, 5] var test2 = test test2.language = "西班牙语" test2.array.removeLast() print("test = \(test)") print("test2 = \(test2)") // 小结:由此可以看出,struct是值类型。 } // 3. 惰性存储式属性(懒加载) /* 当一个对象实例被创建的时候,其所有的存储式实例属性都会完成初始化。不过,有时候,我们会将一些 耗费资源的属性声明成惰性存储式属性,当我们使用的时候才会去创建它。 惰性存储属性在声明的时候在前面加上 lazy 关键字。并且只能用var来声明,不能用let,这个就不用解释了。 */ do { print("\n") func fetchData() -> Int { print("data fetched") return 100 } struct Test { // 声明一个惰性存储式实例属性prop, 当它被第一次访问的时候才会调用fetchData函数 // 对它进行初始化。 lazy var prop = fetchData() } var test = Test() print("test被创建了") // 第一次访问 test.prop += 10 // 第二次访问 print("test.prop = \(test.prop)") } // 4. 计算式属性 /* swift 是一门主张简洁、直观的编程语言。如果一些属性可以不通过用户的输入获得,而是通过已有的属性计算 获得,我们就可以使用计算式属性。 */ do { print("\n") /// 圆结构体 struct Circle { /// 半径 var radius = 0.0 /// 计算属性:直径 var diameter: Double { get { return radius * 2.0 } set { radius = newValue / 2.0 } } /// 计算属性:周长 var perimeter: Double { get { return Double.pi * self.diameter } set { diameter = newValue / Double.pi } } /// 计算属性: 面积 var area: Double { get { return Double.pi * radius * radius } set { radius = sqrt(newValue / Double.pi) } } } var circle = Circle() circle.radius = 3.0 print("直径: \(circle.diameter), 周长: \(circle.perimeter), 面积: \(circle.area)") /* 注意: 计算式属性的setter方法可以缺省,但是getter方法不可以缺省。如果setter方法省略了,那么这个 计算式属性就变成了只读属性。 */ /// 再举一个”矩形“的例子 struct Rect { var width = 0.0 var height = 0.0 /// 对角线 var diagonal: Double { get { return sqrt(width * width + height * height) } } /// 周长 /// 如果只有getter方法,get {} 关键字可以省略 var perimeter:Double { return 2 * (width + height) } /// 面积 var area: Double { return width * height } } var rect = Rect() rect.width = 2.0 rect.height = 3.0 print("对角线: \(rect.diagonal), 周长: \(rect.perimeter), 面积: \(rect.area)") } // 5. 属性观察者 /* 有时候为了逻辑上的简化需要,我们可能需要获取某个存储属性的值当前被修改了,从而可以做一些输入值的过滤 或者其他操作。swift中使用”属性观察者“这一语法特性,从而提供了针对存储式属性值的变化的响应。 关键字: willSet:指定属性修改前,会调用它的willSet方法; didSet:指定属性修改后,会调用didSet。 */ do { print("\n") struct Test { /// 观察number属性的变化 var number = 0 { // 注意:隐式参数newValue willSet { print("current value = \(number)") print("new value = \(newValue)") } // 注意:隐式参数oldValue didSet { print("original value = \(oldValue)") print("modified value = \(number)") } } } var test = Test() test.number = 10 test.number = 20 } // 6.类型属性 /* 之前介绍的都是实例属性,实例属性的特点就是当前枚举、结构体、类等类型的对象实例各自持有各自的 实例属性,它们占据着对象实例自身的存储空间。 类型属性:类型属性就属于类型自己,与用该类型所创建的实例无关。 声明方法很简单: 在前面加上 static 关键字就可以了。 */ do { print("\n") struct Test { /// 类型属性 static var ti = 10 static var cp: Int { get { print("get ti = \(ti)") return ti - 10 } set { print("setter value = \(newValue)") ti = newValue + 10 } } static var str = "Hello" { willSet { print("current \(str)") print("new: \(newValue)") } didSet { print("old: \(oldValue)") print("修改后: \(str)") } } static let si = 1.5 // 注意,这两个变量可以重名,不会报错。 var si = -1 } var test = Test() test.si += 2 print("实例属性 si = \(test.si)") print("类型属性 si = \(Test.si)") Test.ti += 100 print("类型属性 ti = \(Test.ti)") Test.cp += 5 Test.str += ",小雨" func foo() { struct Test { static var ti = -10 static let si = -1.5 } /// 这里的调用的Test是foo中的Test print("foo ti = \(Test.ti)") print("foo si = \(Test.si)") } foo() }

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册