石家庄达内教育
服务热线:400-008-6280
当前位置>石家庄达内教育

石家庄Java培训班

石家庄Java培训班

  • 上课时段:见详情
  • 教学点:1个
  • 开班时间:随到随学
  • 课程价格:请咨询
  • 已关注:963
  • 优惠价格:请咨询
  • 咨询电话: 400-008-6280
授课学校:石家庄达内教育 (点击获取校区地址)

课程介绍

石家庄Java培训机构-地址-电话-北京达内教育

      石家庄Java培训相关资料

  升级Java8可能会踩到的坑

  1 背景

  java8的正式版本已经发布了2年多了,我们都知道java8更加高效,比如更加高效的G1、更加高效的jit、默认开启TieredCompilation更加高效的工作模式以及和“java.lang.OutOfMemoryError: PermGen space” 撒油啦啦 等等高大上的性能优化;当然了,这都不是最主要的:

  主要原因是因为前一段时间线上tomcat很诡异的就突然挂掉了,经查失败log,是命中了一个jvm crash的bug,bug详见:#/view_bug.do?bug_id=8021898,jdk的1.7.0_60后修复了这个问题,正好看到java8那么多高大上的优化后,就准备一步到位直接升级到java8;

  但是理想是美好的,现实是骨感的;我们很荣幸的掉进了坑里了,下面java培训机构主要从spring4.0的坑和新metaspace问题 这2个方面来描述。

  2 spring4.0的问题

  2.1 前言

  上面说了,遇到了jvm的crash的bug,必须要升级jdk的版本;找了套测试环境做了回归,发现没啥问题,非常高兴,准备在线上开搞。

  2.2 现象

  最开始的找了2组流量相对较小的机器,升级后重启服务没有发现异常现象,以为没啥问题了,就准备开始搞一组qps比较高的机器,替换jdk重启之后没啥问题,然后观察了会,发现load在缓慢上升,紧接着服务的接口开始大量的超时,见下图:

【升级Java8可能会踩到的坑】

  2.3 排查过程

  2.3.1 stack排查

  首先,是抓了几个tomcat栈log下来,研究栈发现有大量的lock,见下图:

【升级Java8可能会踩到的坑】

  往下继续找正在运行的那个线程,如下图:

【升级Java8可能会踩到的坑】

  通过上面的现象看到,不管是lock的,还是runnable的,都是卡在的spring的代码栈下,这里就有点奇怪了,spring的版本没有升级啊,先否决了,因为java8针对gc和jit有过相关的,首先来开始排查这2者,继续往下;

  2.3.2 排查gc

  首先排查了gc的问题,发现除了比之前更频繁一点之外,其它没啥区别,也没有触发full gc,基本可以排除。

  2.3.3 jit排查

  java8针对jit有一些默认的优化,所以发现gc没有问题的情况下,首先想到的就是jit的设置问题。

  首先怀疑的是jit的cache的内存大小问题,调大后重启,发现只能延缓一点load升高的时间,没有根本解决问题

  然后是调整jit的默认线程数,之前我们是设置了2个线程,使用默认的3个线程,有一定的效果,抗住了20分钟;然后继续调大4、5,发现反而比之前挂了还要快,重启之后基本上就挂了,也基本可以排除。

  2.3.4 spring排查

  最容易出现问题的方面排查过了,没有发现问题,那就回归栈日志来排查,找不到明显问题,问下Google吧。

  还真有发现:spring官网有人汇报过一个bug,SerializableTypeWrapper从jdk的1.7.0_51这个版本开始出现了性能瓶颈,bug地址详见:

  #/browse/SPR-11335

  我们之前的是用的jdk1.7.0_45这个版本,没有发现这个问题;具体原因在后面来描述。

  2.4 解决方案

  升级spring的版本就可以解决这个问题。

  从4.0.3开始,spring针对jdk8有较大的改善,具体可参见官网说明:#/blog/2014/03/27/spring-framework-4-0-3-released-with-java-8-support-now-production-ready

  2.5 问题分析

  2..5.1 ResolvableType

  首先我们来看下ResolvableType这个类的相关代码,如下图:

【升级Java8可能会踩到的坑】

【升级Java8可能会踩到的坑】

【升级Java8可能会踩到的坑】

  可以看到1018-1022行之间,先是从cache中取,如果没有取到,就会往cache中put一个,通过上面的栈可以知道,equals比较耗时(会通过SerializableTypeWrapper生成相关代理),这里get和put之间没有任何拦截措施,get不到直接put,put内部是有lock的,就是我们看到的上面的lock的图,这样就有可能导致大量的线程等待。

  按理说即使会慢,也应该只是在刚开始启动的时候,等都初始化完全后,cache中就有了,后面就好了啊,咱们继续往下看。

  2.5.2 ConcurrentReferenceHashMap的问题

  ConcurrentReferenceHashMap是一个soft cache, 过期的时候会走到put里,加锁等待,导致更多的线程block, 线程block导致tomcat更多的线程同时运行导致gc压力,而soft cache是一个软cache,压力过大时会被gc回收掉,这样会导致soft cache 接连失效;这也就验证了上面开始的gc比之间频繁的问题,这种情况在qps高的服务下会比较容易出现。

  2.6 spring的修复方案

  2.6.1 ResolvableType

【升级Java8可能会踩到的坑】

  可以看到在get之前加了一个check操作;大体意思就是checker一下cache的有效性,如果cache已过期,把过期的信息强制剔除以提高效率。

  2.6.2 SerializableTypeWrapper

【升级Java8可能会踩到的坑】

  可以看到针对equals有优化操作;大体意思是在执行equals方法的时候,直接执行原始的equals,不用再经过多层代理的过滤;尤其是针对ResolvableType这种高执行频率的操作效果较好。

  2.7 Metaspace的问题

  2.7.1 前言

  经过上面的折腾,终于算是把java8用上了,运行了几天之后很正常(其实是我想多了)。

  2.7.2 现象

  在大概一个星期之后的凌晨,突然收到报警,线上服务swap有报警或者服务挂掉了……

  2.7.3 问题排查

  查了下原因,问题出现在java8新搞得MetaSpace身上。

  2.7.4 概念

  首先来介绍2个概念:

  2.7.4.1 PermGen

  PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,说说为什么会内存益出:这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。

  2.7.4.2 MetaSpace

  Java8将移除永久区,使用本地内存来存储类元数据信息并称之为:元空间(Metaspace)。

  Java8的启动参数:PermSize 和 MaxPermSize 会被忽略并给出警告(如果在启用时设置了这两个参数)。

【升级Java8可能会踩到的坑】

  这意味着不会再有java.lang.OutOfMemoryError: PermGen问题,也不再需要你进行调优及监控内存空间的使用……但请等等,这么说还为时过早。在默认情况下,这些改变是透明的,接下来我们的展示将使你知道仍然要关注类元数据内存的占用。请一定要牢记,这个新特性也不能神奇地消除类和类加载器导致的内存泄漏。

  2.7.5 Metaspace 容量

  默认情况下,类元数据只受可用的本地内存限制(容量取决于是32位或是64位操作系统的可用虚拟内存大小)。

  新参数(MaxMetaspaceSize)用于限制本地内存分配给类元数据的大小。如果没有指定这个参数,元空间会在运行时根据需要动态调整。

  2.7.6 原因分析

  在java8里,由于PermSize 和 MaxPermSize已经失效,而你又正好没有设置MetaspaceSize和MaxMetaspaceSize这2个参数,那么就有可能会导致 metaspace的空间在不停的扩展,会导致机器的内存不足;进而可能出现swap内存被吃;严重可能导致进程直接被系统直接kill掉。

  3 总结

  升级java8应该注意以下2点:

  需配合Spring 4.0.3以上版本使用

  需要配置Metaspace大小

  暂时为止,升级java8的问题暂时告一段落。

  如果你近期有升级java8的计划,正好你也看到了这篇文章,那么恭喜你,你可以少踩2个坑;java8很美好,升级需谨慎。


为什么Java编程语言-屹立不倒?

Java编程的实用性、简单性、安全性使其在众多语言中始终位列首位


编程语言排行稳居前三服务器端开发占比90%企业对Java工程师需求60%


5G时代-Java高端人才炙手可热

信息化发展时代,Java程序员职业道路选择宽广,前景广阔,上升空间大


Java程序员待遇高

¥ 21350 /月

Java程序员待遇高

Java程序员人才需求大

日招聘量74492个

Java程序员人才需求大


阶段性Java课程学习-练就扎实功底

Java 企业级应用9大课程优势,培养学员全栈技术能力


1、java语言基础

课程模块

计算机概述Java基础面向对象实战

核心技能学习

• 了解计算机概述、掌握Linux Eclipse开发环境搭建

• 掌握变量/基本数据类型/运算符/流程控制/数组

• 掌握对象/类/属性/方法/构造器/重载/继承/重写/封装多态/抽象类和接口

2、javase核心

课程模块

项目需求概述Java SE核心APIJava 8 高级API高性能服务器开发实战

核心技能学习

• 熟悉项目需求文档

• 掌握Object、String、StringBuilder、正则表达式、集合框架、包装类、二进制

• 掌握文件、IO,线程,网络,XML、Lambda、流、反射API、日期、并发包

• 掌握HTTP协议解析、TCP并发编程、线程池、POST、GET、数据库原型实战

3、web全栈及数据库技术

课程模块

WEB前端核心WEB前端高级框架前端项目实战数据库核心Java EE服务端编程阶段项目实战

核心技能学习

• HTML5、CSS3、JavaScript、ES6

• JQuery、Bootstrap、VUE

• Smart Blog 界面开发

• MySQL、SQL、DDL、DML、DQL、DCL、JDBC、数据库连接

• 池、Druid、数据库设计

• Tomcat、Servlet、Request、Response、Cookies、Session

• 、过滤器、监听器、Thymeleaf 模版引擎

• Ajax、Smart Blog

4、微服务及互联网架构

课程模块

SSM框架技术微服务架构阶段项目实战互联网架构实战

核心技能学习

• Spring、Spring MVC、MyBatis、MyBatisPlus、SpringBoot 、Shiro认证框架、AdminLTE

• Eureka、Ribbon、Feign、Hystrix、Zuul、Config+Git

• 学子商城项目实战,项目搭建、RESTful、文件上载、AOP、拦截器

• Nginx、Redis、MySQL读写分离、Kafka

5、全栈进阶

课程模块

手写MVC框架数据库高级项目库综合实战就业进阶

核心技能学习

• Smart MVC 框架

• 索引、视图、存储过程、MySQL函数、存储过程

• CMS、旅游、电信、社交、找房

• Java 内存管理、GC原理、JVM参数调整、排序、二分查找、

• 双向循环链表、二叉树、散列表

6、选修视频课

视频课程内容

数据库简介

数据库安装

客户端工具的使用

常用数据类型

dml和tcl语句

truncate和delete区别

基本的select语句

函数、集合、视图、序列、索引、约束

hibernate入门

主键生成策略

一级缓存

持久化对象及其 特性

延迟加载

lazy和fetch和inverse使用

HQL 10 缓存


Java大项目贯穿-驱动式教学

7大全栈式Java项目实战,无缝融合企业真实开发环境


Java大项目贯穿-驱动式教学


实践+创新能力培养-成长为优秀程序员

大项目贯穿完成后,学员拥有从企业角度思考工作的思维模式和工作心态


image.png

工作继承性

在学习过程中,掌握行业java热点技术,提高对java技术点的熟练度。

image.png

商务开发经验

通过大项目贯穿,完成根据业务去实现系统功能,积累企业需要的java开发经验。

image.png

多人分工开发

java开发项目整个开发过程中分工合作,既提升团队合作能力又符合企业真实开发环境需求。

image.png

自主解决开发问题

通过大项目贯穿,了解项目开发全流程遇到问题自主解决,提高学习能力。

image.png

代码调试/运维能力

把每日每模块编写的代码集成在一起,锻炼代码调试能力,最终完成项目上线。


一站式就业服务-为学员就业保驾护航

23万家合作企业,累计为企业输送学员100万名


1662607924227273.png1662607931569589.png1662607941966088.png1662607951306862.png

每年两次大型招聘会,单日近上百家企业为达内学员提供千余岗位直招

企业直接到达内人才基地现场宣讲、面试、录取,提高学员就业入职率

与企业签订人才培养协议,按需求定制培养软件人才,毕业即可进入名企

每个月不定期举办名企有约活动,名企与学员直接面对面交流

扫描二维码免费领取试听课程

报名预约

登录51乐学网

注册51乐学网

免费短信关闭