`
文章列表
如何区分垃圾 上面说到的“引用计数”法,通过统计控制生成对象和删除对象时的引用数来判断。垃圾回收程序收集计数为0的对象即可。但是这种方法无法解决循环引用。所以,后来实现的垃圾判断算法中,都是从程序运行的根节点出发,遍历整个对象引用,查找存活的对象。那么在这种方式的实现中,垃圾回收从哪儿开始的呢?即,从哪儿开始查找哪些对象是正在被当前系统使用的。上面分析的堆和栈的区别,其中栈是真正进行程序执行地方,所以要获取哪些对象正在被使用,则需要从Java栈开始。同时,一个栈是与一个线程对应的,因此,如果有多个线程的话,则必须对这些线程对应的所有的栈进行检查。 同时,除了栈外,还有系统运行时的 ...
可以从不同的的角度去划分垃圾回收算法: 按照基本回收策略分 引用计数(Reference Counting): 比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收 时,只用收集计数为0的对象。此算法最致命的是无法处理循环引用的问题。标记-清除(Mark-Sweep): 此算法执行分两阶段。第一阶段从引用根节点开始标记所有被引用的对象,第二阶段遍历整个堆,把未标记的对象清除。此算法需要暂停整个应用,同时,会产生内存碎片。 复制(Copying): 此算法把内存空间划为两个相等的区域,每次只使用其中一 ...
一、Java对象的大小: 基本数据的类型的大小是固定的,这里就不多说了。对于非基本类型的Java对象,其大小就值得商榷。 在Java中,一个空Object对象的大小是8byte,这个大小只是保存堆中一个没有任何属性的对象的大小。看下面语句: Object ob = new Object(); 这样在程序中完成了一个Java对象的生命,但是它所占的空间为:4byte+8byte。4byte是上面部分所说的Java栈中保存引用的所需要的空间。而那8byte则是Java堆中对象的信息。因为所有的Java非基本类型的对象都需要默认继承Object对象,因此不论什么样的Ja ...
一、数据类型: Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身, ...
因为一直使用的是jquery.validate.js,在某个需求中想启用逐条验证, 但是看官方的API文档貌似没有启用逐条验证的方法, 于是自己就参考着validate.form.js,把jquery.validate.js改了改 主要修改了checkForm方法,每次验证不通过,就直接跳出验证循环 如下: checkForm: function () { this.prepareForm();
一、项目用到了ckeditor插件,做完上传图片功能发现个问题,在将内容保存时文本img标签多了style样式属性,在PC端没有问题,但手机端显示异常,适配不了,经过多方面的研究,问题得到解决,晒出出解决办法,如下: 1、找到ckeditor插件路径下config.js文件 2、在里面加上如下配置: CKEDITOR.on('instanceReady', function (ev) { var editor = ev.editor, dataProcessor = editor.dataProcessor, htmlFilter = dataPr ...
反射,当时经常听他们说,自己也看过一些资料,也可能在设计模式中使用过,但是感觉对它没有一个较深入的了解,这次重新学习了一下,感觉还行吧! 一,先看一下反射的概念: 主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。 反射是Java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以再运行时装配,无需在组件之间进行源代码链接。但是反射使用不当会成本很高!
单例模式是设计模式中比较简单的一种模式,也是使用的比较多的一种模式。 特别是在某些对象只需要一个时,比如线程池、缓存、日志对象、注册表对象等。 如果创建了多个,可能会导致很多问题。比如程序行为异常、资源使用过量等。 单例模式确保程序中一个类最多只有一个实例。 单例模式提供访问这个实例的全局点。 在Java中单例模式需要:私有构造器、一个静态方法、一个静态变量。 如果使用多个类加载器,可能会导致单例失效而产生多个实例。
只要我们编写JavaScript,都必须用到几个常用的函数,比如,addEventListener 和 attachEvent,并不是为了很超前的技术和功能,只是一些基本的任务,原因是各种浏览器之间的差异造成的。时间过去了这么久,技术在不断的进步,仍然有一些JavaScript函数是几乎所有Web程序员必备的,或为了性能,或为了功能。 防止高频调用的debounce函数 这个 debounce 函数对于那些执行事件驱动的任务来说是必不可少的提高性能的函数。如果你在使用scroll, resize, key*等事件触发执行任务时不使用降频函数,也行你就犯了重大的错误。下面这个降频函数 deb ...
LVS(Linux Virtual Server) 学习笔记 1.LVS简介 最近学习了LVS(Linux Virtual Server)的集群技术,把搜集的一些资料整理一下。LVS(Linux Virtual Server)其实就是针对高可伸缩、高可用网络服务的需求,给出了基于IP层和基于内容请求分发的负载平衡调度解决方法,并在Linux内核中实现了这些方法,将一组服务器构成一个实现可伸缩的、高可用网络服务的虚拟服务器。 所以,lvs需要内核有ipvs支持,确保你的内核支持ipvs后,只需安装ipvsadm就可以把一台服务器配置成负载调度器(Load Balancer)。对外提供服务的I ...
存储过程的简介 1、什么是存储过程:存储过程可以说是一个记录集吧,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候调用他就行了。 2、存储过程的好处: (1).由于数据库执行动作时,是先编译后执行的。然而存储过程是一个编译过的代码块,所以执行效率要比T-SQL语句高。 (2).一个存储过程在程序在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率。 (3).通过存储过程能够使没有权限的用户在控制之下间接地存取数据库, ...
一、拦截器的概念: java里的拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行, 同时也提供了一种可以提取action中可重用部 ...
一、什么是事务: 事务指的是逻辑上的一组操作,这组操作要么全部成功,要么全部失败。 (例如:银行转账,如果张三给李四转1000元,那么李四得收到这1000元,假如中间出现异常,停电或者其他原因,张三的钱转出去了 ...
import java.util.*; import java.text.*; class test{ public static void main(String []args){ Calendar c = Calendar.getInstance();//获得一个日历的实例 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = null; try{ date = sdf.parse("2006-0 ...
import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import net.sf.json.JSONArray; import net.sf.json.JSONObject; public class MainClass { public static void main(String[] args) { Test ...
Global site tag (gtag.js) - Google Analytics