`
文章列表
CountDownlatch 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待,此场景适用在完成所有任务之后才能继续下面的任务的场景 比如下面田径运动员 只有运动员全部跑完比赛才能 进行下面的成绩统计 import java.util.Arrays; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * * CountDow ...
在java的同步关键字synchronized  我们知道用在多线程同步并发情况下,用来在修饰方法或者代码块上 修饰方法 监视的是整个对象 那么如果修饰的分别是静态方法和非静态方法呢 ,效果一样吗? 下面请看我这个例子   package com.test.thread; public class SynchronizedClass { /** * 非静态 synchroized 方法 * @throws InterruptedException */ public synchronized void nonStaticFunction ...
 一,线程池  我们知道线程不可能无限制的创建,但是现实需求中遇到并发请求多任务的时候,会用多线程来处理,但是这么多的线程又不可能全部创建出来,这时我们就会想到线程池了, 说道线程池,它其实就是一种管 ...
并发与并行的区别 如果一个系统中支持两个或者多个动作同时存在,那么我们称这个系统为并行系统, 如果一个系统中支持两个或者多个动作同时执行,那么我们称这个系统为并发系统。 上述描述中我们可以看出两个区别在于存在关键字   如果我们系统中编写多个线程或者进程,在单核处理器cpu下,同时驻留内存,不断切换cpu交替执行,那么我们称它为并发,且这种情况下只能会出现并发,没法并行。   如果在多核处理器中,每个线程或者进程获得独自的cpu处理器进行同时执行,那么我们称之并 行,如果每个线程或者进程在多核处理器中 仍然不能获得独自处理器,需要跟其他线程或者进程竞争抢占资源,那么我们也把它称之为 ...
乐观锁 乐观锁是一种思想,是给数据库表添加一个字段(数据库默认会给表添加一个版本号字段),在更新数据之前会先读取这个字段,更新缓存数据到表中时,再去检查这个字段是否在此期间被其他程序操作过, 如果这个字段被修改过,那么就拒绝更新,此次操作失败。 悲观锁是一种读写期间阻止其操作修改的锁, 乐观锁和悲观锁适用主要还是看业务场景,而不能天真的认为一个好于另一个,乐观锁主要用于写操作少读操作多的场景,因为如果写操作过多,增加与读操作的碰撞概率,导致经常写失败,重新尝试次数增加,影响性能,而悲观锁则是等待前一个结果完成以后,才进行的更新
一,java的类加载要经历七个过程 加载   加载类时加载的第一个过程,在这个阶段,将完成三件事:   1)通过一个类的全限定名获取该类的二进制流   2)将该二进制中的静态存储结构转化为方法区运行时数据结果   3)在 ...
java内存模型(JMM)是线程间通信的控制机制,jmm定义了主内存和线程之间的抽象关系,线程之间的共享变量存储在主内存(main-memory)中,每个线程都有一个私有的本地内存(local memory) ,本地内存中存储了该线程以读/写共享变量的副本。本地内存是jmm的一个抽象概念,并不真实存在。他涵盖了缓存,写缓存区,寄存器以及其他的硬件和编译器优化。java内存模型的抽象示意图如下  从图中可知A 和B两个线程如果通信的话 首先A线程将共享变量刷到主内存中 其次B线程到主内存中加载更新共享变量 这里写的说明的非常好:http://www.infoq.com/cn/articl ...
java 中垃圾回收的方法有哪些呢  1.标记-清理 这个垃圾回收方法 根据名字就可以知道,他的思想就是标记那些要回收的对象,然后统一回收清理,这个方法方法简单,但是会有两个主要问题: (1)效率不高,标记和清除的效率低下,(2)会产生大量的内存碎片,导致程序在分配较大的对象时,没有足够内存提前触发一次GC动作   2 .复制算法  为了解决效率问题,复制算法将可用内存按容量划分为相等的两部分,然后每次使用其中的一块,当一块内存使用完时,就将还存活的对象复制到第二块内存上,然后 一次性清楚完第一块内存,再讲第二块的对象复制到第一块,但是这种方式,内存的代价太大,每次基本都要浪费 ...

jvm知识点-GC知识点

    博客分类:
  • jvm
一,怎么样判断一个对象是否存活的两种方法   1),引用计数法:   所谓引用计数法就是给每个对象设置一个引用计数器,每当有别的对象引用此对象时 ,引用计数器就加一,每当引用失效时,引用计数器就减一,当引用计数器减到零时,表示这个对象为“死对象”,可以被GC回收了,   当然引用计数器也有缺陷,他的缺陷就是无法解决循环引用的问题,比如A对象引用B对象,B对象也引用A对象时,A,B对象的引用计数器都不为零,但是两对象为没有被其他对象引用的“死对象”,无法按照引用计数器规则回收。   2) 可达性算法(引用链法)    该算法的思路是:从一个被称为GC Roots的对象开始向下查找,当整 ...
1,jvm的内存分那些区呢?   方法区:   1),有时候也成永久代,在该区很少发生GC,但不代表不发生GC,在这里进行的GC主要是对常量池的回收和对象类型的卸载   2 )  ,方法去主要是用来存储已被虚拟机加载的类的信息、常量、静态变量、和即时编译后的的代码等数据   3)、该区是被线程共享的   4)、方法区有一个运行时常量池,用于存储静态编译产生的字面量he符号引用。该常量池具有动态性,也就是说常量并不一定是编译时确定的,运行时生成的常量也会存在这个常量池中   虚拟机栈:   1),虚拟机栈也就是我们常说的栈内存,它为java方法服务,每个方法在执行的时候会创建一个 ...
package test; import java.io.File; import java.io.FilenameFilter; import java.io.IOException; import java.util.concurrent.atomic.AtomicInteger; public class MultiFileNaming{ AtomicInteger s=new AtomicInteger(); public static void main(String[] args) throws IOException { String name=& ...
一,图的两种算法   本章承接上一章 具体的一些说明或者资料可以到上一章中寻找 1, 深度优先遍历    说深度优先遍历之前 我们先说说走迷宫的走法,  要探索迷宫中所有的通道,我们需要做以下几种事, 1):选择一条没有标记过的通道,在你走过的路上铺一条绳子; 2):标记所有你第一次路过的路口和通道; 3):当来到一个标记的路口(有绳子的路口)时回退到上一个路口 4):当回退到的路口已经没有可走的通道时继续回退。 这样绳子可以保证你总能找到一条出路,标记保证了你不会两次同时经历一条通道  代码如下 package com.lxy.datastructure.graph; ...
一   图 1,图的描述        在计算机应用中,我们为了表示相连结点所表示的关系建立模型,并且这些结点之间连接很自然而然会让人产生一连串的的疑问:沿着这些连接能否从一个结点到另一个结点呢, 有多少个结点之间是相互连接着呢?两个结点之间哪一条是最短路径呢等等。        要描述这些问题,我们使用一种抽象的数据模型-图数据模型,应用此模型我们可以解决很多现实中的问题,比如地图中的两个城市之间线路问题,电路板中各种元器件与导线的连接问题,学生与各学校的配对问题等等       图的分类大致分为:无向图,有向图,加权图和加权有向图       图的定义:图是由一组顶点和一组能 ...
一,我们知道tomcat作为web服务器以后,我们编写的Servlet 请求中经常出现 中文乱码问题,而出现这些中文乱码,则是以下三种情况  1),来自浏览器地址栏uri携带的中文参数  2),来自页面链接跳转携带的中文参数  3 ),来自表单form中提交成参数   而这些提交方式一般以get和Post提交,那么tomcat是怎么按照什么编码格式解析这些请求参数的呢? 下面请看我的分析, 我们知道不管从get还是post来的请求参数  我们都是以reqest.getParameter(xxx) 和request.getParameterValues(xxx) 来的获取值的 所以我 ...
(1) 在servlet的配置当中,<load-on-startup>5</load-on-startup>的含义是: 标记容器是否在启动的时候就加载这个servlet。 当值为0或者大于0时,表示容器在应用启动时就加载这个servlet; 当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。 正数的值越小,启动该servlet的优先级越高。 web.xml的配置如下: <servlet>   <servlet-name>initservlet</servlet-name>   <servl ...
Global site tag (gtag.js) - Google Analytics