JAVA系列-引用

 强引用:对于强引用对象,即使出现OOM也不会进行回收;软引用:内存够用就保存,不够用就回收;弱引用:无论内存是否够用,都回收(WeakHashMap);虚引用:不能单独使用也不能通过它访问对象,虚引用必须与引用队列(ReferenceQueue)联合使用,其意义在于说明一个对象已经进入finalization阶段,可以被gc回收,用来实现比finalization机制更灵活的回收操作;引用队列:创建引用的时候可以指定关联的队列,当GC释放对象内存的时候,会将引用加入到引用队列ReferenceQueue; java提供了4种引用类型,在垃圾回收的时候,都有各自的特点。ReferenceQueue是用来配合引用工作的,没有ReferenceQueue一样可以运行。创建引用的时候可以指定关联的队列,当GC释放对象内存的时候,会将引用加入到引用队列,如果程序发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的内存被回收之前采取必要的行动这相当于是一种通知机制。当关联的引用队列中有数据的时候,意味着引用指向的堆内存中的对象被回收。通过这种方式,JVM允许我们在对...
IT猿 IT猿·2020-03-27

JAVA系列-并发

1)Lock与synchronized的区别Lock是接口,而synchronized是java中的关键字;synchronized不会导致死锁现象发生,而Lock可能造成死锁现象;Lock可以让等待锁的线程响应中断,而synchronized却不行;通过Lock可以知道有没有成功获取锁,而synchronized却无法办到;Lock可以提高多个线程进行读操作的效率;在性能上来说,如果竞争资源不激烈,两者的性能差不多,而当竞争资源非常激烈时(即有大量线程同时竞争),此时Lock的性能要远远优于synchronized。总结:这两者的使用在具体使用时要根据适当情况选择2)公平锁ReentrantLock设置公平锁true3)非公平锁ReentrantLock默认非公平锁,吞吐量比公平锁大4)可重入锁(递归锁)ReentrantLocksynchronized5)独占锁(写锁)/独享锁(读锁)/互斥锁 独占锁:指该锁只能被一个线程所有;ReentrantLockSynchronized 共享锁:指该锁可被多个线程所持有;ReentrantReadWriteLock其读锁...
IT猿 IT猿·2020-03-27

JAVA系列-GC

1)常见OOM异常类型(1)StackOverFlowError栈内存溢出,用于深度方法调用(循环递归);(2)OutOfMemoryError:Javaheapspace用于变量申请的空间大于jvm的最大值;(3)OutOfMemoryError:GCoverheadlimitexceedGC回收的时间过长时会抛出OutOfMemoryError,过长的定义是,超过98%的时间用来做GC并且回收了不到2%的堆内存,连续多次GC都只回收了不到2%的极端情况下才会抛出。假如不抛出GCoverheadlimit错误会发生什么情况?那就是GC清理的这么点内存很快会再次填满,迫使GC再次执行,这样就形成恶性循环,CPU使用率一直是100%,而GC却没有任何成果.(4)OutOfMemoryError:Directbuffermemory堆外内存溢出,主要呈现在写NIO程序经常使用ByteBuffer来读取或者写入数据,这是一种基于通道(Channel)与缓冲区(Buffer)的I/O方式,它可以使用Native函数库直接分配堆外内存,然后通过一个存储在Java堆里面的DirectByteBuf...
IT猿 IT猿·2020-03-27

JAVA系列-JVM

JVM体系结构概览 JVM参数调优及相关参数JVM的参数类型标配参数:java-version; java-helpX参数:-Xint解释执行;-Xcomp第一次使用就编译;-Xmixed混合模式(先编译再执行)XX参数:Boolean类型:-XX:(+|-)属性+或者-某个属性值;+表示开启;-表示关闭eg: -XX:+PrintGCDetailskv设值类型:-XX:key=value说明:键值对赋值eg:-XX:MetaspaceSize=128m; -XX:MaxTenuringThreshold=15两个经典参数:-Xms和-Xmx-Xms:等价于-XX:InitialHeapSize-Xmx:等价于-XX:MaxHeapSize如果查看一个正在运行的java程序,是否开启jvm参数是否开启?具体值是多少?jps-ljinfo-flagPrintGCDetails进程编号jinfo-flagMetaspaceSize进程编号jinfo-flags进程编号(所有配置:JVM配置+命令行中人工配置)-XX:+PrintFlagsInitia...
IT猿 IT猿·2020-03-27

javascript 模块化编程----模块的写法

一、原始写法模板就是实现特定功能的一组方法只要把不同的函数(以及记录状态的变量)简单地放在一起,就算是一个模块。  functionm1(){    //...  }  functionm2(){    //...  }上面的函数m1()和m2(),组成一个模块。使用的时候,直接调用就行了。这种做法的缺点很明显:"污染"了全局变量,无法保证不与其他模块发生变量名冲突,而且模块成员之间看不出直接关系。二、对象写法为了解决上面的缺点,可以把模块写成一个对象,所有的模块成员都放到这个对象里面。  varmodule1=newObject({    _count:0,    m1:function(){      //...    },    m2:function(){      //...    }  });上面的函数m1()和m2(),都封装在module1对象里。使用的时候,就是调用这个对象的属性。  module1.m1();但是,这样的写法会暴露所有模块成员,内部状态可以被外部改写。比如,外部代码可以直接改变内部计数器的值。  module1._count=5;三、立即执行函数写法...

聊聊高并发(二十五)解析java.util.concurrent各个组件(七) 理解Semaphore

前几篇分析了一下AQS的原理和实现。这篇拿Semaphore信号量做样例看看AQS实际是怎样使用的。Semaphore表示了一种能够同一时候有多个线程进入临界区的同步器,它维护了一个状态表示可用的票据,仅仅有拿到了票据的线程尽能够进入临界区,否则就等待。直到获得释放出的票据。Semaphore经常使用在资源池中来管理资源。当状态仅仅有1个0两个值时,它退化成了一个相互排斥的同步器。类似锁。以下来看看Semaphore的代码。它维护了一个内部类Sync来继承AQS,定制tryXXX方法来使用AQS。我们之前提到过AQS支持独占和共享两种模式,Semaphore明显就是共享模式。它支持多个线程能够同一时候进入临界区。所以Sync扩展了Shared相关的方法。能够看到Sync的主要操作都是对状态的无锁改动,它不须要处理AQS队列相关的操作。在聊聊高并发(二十四)解析java.util.concurrent各个组件(六)深入理解AQS(四)我们说了AQS提供了tryXXX接口给子类扩展,相当于给子类一个机会,能够自己处理状态,决定是否入同步队列。1.nonfailT...

Java开源内容管理CMS系统J4CMS的几个样式

www.j4cms.comjava开源内容管理页面直接编辑bootstrap3样式default样式metro样式oschina样式leblog样式foundation样式...

java IO回想小结

javaIO原理IO流用来处理设备之间的传输数据输入(input):读取外部数据(磁盘。等存储设备)到程序()(内存)中输出(output):将程序(内存)数据输出到磁盘等存储设备javaIO原理IO流用来处理设备之间的传输数据输入(input):读取外部数据(磁盘,等存储设备)到程序()(内存)中输出(output):将程序(内存)数据输出到磁盘等存储设备流的分类依照操作数据单位不同。字节流(8bit),字符流(16bit)依照数据流流向的不同分为:输入流,输出流依照流的角色分为:节点流,处理流抽象基类  字节流字符流输入流InputStreamReader输出流OutputStreamWriter由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀...

javascript实现贪吃蛇

<html><head><style>body{background:#444;}.rect{border:1pxsolid#94F;width:680px;height:680px;}.gridred{width:38px;height:38px;background:red;border:1px#555solid;float:left}.gridgreen{width:38px;height:38px;background:green;border:1px#555solid;float:left}.gridblue{width:38px;height:38px;background:blue;border:1px#555solid;float:left}.st{width:100;height:40;font-size:30;font-family:Georgia;color:#F40;margin:0.5cm;top:800px;background:#FFF;text-align:center;}h1.important{color:#FFF...

JavaScript对象分类

JavaScript中的对象分类我们可以把对象分成几类。宿主对象(hostObjects):由JavaScript宿主环境提供的对象,它们的行为完全由宿主环境决定。内置对象(Built-inObjects):由JavaScript语言提供的对象。      固有对象(IntrinsicObjects):由标准规定,随着JavaScript运行时创建而自动创建的对象实例。    原生对象(NativeObjects):可以由用户通过Array、RegExp等内置构造器或者特殊语法创建的对象。    普通对象(OrdinaryObjects):由{}语法、Object构造器或者class关键字定义类创建的对象,它能够被原型继承。 宿主对象JavaScript宿主对象千奇百怪,但是前端最熟悉的无疑是浏览器环境中的宿主了。在浏览器环境中,我们都知道全局对象是window,window上又有很多属性,如document。实际上,这个全局对象window上的属性,一部分来自JavaScript语言,一部分来自浏览器环境。JavaScript标准中规定了全局对象属性,W...

javaSript 处理电脑和浏览器pc端缩放对页面的影响

由于用户的个人习惯或其他原因,可能会调整到电脑上的缩放比例或者浏览器的缩放比例,如果访问页面会看起来比较不好看,电脑上的缩放: 浏览器上的缩放:  解决方法:functiondetectZoom(){varratio=0,screen=window.screen,ua=navigator.userAgent.toLowerCase();if(window.devicePixelRatio!==undefined){ratio=window.devicePixelRatio;}elseif(~ua.indexOf('msie')){if(screen.deviceXDPI&&screen.logicalXDPI){ratio=screen.deviceXDPI/screen.logicalXDPI;}}elseif(window.outerWidth!==undefined&&window.innerWidth!==undefined){ratio=window.outerWidth/window.innerWidth;}if...

javaScript---RegExp

字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在。比如判断一个字符串是否是合法的Email地址,虽然可以编程提取@前后的子串,再分别判断是否是单词和域名,但这样做不但麻烦,而且代码难以复用。正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。所以我们判断一个字符串是否是合法的Email的方法是:创建一个匹配Email的正则表达式;用该正则表达式去匹配用户的输入来判断是否合法。因为正则表达式也是用字符串表示的,所以,我们要首先了解如何用字符来描述字符。在正则表达式中,如果直接给出字符,就是精确匹配。用d可以匹配一个数字,w可以匹配一个字母或数字,所以:'00d'可以匹配'007',但无法匹配'00A';'ddd'可以匹配'010';'ww'可以匹配'js'; .可以匹配任意字符,所以:'js.'可以匹配'jsp'、'jss'、'js!'等等。 要匹配变长的字符,在正则表达式中,用*表示任意个字符...
IT猿 IT猿·2020-03-27

JavaScript 特效之四大家族(offset/scroll/client/event)

 三大系列:offset、scroll、client事件对象:event(事件被触动时,鼠标和键盘的状态)(通过属性控制) 三大系列都是以DOM元素节点的属性形式存在的。类比访问关系,也是以属性形式存在。不同点在于,访问关系是为了获取其他节点,而三大系列是为了获取元素节点更多的信息。     1.offset系列offset:偏移、补偿、位移offset系列是js中的一套获取元素尺寸的便捷办法。 (1) offsetWidth 和 offsetHeight (检测盒子自身宽高+padding+border)这两个属性,他们绑定在了所有的节点元素上。获取之后,只要调用这两个属性,我们就能够获取元素节点的宽和高。行内式、内嵌式、外链式都可以获取到。offsetWidth=width+padding+border;offsetHeight=Height+padding+border;不包括margin。 (2) offsetLeft 和&nbs...

JavaScirpt对象原生方法

Object.assign()Object.assign()方法用于合并对象,只会合并可枚举的属性constobj1={a:1}constobj2=Object.assign({},obj1)//将一个空对象和obj1合并在一起,相当于你复制对象obj1.a=2console.log(obj2.a)//1两个对象是独立的。constobj3={a:{b:1}}constobj4=Object.assign({},obj3)//将obj3和一个空对象合并在一起obj3.a.b=2console.log(obj.4.a.b)//2两个对象又不是独立的了,,合并的对象属性里面如果还是对象,那么合并后就会存在这种情况。consta={a:1}constb={b:2}constc=Object.assgin(a,b,{c:3})console.log(c)//{a:1,b:2,c:3}如果合并的对象都有某一个相同的属性名,则后面的覆盖掉前面的对象。 Object.create()Object.create()方法使指定的原型对象和属性去创建一个新对象constaa=Object.cre...

JavaScript-window

window.closedwindow.closed检测页面是否被关闭,关闭为true未关闭为false window.consolewindow.console返回一个console对象的引用,console对象提供了向浏览器控制台打印日志的功能,并不展示给用户console.log('aa')console.dir(obj)//也可以打开一个有排列的对象 window.devicePixelRatiowindow.devicePixelRatio属性返回当前设备的无力香色分比例和css像素分辨率的比值,就是像素大小的比例,也就是一个css像素的大小相对于一个物理像素的大小的比值,就好比iphone分辨率是750X1334我们的UI给的设计稿也是750X1334但是我们做页面布局的时候会在ui给的设计稿的基础上/2。因为呢,iphone6的视窗是375x667所以iphone6的设备像素比=750/375=2 window.documentwindow.document指向当前窗口内的文档节点(下一篇文章会将document) window.f...
IT猿 IT猿·2020-03-27
首页上一页...561562563564565...下一页尾页