03 2020 档案

摘要:Java内存模式:JMM 在内存模型当中定义一个主内存,所有声明的实例变量都存在于主内存当中,主内存的数据会共享给所有线程,每一个线程有一个块工作内存,工作内存当中主内存数据的副本当更新数据时,会将工作内存中的数据同步到主内存当中; 什么是CAS CAS:Compare and Swap,即比较交换 阅读全文
posted @ 2020-03-26 17:06 慕容子月 阅读(265) 评论(0) 推荐(0)
摘要:重入锁 重入锁,也叫做递归锁,指的是同一线程 外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码,但不受影响。 在JAVA环境下 ReentrantLock 和synchronized 都是 可重入锁。 synchronized和ReentrantLock就是重入锁对应的实现 synchroni 阅读全文
posted @ 2020-03-25 16:54 慕容子月 阅读(198) 评论(0) 推荐(0)
摘要:线程实现方式 1.继承Thread类2.实现Runnable接口3.线程池4.Callable 无论使用继承Thread类还是实现Runnable接口,还是使用线程池都没有办法解决2个问题 1.线程执行没有返回值结果2.线程执行没有办法抛出异常,只能自己通过try-catch解决 Callable 阅读全文
posted @ 2020-03-23 18:01 慕容子月 阅读(141) 评论(0) 推荐(0)
摘要:并发队列 在并发队列上JDK提供了两种实现:一个是以ConcurrentLinkedQueue为代表的高性能队列,一个是以BlockingQueue接口为代表的阻塞队列,无论哪种都继承自Queue; ConcurrentLinkedQueue ConcurrentLinkedQueue:是一个适用于 阅读全文
posted @ 2020-03-23 17:48 慕容子月 阅读(175) 评论(0) 推荐(0)
摘要:CountDownLatch CountDownLatch是一个同步计数器,初始化的时候传入需要计数的线程等待数,可以是需要等待执行完成的线程数,或者大于; 作用:用来协调多个线程之间的同步,或者说起到线程之间的通信(而不是用作互斥的作用)。是一组线程等待其他的线程完成工作以后在执行,相当于加强版j 阅读全文
posted @ 2020-03-19 18:27 慕容子月 阅读(221) 评论(0) 推荐(0)
摘要:什么是线程池 java中的线程池是运用场景最多的并发框架,几乎所以需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来三个好处: 第一:降低资源消耗:通过复利用已创建的线程降低线程创建和销毁造成的消耗; 第二:提高相应程序:当任务达到时,任务可以不需要等到线程创建就能 阅读全文
posted @ 2020-03-19 18:08 慕容子月 阅读(128) 评论(0) 推荐(0)
摘要:概述 串行: 一个线程在处理操作; 并行: 多个线程在处理操作; 并发编程: 在多线程环境下,应用程序的执行; 并发编程的目的: 同分运用到资源,提供程序的效率 什么情况下用到并发编程: 1.在线程阻塞时,导致应用程序停止; 2.处理任务时间过长,可以创建子任务,来进行分段处理; 3.间断任务执行; 阅读全文
posted @ 2020-03-19 07:02 慕容子月 阅读(122) 评论(0) 推荐(0)
摘要:ConcurrentHashMap和HashTable区别 ConcurrentHashMap融合了hashtable和hashMap二者的优势; hashTable是做了同步的,hashMap没有同步,所以hashMap在单线程情况下效率高,hashTable在多线程情况下,同步操作能保证程序执行 阅读全文
posted @ 2020-03-17 18:52 慕容子月 阅读(195) 评论(0) 推荐(0)
摘要:HashMap底层源码剖析 数组+单向链表+红黑树 数组: 数组每一项都是一个链表,其实就是数组和链表的结合体 单向链表: 当法神hash碰撞时,首先会找到数组对应位置,然后1.8采用尾插入法(1.7采用头插入法),形成一个单项链表结构 红黑树: 当数组中每项的链表长度大于8时,会转换为红黑树 什么 阅读全文
posted @ 2020-03-17 18:13 慕容子月 阅读(150) 评论(0) 推荐(0)
摘要:Map集合概述 存储键值对应关系的数据,也就是映射关系。Map集合特点 Map 集合中不能存在相同的键,一个键只能对应一个值,键相同值覆盖。 Map 集合的数据结构 只跟键有关 ,跟值无关。 基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。 阅读全文
posted @ 2020-03-17 09:53 慕容子月 阅读(126) 评论(0) 推荐(0)
摘要:1、Vector和ArrayList以及LinkedList区别和联系,以及分别的应用场景 线程安全 Vector:如果创建Vector时没有指定容量,则默认容量为10,底层基于数组实现,线程是安全的,底层采用synchronized同步方法进行加锁 ArrayList:底层基于数组,线程不安全,查 阅读全文
posted @ 2020-03-15 16:46 慕容子月 阅读(140) 评论(0) 推荐(0)
摘要:类加载 由.java源文件编译生成.class二进制字节码文件,当运行时,首先Java虚拟机会将本地/网络阐传输.class文件加载到内存当中,那么加载的过程就叫做类加载 类加载过程 类加载机制分为五个部分:加载,验证,准备,解析,初始化 加载 加载指的是将类的class文件读入到内存,并为之创建一 阅读全文
posted @ 2020-03-12 18:50 慕容子月 阅读(153) 评论(0) 推荐(0)
摘要:优化,不仅仅是在运行环境进行优化,还需要在代码本身做优化,如果代码本身存在性能问题,那么在其他方面怎么优化也不可能达到效果最优的; 1、尽可能使用局部变量 调用方式时传递的参数以及在调用中床架的临时变量都保存在栈中速度较快,其他变量,如静态变量,实例变量等,都在堆中创建,速度较慢。另外,栈中创建的变 阅读全文
posted @ 2020-03-11 19:09 慕容子月 阅读(130) 评论(0) 推荐(0)
摘要:JVM字节码 前面我们通过tomcat本身的参数以及jvm的参数对tomcat做了优化,其实要想将应用程序跑的更快、效率更高,除了对tomcat容器以及jvm优化外,应用程序代码本身如果写的效率不高的,那么也是不行的,所以,对于程序本身的优化也就很重要了。 对于程序本身的优化,可以借鉴很多前辈们的经 阅读全文
posted @ 2020-03-11 18:50 慕容子月 阅读(281) 评论(0) 推荐(0)
摘要:调整tomcat参数学进行优化 禁用AJP 查看报告 可以看到,禁用AJP服务后,吞吐量有所提升; 当然了,测试不一定准确,需要多册测试才能看出是否有所提升; 设置线程池 通过设置线程池,调整线程池相关的参数进行测试tomcat的性能 最大线程数为500,初始为50 <Executor name=" 阅读全文
posted @ 2020-03-11 18:14 慕容子月 阅读(745) 评论(0) 推荐(0)
摘要:使用Apache JMeter进行测试 Apache JMeter是开源的压力测试工具,我们借助于此工具进行测试,将测试出tomcat的吞吐量等信息; 下载安装 下载地址:http://jmeter.apache.org/download_jmeter.cgi 安装:直接将下载好的zip压缩包进行解 阅读全文
posted @ 2020-03-11 17:33 慕容子月 阅读(207) 评论(0) 推荐(0)
摘要:Tomcat优化 Tomcat服务器在JavaEE项目中使用率非常高,所以在生产环境对Tomcat的优化也变得非常重要了。 对于Tomcat的优化,主要是从2个方面入手,一是,Tomcat自身的配置,另一个是Tomcat所运行的jvm虚拟机的调优。 部署安装tomcat8 下载并安装 下载:http 阅读全文
posted @ 2020-03-11 17:00 慕容子月 阅读(1206) 评论(0) 推荐(0)
摘要:GC日志输出参数 前面通过-XX:+PrintGCDetails可以对GC日志进行打印,我们就可以在控制台查看,这样虽然可以查看GC的信息,但是并不直观,可以借助于第三方的GC日志分析工具进行查看。 在日志打印输出涉及到的参数如下: -XX:PrintGC 输出GC日志 -XX:+PrintGCDe 阅读全文
posted @ 2020-03-08 16:03 慕容子月 阅读(327) 评论(0) 推荐(0)
摘要:概述 在jvm中,实现了多种垃圾收集器,包括:串行垃圾收集器、并行垃圾收集器、CMS(并发)垃圾收集器、G1垃圾收集器 串行垃圾收集器 串行垃圾收集器,是指使用单线程进行垃圾回收,垃圾回收时,只有一个线程在工作,并且java应用中的所有线程都要暂停,等待垃圾回收的完成。这种现象称之为STW(Stop 阅读全文
posted @ 2020-03-08 14:12 慕容子月 阅读(182) 评论(0) 推荐(0)
摘要:什么是垃圾回收 程序的运行必然需要申请内存资源,无效的对象资源如果不及时处理就会一直占有内存资源,最终将导致内存溢出,所以对内存资源的管理是非常重要了。 C/C++语言的垃圾回收 在C/C++语言中,没有自动垃圾回收机制,是通过new关键字申请内存资源,通过delete关键字释放内存资源。 如果,程 阅读全文
posted @ 2020-03-05 15:17 慕容子月 阅读(248) 评论(0) 推荐(0)
摘要:概述 VisualVM能够监控线程,内存情况,查看方法的CPU时间和内存中的对象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪一个对象分配出来的); VisualVM使用简单,几乎0配置,功能还是比较丰富的,几乎包括了其他JDK自带命令的所有功能; 内存信息; 线程信息; 阅读全文
posted @ 2020-03-04 17:01 慕容子月 阅读(466) 评论(0) 推荐(0)
摘要:jstack的使用 有些时候我们需要查看下jvm中的线程执行情况,比如,发现服务器的CPU的负载突然增 高了、出现了死锁、死循环等,我们该如何分析呢? 由于程序是正常运行的,没有任何的输出,从日志方面也看不出什么问题,所以就需要 看下jvm的内部线程的执行情况,然后再进行分析查找出原因。 这个时候, 阅读全文
posted @ 2020-03-04 16:06 慕容子月 阅读(483) 评论(0) 推荐(0)
摘要:前面通过jstat可以对JVM对的内存进行统计分析,而jmap可以获取到更加详细的内容,如:内存使用情况的汇总,对内存溢出的定位与分析。 查看内存使用情况 使用命令【jmap -heap 进程号】 Attaching to process ID 17656, please wait... Debug 阅读全文
posted @ 2020-03-04 15:32 慕容子月 阅读(2156) 评论(0) 推荐(0)
摘要:jdk1.7的堆内存模型 1、Young 年轻区(代) Young区被划分为三部分,Eden区和两个大小严格相同的Survivor区,其中,Survivor区间中,某一时刻只有其中一个是被使用的,另外一个留做垃圾收集时复制对象用,在Eden区间变满的时候, GC就会将存活的对象移到空闲的Surviv 阅读全文
posted @ 2020-03-04 15:13 慕容子月 阅读(176) 评论(0) 推荐(0)
摘要:我们为什么要对jvm做优化? 在本地开发环境中我们很少会遇到需要对jvm进行优化的需求,但是到了生产环境,我们可能将有下面的需求: 运行的应用“卡住了”,日志不输出,程序没有反应 服务器的CPU负载突然升高 在多线程应用下,如何分配线程的数量? jvm的运行参数 在jvm中有很多的参数可以进行设置, 阅读全文
posted @ 2020-03-04 14:56 慕容子月 阅读(555) 评论(0) 推荐(0)