随笔分类 - java
摘要:线程池,既然是个池子里面肯定就装很多线程。 如果并发的请求数量非常多,但每个线程执行的时间很短,这样就会频繁的创建和销毁 线程,如此一来会大大降低系统的效率。可能出现服务器在为每个请求创建新线程和销毁线 程上花费的时间和消耗的系统资源要比处理实际的用户请求的时间和资源更多。因此Java中提供线程池对
阅读全文
摘要:CountDownLatch: 可以让一个线程等待其他线程完成了各自的工作之后再执行。比如说一个切菜,一个人切肉,都准备完毕之后才能炒肉。 构造方法: public CountDownLatch(int count) count等待的线程数量 关键API: countDown() 分线程执行完减少计
阅读全文
摘要:Semaphore意思的信号量,它的作用是控制访问特定资源的线程数量 构造方法: public Semaphore(int permits) public Semaphore(int permits, boolean fair) permits:允许同时访问的线程数量 fair:是否公平,若true
阅读全文
摘要:Synchronized是jvm内置的锁;而java.util.concurrent包下面的Lock锁是大佬(Doug Lea)用java代码实现的显示锁。 Juc包下面锁相比jvm内置的锁更加灵活。围绕着AQS(AbstractQueuedSynchronizer)实现了一系列性质的锁,比如共享/
阅读全文
摘要:首先了解一下JMM中定义的内存操作: 一个线程操作数据时候都是从主内存(堆内存)读取到自己工作内存(线程私有的数据区域)中再进行操作。对于硬件内存来说,并没有工作内存和主内存的区分,这都是java内存模型划分出来的,它只是一种抽象的概念,是一组规则,并不是实际存在的。Java内存模型中定义了八种同步
阅读全文
摘要:1.线程是否要锁住同步资源:锁住 悲观锁;不锁住 乐观锁 2.锁住同步资源失败线程是否要阻塞:不阻塞 自旋锁/适应性自旋锁 3.synchronized关键字优化之后的几个状态流转:无锁-->偏向锁-->轻量级锁-->重量级锁 4.多个线程竞争锁时是否排队:排队--公平锁;先尝试插队(直接抢锁)插队
阅读全文
摘要:之前用定时任务的线程池,设置了个任务,但是突然今天产品说,某些个操作需要中断某些任务(如果任务还没有执行),使其不能再到点执行了。于是查了API果然有这样一个方法。 一看API,需要移除的是一个Runnable对象,想当然的就把任务调度的传入的Runable对象保留下来,然后进行删除。简要代码如下
阅读全文
摘要:1.简述 Java8中有两大最为重要的改变。第一个是 Lambda 表达式;另外一 个就是 Stream API。 Stream 是处理集合的抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API 对集合数据进行操作,就类似于使用 SQL
阅读全文
摘要:项目马上切java8了,之前对于java8的东西都是东打一棒西打一锤的了解了些。这次搜集整理了下,从lambda到stream相关的API等。 1.Lambda和匿名内部类 Lambda 是一个匿名的函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递),我一直
阅读全文
摘要:1.垃圾回收算法 1.1 标记-清除算法 算法分为“标记”和“清除”阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。它是最基础的收集算法,但是会带来两个明显的问题: 1.效率问题 2.空间问题,标记清除后会产生大量不连续的碎片 1.2 复制算法 为了解决碎片问题,“复制”收
阅读全文
摘要:1.java堆中几乎放着所有对象的实例,那么什么样子的对象才是可以被回收的呢? 1.1.引用计数法: 给对象添加一个引用计数器,当有地方引用的时候,计数器就+1,引用失效就-1;任何时候当计数器为0,那么这个对象就是可以被回收的。该方法实现简单,效率也高,但是并没有被主流的虚拟机采用,因为很难解决对
阅读全文
摘要:1.jps 查看jvm中运行的进程(获取对应pid) 参数:默认-V(大写) -v: 列出jvm启动参数。 2.jstack pid 查看某个Java进程内的线程堆栈信息,,可用于线程死锁问题排查 3.jinfo pid 查看某个java进程的jvm参数信息等 jinfo -flags pid 查看
阅读全文
摘要:1.类加载:类加载器将class文件加载到虚拟机的内存加载:在硬盘上查找并通过IO读入字节码文件连接:执行校验、准备、解析步骤校验:校验字节码文件的正确性准备:给类的静态变量分配内存,并赋予默认值解析:类装载器装入类所引用的其他所有类初始化:对类的静态变量初始化为指定的值,执行静态代码块 2.类加载
阅读全文
摘要:jvm主要由三个子系统构成:类加载子系统,运行时数据区,执行引擎 运行时数据区主要包括: 1.本地方法栈:登记native方法,执行时加载本地方法库 2.程序计数器:就是一个指针,用来存储指向下一条执行指令的地址,也就是即将要执行的指令代码,是一个非常小得空间,可以忽略不计。 3.java栈:jav
阅读全文
摘要:说到java对象的创建,首先应该提下java的内存机制,最主要的两块应该就是堆内存和栈内存。 简单点来说栈内存主要是保存基本数据类型的值和保存引用变量,堆内存主要用来存放new产生的对象,数组。 堆是被所有线程共享的一块内存区域,在虚拟机启动的时候被创建。我的理解就是堆是用来存放实实在在东西的,而栈
阅读全文
摘要:在java中apache提供了一个工具类BOMStream,在获取文件流时,将获取到的文件流转化成为BOM流: 这种方法只能过滤掉UTF-8/UTF-16LE/UTF-16BE三种编码格式的文件,当文件是其他格式时,就会失效。只能使用另外一个工具了:UnicodeStream和UnicodeRead
阅读全文
摘要:反射是很强大的,谁说的final修饰的就不能改变, 通过反射获取成员变量,之后可以取消访问修饰符,也就是说private的也可以访问, 在修改常量(final修饰的),之后就可以对其做任何操作了 如下,通过一个方法交换两个Integer对象的值:
阅读全文
摘要:框架最底层其实就是通过反射实现的,就像spring,当你配置各种各样的bean时都是以配置文件的形式配置的,你需要用到哪些bean就配哪些,spring容器就会根据你的需求去动态加载,这儿写一个简单的例子模拟一下: 1.加深对反射的理解, 2.了解一下框架的实现的原理 3.通过dom4j对xml的解
阅读全文
摘要:反射是什么?当我们的程序在运行时,需要动态的加载一些类这些类可能之前用不到所以不用加载到jvm,而是在运行时根据需要才加载,这样的好处对于服务器来说不言而喻,比如我们的项目底层有时是用mysql,有时用oracle,需要动态地根据实际情况加载驱动类,通过类的全类名让jvm在服务器中找到并加载这个类,
阅读全文
摘要:Cookie实现记住登录密码,用户可以自由选择是否记住密码,或者用户之前选择记住了,但是某一次又不想记住了,需要将之前对应的Cookie删除掉 Cookie相当于map 也是键值对的形式,但是并不相同 response.addCookie(Cookie对象名)才会生效; 表单提交用的get 方便地址
阅读全文

浙公网安备 33010602011771号