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

电子商务公司网站建立前期准备新闻系统网站开发dw实训总结报告

电子商务公司网站建立前期准备,新闻系统网站开发dw实训总结报告,域名的购买费用,免费一键生成个人网站1 JAVA虚拟机 1.1 基本组成 通常来说Java平台标准版#xff08;Java SE#xff09;包括 Java SE开发工具包#xff08;JDK#xff09;和Java SE运行时环境#xff08;JRE#xff09;。 JRE提供了运行以Java编程语言编写的applet和应用程序所必需的库#xff0c;Java虚…1 JAVA虚拟机 1.1 基本组成 通常来说Java平台标准版Java SE包括 Java SE开发工具包JDK和Java SE运行时环境JRE。 JRE提供了运行以Java编程语言编写的applet和应用程序所必需的库Java虚拟机和其他组件JDK包括JRE以及编译器和调试器等命令行开发工具可以用来开发Java应用程序 。 虚拟机栈为虚拟机执行 Java 方法 也就是字节码服务而本地方法栈则为虚拟机使用到的 Native 方法服务在 HotSpot 虚拟机中直接将虚拟机栈和本地方法栈合二为一。 1对象创建 在java程序中创建对象的方式有多种。最常用的方式是new语句还可以通过反射机制、Object.clone方法、反序列化以及Unsafe.allocateInstance方法来新建对象。 1类加载过程 虚拟机遇到一条 new 指令时首先将去检查这个指令的参数是否能在常量池中定位到这个类的符号引用并且检查这个符号引用代表的类是否已被加载过、解析和初始化过。如果没有那必须先执行相应的类加载过程。 new对象创建过程 2内存分配 对象所需的内存大小在类加载完成后便可确定为对象分配空间的任务等同于把一块确定大小的内存从 Java 堆中划分出来。分配方式有 “指针碰撞” 和 “空闲列表” 两种选择哪种分配方式由 Java 堆是否规整决定而Java堆是否规整又由所采用的垃圾收集器是否带有压缩整理功能决定。 指针碰撞 场景Java堆中内存是绝对规整的原理所有用过的内存都放在一边空闲的内存放在另外一边中间放一个指针作为分界点的指示器分配内存时只需要把那个指针向空闲空间那边挪动一段与对象大小相等的距离就可以了GC收集器Serial、ParNew等带Compact过程的收集器。 空闲列表 场景Java堆中内存不是规整的原理虚拟机会维护一个列表记录上哪些内存块是可用的在分配的时候从列表中找到一块足够大的空间划分给对象实例并更新列表上的记录GC收集器CMS基于Mark-Sweep算法的收集器。 在Hotspot虚拟机里对象在堆里的存储布局主要分为三部分对象头实例数据和对象填充。 2对象访问 Java程序通过栈上的 reference 数据来操作堆上的具体对象。对象的访问方式由虚拟机实现而定目前主流的访问方式有使用句柄和直接指针两种。 1使用句柄 Java堆中将会划分出一块内存来作为句柄池reference 中存储的就是对象的句柄地址而句柄中包含了对象实例数据与类型数据各自的具体地址信息。 2直接指针 Java 堆对象的布局中就必须考虑如何放置访问类型数据的相关信息而reference 中存储的直接就是对象的地址。 1.2 堆栈分配 应用程序的内存分配  堆的详细结构  对象优先在Eden区进行分配如果Eden区满了之后会触发一次Minor GC大部分对象在Eden区中生成。Minor GC之后从Eden存活下来的对象将会被移动到S0区域当S0内存满了之后又会被触发一次Minor GCS0区存活下来的对象会被移动到S1区S0区空闲S1满了之后再Minor GC存活下来的再次移动到S0区S1区空闲这样反反复复GC他的年龄会增长1到达15的时候这些对象就会移步到老年代。年龄阈值可以通过参数 -XX:MaxTenuringThreshold设置持久代用于存放静态文件如今Java类、方法等。JDK1.8之后没有持久代变为元空间了。 Full GC触发机制 1调用System.gc时系统建议执行Full GC但是不必然执行 2老年代空间不足 3方法区空间不足 4通过Minor GC后进入老年代的平均大小大于老年代的可用内存 5由Eden区、survivor space1From Space区向survivor space2To Space区复制时对象大小大于To Space可用内存则把该对象转存到老年代且老年代的可用内存小于该对象大小 Major GC是清除老年代往往Major GC发生一次就会发生Minor GC所以也叫FULL GC。FULL GC 的速度往往会比 Minor GC 慢 10 倍。 1.3 JVisualVM JVisualVM能够监控线程内存情况查看方法的CPU时间和内存中的对 象已被GC的对象反向查看分配的堆栈。 demo1public class HeapTest {byte[] a new byte[1024 * 100]; //100kbpublic static void main(String[] args) throws Exception{ArrayListHeapTest heapTests new ArrayList();while(true){heapTests.add(new HeapTest());Thread.sleep(10);}} } 运行程序跟工具 note 插件安装 地址VisualVM: Plugins Centers 1选择版本 2选择插件下载 3安装插件 将“GC Roots”对象作为起点从这些节点开始向下搜索引用的对象,找到的对象都标记为非垃圾对象其余未标记的对象都是垃圾对象 GC Roots根节点: 线程栈的本地变量、静态变量、本地方法栈的变量等等 2 Arthas调优工具 Arthas 是阿里巴巴开源的一款线上监控诊断产品通过全局视角实时查看应用 load、内存、gc、线程的状态信息并能在不修改应用代码的情况下对业务问题进行诊断包括查看方法调用的出入参、异常监测方法执行耗时类加载信息等大大提升线上问题排查效率。 curl -O https://arthas.aliyun.com/arthas-boot.jar java -jar arthas-boot.jar 运行后会列出所有的进程  常用命令 1dashboard,按ctrlc可以中断执行 2thread 1会打印线程 ID 1 的栈通常是 main 函数的线程。 3 jad 来反编译 4其他命令 命令列表 | arthas 3 垃圾收集器 3.1 基础介绍 什么是垃圾 一个对象没有任何引用指向他那他就认作是需要回收的垃圾对象。 如何寻找垃圾对象 1引用计数法对每一个对象保存一个整型的引用计数器属性用于记录对象被引用的数量。对象的引用计数器的值为0即表示对象A不能在被使用可进行回收。 缺点1他需要单独的字段存储计数器这样的做法增加了存储空间的开销。 2每次赋值都需要更新计数器伴随着加法和减法操作这增加了时间开销。 3引用计数器还有一个严重的问题即无法处理循环引用的问题这是一条致命的缺陷导致在Java回收的垃圾回收器中没有使用这类算法。 2GC roots 可达性分析算法 根可达判断一个对象到 Gc Roots这些根对象之间存不存在引用链存在的话不回收不存在的话回收掉即可。 GC Roots 根对象 1、虚拟机栈中引用的对象开发人员写的方法里面的变量指向的对象比如DequeInteger numbers new LinkedList(); 2、方法区中的静态属性引用的对象类中定义的静态的类变量引用的对象例如private static String s1 Java; 3、本地方法栈中引用的对象native 方法里面的变量指向的对象 4、Java 虚拟机内部的引用比如基本数据类型对应的 Class 对象 JVM 里面常驻的异常对象比如空指针异常 NullPointException 5、被同步锁 synchornized 持有的对象 如何清楚垃圾对象 1Mark-Sweep (标记清除) 2Copying (拷贝) 3(标记压缩)Mark-Compact 3.2 垃圾回收器  新生代的垃圾回收器共有三个SerialParallel Scavenge 和 Parallel New。这三个采用的都是标记 - 复制算法。 Serial 是一个单线程的Parallel New 可以看成 Serial 的多线程版本。Parallel Scavenge 和 Parallel New 类似但更加注重吞吐率。此外Parallel Scavenge 不能与 CMS 一起使用。 老年代的垃圾回收器也有三个Serial Old 和 Parallel Old以及 CMS。 Serial Old 和 Parallel Old 都是标记 - 压缩算法。同样前者是单线程的而后者可以看成前者的多线程版本。 G1Garbage First是一个横跨新生代和老年代的垃圾回收器。 由于 G1 的出现CMS 在 Java 9 中已被废弃。G1每个区域都可以充当 Eden 区、Survivor 区或者老年代中的一个。它采用的是标记 - 压缩算法而且和 CMS 一样都能够在应用程序运行过程中并发地进行垃圾回收。G1 能够针对每个细分的区域来进行垃圾回收。在选择进行垃圾回收的区域时它会优先回收死亡对象较多的区域。 java 11 引入了 ZGC宣称暂停时间不超过 10ms。 1Serial  进行垃圾收集工作的时候其他线程都必须暂停直到垃圾收集结束Stop The World。在并行能力较弱的单CPU环境下往往表现优于其他收集器。 2ParNew  ParNew收集器是Serial收集器的多线程版本除了使用了多线程进行垃圾收集以外其他的都和Serial一致它默认开始的线程数与CPU的核数相同可以通过参数-XX:ParallelGCThreads来设置线程数。 3Parallel Scavenge Parallel Scavenge收集器依然是个采用复制算法的多线程新生代收集器它与其他的收集器的不同之处在于它主要关心的是吞吐量。 吞吐量用户线程执行时间/(用户线程执行时间垃圾收集时间) 4Serial Old 5Parallel Old 6CMS  CMS收集器是一种以获取最短回收停顿时间为目标的收集器在互联网网站、B/S架构的中常用的收集器就是CMS。 缺点 1、当系统的 cpu 核心数比较少的时候对于整个系统的资源的开销是比较大的CMS 默认启动的垃圾回收的核心线程数目处理器核心数量 3/ 4;2、CMS 没有办法处理浮动垃圾当 CMS 在并发标记以及并发清理的时候由于程序在继续的运行所以任然在产生垃圾但是这一部分的垃圾是在标记之后产生的所以在此次的垃圾回收中是不会被清理的只能在下一次的垃圾回收中清理这些浮动垃圾3、该垃圾收集器本身是基于 标记 - 清除 算法的所以存在内存空间碎片的问题在一定程度上面是需要整理内存碎片的 5Garbage First G1 回收器 G1是一款面向服务端应用的垃圾回收器。 并行与并发与CMS类似充分里用多核CPU的优势G1仍然可以不暂停用户线程执行垃圾收集工作分代收集分代的概念依然在G1保留当时它不需要和其他垃圾收集器配合使用可以独立管理整个堆内存空间的整合G1整体上采用的是标记-整理算法从局部Region采用的是复制算法这两种算法都意味着G1不需要进行内存碎片整理可预测的停顿能够让用户指定在时间片段内消耗在垃圾收集的时间不超过多长时间。 3.3 GC设置参数 参数描述-XX:UseSerialGC启用串行收集器-XX:UseParallelGC启用并行收集器配置了该选项那么 - XX:UseParallelOldGC 默认启用-XX:UseParallelOldGCFullGC 采用并行收集器默认禁用如果设置 - XX:UseParallelGC 则启用-XX:UseParNewGC年轻代采用并行收集器如果设置了 - XX:UseConcMarkSweepGC自动启用-XX:ParallelGCThreads年轻代及老年代垃圾回收使用的线程数默认是 JVM 使用的 CPU 个数-XX:UseConcMarkSweepGC对于老年代启用 CMS 垃圾收集器当并行收集器无法满足应用的延迟需求时推荐使用 CMS 或 G1 收集器启用该选项后-XX:UseParNewGC 自动启用可以使用-XX:ConcGCThreads设置并发线程数量。-XX:UseG1GC启用 G1 收集器G1 是服务器类型的收集器用于多核大内存的机器它在保持高吞吐量的情况下高概率满足 GC 暂停时间的目标 -XX:PrintGC 输出GC日志-XX:PrintGCDetails输出GC的详细日志-XX:PrintGCTimeStamps输出GC的时间戳以基准时间的形式-XX:PrintGCDateStamps输出GC的时间戳-XX:PrintHeapAtGC在进行GC的前后打印出堆的信息-Xloggc:../logs/gc.log日志文件的输出路径 4 JVM调优 JVM调优主要是优化FULL GC 第一调整 JVM 参数进行优化第二GC 回收器优化 4.1 JVM参数 参数参数作用初始值-server启动 Server以服务端模式运行-Xms最小堆内存物理内存的1/64(1GB)-Xmx最大堆内存物理内存的 1/4(1GB)-Xmn设置年轻代大小(for 1.3/1.4)注意此处的大小是eden 2 survivor space)。与 jmap -heap 中显示的 New gen 是不同的。整个堆大小年轻代大小 老年代大小 持久代永久代大小.增大年轻代后,将会减小年老代大小.此值对系统性能影响较大,Sun 官方推荐配置为整个堆的 3/8-XX:NewSize设置年轻代大小(for 1.3/1.4)-XX:MaxNewSize年轻代最大值(for 1.3/1.4)-Xss每个线程的堆栈大小-XX:MetaspaceSize元空间初始值-XX:MaxMetaspaceSize元空间最大内存-XX:MaxNewSize新生代最大内存-XX:NewRatio年轻代和老年代大小比值取值为整数默认为 2-XX:SurvivorRatioEden 区与 Survivor 区大小比值取值为整数默认为 8 Tomcat 常见的几个 JVM 异常 第一OutOfMemoryError:Java heap space表示堆内存满了 -Xms512m        -Xmx2048m 第二OutOfMemoryError:PermGen space表示静态内存区满了 -XX:PermSize50m        -XX:MaxPermSize50m 第三StackOverflowError表示栈内存溢出 检查代码是否陷入死循环导致内存溢出 5 系统调优 5.1 中间件优化 如果并发量很高的情况光靠分布式架构是解决不了的我们还得集成一些高性能的中间件来提高系统的吞吐量。常见的中间件 序号中间件解决什么问题1Redis分布式缓存2ActiveMQ、RabbitMQ、Kafka、RocketMQ消息队列3Solr、ElasticSearch全文检索4Elastic-Job、Xxl-Job分布式定时器5Netty高性能通讯框架比如开发一个百万级推送系统、弹幕系统6MongoDB、Hbasenosql数据库缓解MySQL数据库的压力7MyCat、Sharding-JDBCMySQL数据库的分库分表 5.2 JAVA代码优化 1HashMap、HashTable、ConcurrentHashMap的区别 HashMap线程不安全HashTable线程安全ConcurrentHashMap基于分段锁实现的线程安全的。如果高并发下可以使用ConcurrentHashMap来代替HashMap。 MapString,String mapnew HashMap(); //线程不安全 Map mapCollections.synchronizedMap(new HashMap());//线程安全 2在海量元素中例如10亿无序、不定长、不重复快速判断一个元素是否存在 使用布隆过滤器Bloom Filter 3IO合理使用 如果使用传统的BIO也就是IO它是面向流的那么尽量使用带缓冲的Buffer开头的如果操作本地IO则尽量使用NIO它是面向缓冲区的直接缓冲区、非直接缓冲区、零拷贝合理的选择使用网络通信的话基于Netty框架去实现它的底层的NIO同步非堵塞的相比BIO同步堵塞性能要高很多。 4并发编程 5SQL语句性能优化 6场景设计思路 1案例1如果用户下单成功15分钟未付款自动取消订单 方案定时器、Redis监听、消息队列的延迟队列。后面两种的方案的性能肯定比定时器要高。 2案例2比如登录的时候通过短信验证码进行验证60s只能不能重复发送验证码有效期5分钟         方案1依赖数据库实现数据库创建相应的表即可。方案2依赖Redis实现每次发送验证码则保存到Redis 3案例3从Excel读取并且导入100万条数据 方案解析Excel解析每一行则先放入本地队列里面另外一个线程不断监听Queue获取到Queue的数据的时候往消息队列发送由消息队列的消费端负责处理。消费端可以批量插入数据库也可以先把数据存入Redis后期再通过同步工具同步到数据库。 5.3 运维 性能提升方案 Tomcat的性能调优、集群部署Tomcat负载方案可以有Nginx、LVS、硬件负载等等MySQL性能调优、主从复制集群、基于主从复制实现读写分离及负载均衡等等使用中间件实现分库分表。静态缓存比如一些静态资源可以往前挪比如说原来html页面的图片是存储在Tomcat里面的可以把它缓存在Nginx、客户端本地、CND等。基于Nginx分发到CND和OSS而不是每次都从后端服务器获取提高性能。
http://www.lebaoying.cn/news/95148.html

相关文章:

  • 网站建设合同文百科特价做网站
  • 株洲专业做网站设计的企业营销管理软件
  • 长沙高新区建设局网站济南网站建设sdjy6
  • 网站域名查询注册新云手机站官网
  • 买了个域名 如何建网站网站费用多少钱一年
  • 如何做网络营销网站网站空间上传软件
  • 群网站建设合同网站引导页动画
  • 什么是网站建设的三次点击原则可以将自己做的衣服展示的网站
  • 个人外贸网站建设广告制作费
  • 公司建设网站费用做那个科目网站优化公司效果
  • 做swf网站电子商务网站规划从哪些方面入手
  • 广州市住房城乡建设局网站网站做双拼域名什么意思
  • 重庆本地网站有哪些凡客和凡客诚品一样吗
  • 电商网站上信息资源的特点包括php网站建设思路方案
  • qq空间做单页网站深圳分销小程序开发平台
  • 网站群建设招标携程电子商务网站建设
  • 营销创意网站wordpress升级流程
  • 用自己的电脑做主机建网站1万网站建设费入什么科目
  • 宁波网站建设服务商上海短视频推广
  • 收录软件最多的网站北京加盟网站建设
  • 做网站的上海市哪家技术好郑州比较大的网络公司
  • 网站建设的总体需求是什么外贸电商
  • 求一个网站开发接项目的平台专业科技网站建设
  • 深圳做企业网站哪家好网站首页制作采用
  • 自己动手做衣服网站网站没有备案能访问吗
  • 怎样做网站底部导航数商云招聘
  • 预售网站开发php开源多用户商城系统
  • 网站需备案阳曲网站建设价格多少
  • 广州建网站加备案网站设计收费明细表
  • 昆明网站制作内容什么网站做设计可以赚钱吗