03 2020 档案
摘要:1.线程和进程 线程 这里所说的线程指程序执行过程中的一个线程实体。JVM 允许一个应用并发执行多个线程。Hotspot JVM 中的 Java 线程与原生操作系统线程有直接的映射关系。当线程本地存储、缓冲区分配、同步对象、栈、程序计数器等准备好以后,就会创建一个操作系统原生线程。Java 线程结束
阅读全文
摘要:CAS CAS的全称为Compare-And-Swap,它是一条CPU并发原语。它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的。CAS并发原语体现在JAVA语言中就是 sun.misc.Unsafe类中的各个方法。调用UnSafe类中的CAS方法,JVM会帮我们实
阅读全文
摘要:可重入锁(递归锁) 本文里面讲的是广义上的可重入锁,而不是单指 JAVA 下的 ReentrantLock。可重入锁,也叫做递归锁,指的是同一线程 外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码,但不受影响。在 JAVA 环境下 ReentrantLock 和 synchronized 都是
阅读全文
摘要:并发队列位于java.util.concurrent包下 可以先了解一些快速失败和安全失败是什么意思,juc下的集合都是安全失败的 快速失败原文链接http://www.cnblogs.com/ygj0930/p/6543350.html 一:快速失败(fail—fast) 在用迭代器遍历一个集合对
阅读全文
摘要:Callable和Runnable很像,都是可以创建线程,但是他俩也是有很大的区别的 1.Runnable位于java.lang包下,Callable位于java.util.concurrent包下 2. Runnable接口中的方法 @FunctionalInterface public inte
阅读全文
摘要:工具类 CountDownLatch 利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。 package com.yjc.juc; import java.util.concurrent.Count
阅读全文
摘要:死锁 死锁是指多个线程运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。 产生死锁的四个必要条 互斥条件:进程要求对所分配的资源进行排它性控制,即在一段时间内某资源仅为一进程所占用。 请求和保持条件:当进程因请求资源而阻塞时,对已获得的资源保持不放
阅读全文
摘要:HashMap 首先介绍一下HashMap,它在多线程的环境下运行时线程不安全,这一点从源码中就可以看到,它没有采用任何的锁,不安全但是效率比较高。默认容量为0,如不指定容量第一次put的时候容量变为,容量必须是2的次方 相反,HashTable的方法采用了synchronized进行了同步,保证了
阅读全文
摘要:常见的集合框架中,实现的List<E>的主要有Vector和ArrayList以及LinkedList,其中最常见和最常使用的就是ArrayList了 本文的源码基于jdk1.8 第一问:Vector和ArrayList以及LinkedList区别和联系,以及分别的应用场景? 1:Vector Ve
阅读全文
摘要:一:类的加载过程 一般分为三个比较大的阶段,分别是加载阶段,连接阶段和初始化阶段,五个主要的阶段。 在这五个阶段中,加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始。另外注意这里的几个阶段是按顺序开始,而不是按顺序进行或完成,因为这些阶
阅读全文
摘要:1.通过javap命令查看class文件的字节码内容 最简单的一个案例 public class Test { public static void main(String[] args) { int a = 2; int b = 5; int c = b-a; System.out.println
阅读全文
摘要:要想进行对Tomcat的性能进行优化,首先你要有一个部署在Linux之上的Tomcat服务,为了将场景模拟的更贴近真实的开发环境,在tomcat上部署一个可以访问数据库的项目 一:下载测试工具JMeter 1.1找到bin目录,然后双击打开就行 1.2添加线程组 添加测试参数,一下请求1000次,请
阅读全文
摘要:事先准备一个安装在Linxu系统上的Tomcat8 一:配置tomcat的管理用户 配置conf目录的tomcat-users.xml文件,添加如下配置 <role rolename="manager-gui"/> <role rolename="admin-gui"/> <user usernam
阅读全文
摘要:垃圾收集器是垃圾回收算法(标记-清除算法、复制算法、标记-整理算法、火车算法)的具体实现,不同商家、不同版本的JVM所提供的垃圾收集器可能会有很在差别,本文主要介绍HotSpot虚拟机中的垃圾收集器。 下图是java8 HotSpot虚拟机所有的垃圾收集器,连接先代表可也配合使用的组合,G1是对整个
阅读全文
摘要:垃圾收集 Garbage Collection 通常被称为“GC”,程序运行期间,所有对象实例存储在运行时数据区域的heap中,当一个对象不再被引用(使用),他就需要被回收,在GC过程中,这些不需要被使用的对象从heap中回收,这样就会有空间循环被利用 判断一个对象是否存活常用的有两种办法:1引用计
阅读全文
摘要:VisualJVM 能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈 在jdk安装目录的bin目录下 双击打开无需配置 通过VisualJVM连接远程的tomcat服务的话,需要进行配置, 配置方法如下 在tomcat的bin目录下找到catalina
阅读全文
摘要:1.通过jstat命令进行查看堆内存使用情况 先随便启动一个(java的应用程序就行)Tomcat服务,在命令行里输入jps -l命令查看进程号 1.1 查看class加载统计 jstat -class 进程号 说明: Loaded:加载class的数量 Bytes:所占用空间大小 Unloaded
阅读全文
摘要:一:永久代(jdk1.7) 说起JAVA的运行时数据区在java7和java8中还是有着很大的不同,最大的不同点就是在java7中还有着"永久代",而"永久代"保存的是在Java虚拟机(JVM)内部,class文件中包括类的版本、字段、方法、接口等描述信息,还有运行时常量池,用于存放编译器生成的各种
阅读全文