2015-04-10 Eric Wang
volatile概述 volatile关键字是一个类型修饰符,被设计用来修饰被不同线程访问和修改的变量,在JVM1.2之前,Java的内存模型实现总是从主存读取变量,是不需要进行特别的注意的。而随着JVM的成熟和优化,现在在多线程环境下volatile关键字的使用变得非常重要。 在当前的Java内存模型下,线程可以把变量保存在本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的拷贝,造成数据的不一致。 要解决这个问题,需要把变量声明为volatile(不稳定的),以后用到该变量都会到主存中进行存取,一般多任务环境下各任务间共享 继续阅读 »
2015-08-15 王财勇
训练阶段我们采用了分批处理,可以优化部分内存。 原先我们的代码使用一次性载入数据,然后开始若干次迭代,直至收敛。这样保存image与shape的数据矩阵Data就一直占用内存,但实际上,数据集的image与shape 的作用仅仅是计算$\Delta X$和$\Phi$,两变量的定义参考《 Supervised Descent Method and its Applications to Face Alignment》,其实也就是init shape与true shape的差值以及init shape的特征向量。计算完了,Data就没用了。于是我们设想分批处理,每次迭代载入一次数据,用完了就clear。这样就需要载入多次,可能时间上 继续阅读 »
2017-04-15 Kevin
Hash一致性算法 介绍 安装 介绍 我们知道一台reids机器最大内存是有上限的,现在随着业务的发展,现有一台redis内存不够用,这个时候我们使用n台服务器,那怎么做到key跟服务器的映射问题。 继续阅读 »
2015-12-10 summer
由于python实现了多线程的功能,现在为了提高计算机多核的效率,需要把多线程的程序修改成多进程的计算模式,但是发现进程和线程的执行还是有很大区别。也许之前的工作中没有关注过多线程和多进程的程序吧! 子进程和父进程的工作原理 在python中,使用os.fork()之后,在内存中把父进程的代码及内存分配情况拷贝一份生成子进程的运行空间,这样子进程的所有代码都与父进程一样,两个进程之间的运行是独立的,互不影响。 继续阅读 »
2014-10-02 Xiaosong Gao
Mac
这几天在给一台iMac安装Mac OS X,原先装的是10.5.8,而现在想升级到10.9,但是这台iMac只有1G的内存,而10.7+开始都只支持2G以上的内存,否则无法安装。 这时,需要对安装U盘中的包进行修改。找到U盘中的Package文件夹里面的OSInstall.mpkg文件,把它拷贝到本地硬盘某个文件夹中。 继续阅读 »
2016-08-15 craneyuan
在Java中,一个字符串可以使用下面这两种方式进行创建: String x = "abc"; String y = new String("abc"); 这两种创建字符串的方式有什么不同呢? 双引号 VS 构造函数 这个问题可以用下面这两个简单的代码实例来回答。 例子1: String a = "abcd"; String b = "abcd"; System.out.println(a == b); // True System.out.println(a.equals(b)); // True a==b是true,因为a和b都引用同一块内存地址。 当相同字符内容的字符串多次创建时,编译器只为其分配一块内存, 继续阅读 »
2015-09-21 derekchan
每个第三季度都是最忙的,工程师活动,部门事务,终于得以闲下来打理自己的网站了,之后会恢复发布文章的频率(每周至少一篇),有什么聊什么,也沉淀下自己的文笔。 PS:博客没怎么去推广,就当作自己跟自己的谈话吧。 今天来浅谈下设计模式中的单例模式。单例模式是最常用到的设计模式之一,有时候在单线程中需要多次调用到同一个类对象,每实例化一次,内存君就多创建一个内存地址,这样就造成了资源浪费,严重的冗余。利用单例模式则可以有效的减少这种资源浪费。 继续阅读 »
2014-07-21 veryyoung
(1)ClassLoader基本概念   与C或C++编写的程序不同,Java程序并不是一个可执行文件,而是由许多独立的类文件组成的,每一个文件对应一个Java类。 此外,这些类文件并非全部装入内存,而是根据程序需要逐渐载入。 ClassLoader是JVM实现的一部分,ClassLoader包括bootstrapclassloader(启动类加载器),ClassLoader在JVM运行的时候加载Java核心的API,以满足Java程序最基本的需求,其中就包括用户定义的ClassLoader。 这里所谓的用户定义,是指通过Java程序实现的两个ClassLoader:一个是ExtClassLoader,它的作用是用来加载Ja 继续阅读 »
2016-02-03 ruki
Bloom Filter是由Bloom在1970年提出的一种快速查找算法,通过多个hash算法来共同判断某个元素是否在某个集合内。可以用于网络爬虫的url重复过滤、垃圾邮件的过滤等等。 它相比hash容器的一个优势就是,不需要存储元素的实际数据到容器中去来一个个的比较是否存在。 只需要对应的位段来标记是否存在就行了,所以想当节省内存,特别适合海量的数据处理。并且由于省去了存储元素和比较操作,所以性能也比基于hash容器的高了很多。 但是由于bloom filter没有去比较元素,只通过多个hash来判断唯一性,所以存在一定的hash冲突导致误判。误判率的大小由hash函数的个数、hash函数优劣、以及存储的位空间大小共同决定。 继续阅读 »
2016-09-16 craneyuan
题目描述 给定一个已排序的数组,去除数组中的重复元素,只保留一个重复的元素,并且返回新的数组长度。 要求: 不要给数组分配额外的空间,你必须使用常量的内存大小进行原地操作。 例如: 给出数组A=[1,1,2],你的函数调用之后必须返回长度length=2,并且A现在变成[1,2]。 输入 一个已排序的数组,例如[1,1,2]。 输出 返回数组新的长度,例如length=2。 快慢指针法 设置fast指针遍历数组,slow指针指向不重复元素的下一位。 more java public static int removeDuplicates(int[] nums) { if (nums.length < 1) 继续阅读 »