`
jjhpeopl
  • 浏览: 108618 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
大多数读者都知道cache是一种快速小型的内存,用以存储最近访问内存位置。这种描述合理而准确,但是更多地了解一些处理器缓存工作中的“烦人”细节对于理解程序运行性能有很大帮助。 在这篇博客中,我将运用代码示例来详解cache工作的方方面面,以及对现实世界中程序运行产生的影响。 下面的例子都是用C#写的,但语言的选择同程序运行状况以及得出的结论几乎没什么影响。 示例1:内存访问和运行 你认为相较于循环1,循环2会运行多快?
java中list的iterator方法,相信都有用到过,但这里有个很实用的方式。 由于最近系统增加了导出功能,而且一次性就需要导出大量数据,而查询出来这些数据之后,会占用比较大的内存,若是在导出过程中,还需要把这些数据转换成其他对象,这样就会占用更大的内存。 注意:本文只针对内存比较敏感的系统。 为了解决类似这样的问题,就需要利用list的iterator方法了,使用这个迭代器来进行循环数据。先看一下例子: List<String> list = new ArrayList<String>(); list.add("1"); li ...
Collections.sort()方法有两种参数类型,如下: Collections.sort(List<T> list),直接给定需要排序的list,然后按照自然排序进行排序。 Collections.sort(List<T> list,Comparator<? super T> c),这个方法需要提供比较器,然后排序时会根据比较器的实现逻辑进行排序。 简单看一下提供比较器的方法实现,里面有一段代码需要注意,这段代码其实就是最终决定了排序时是升序还是降序。 private static <T> int countRunAndMakeA ...
java线程是映射到操作系统的原生线程之上的,若是要唤醒或阻塞一个线程,都需要操作系统来帮忙完成,这就需要从用户态转换到内核态中,这种转换需要耗费很多的处理时间,有可能比用户代码执行时间都要长。 为了避免以上情况出现,一般能不用锁就不用锁,若是不得不使用的情况下,可以使用偏向锁、自旋锁等。 1、重量级锁 锁的意义是什么呢? 当数据被多个线程共享时,为了保证数据的正确性,避免竞争导致数据错误,这时就必须使用锁,让数据同时只能被一个线程得到并处理。 重量级锁在JVM中又叫对象监视器(Monitor),它包含了一个竞争锁的队列和一个信号阻塞队列,前者负责做互斥,后者负责线程同步。 ...
在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在; 2. 如果不存在,则插入;3.如果存在,则更新。   这种情况就可以使用replace into语句来解决,但是有没有问题,且看下去   下面是数据更新前的 ...
java的垃圾回收主要是来解决两个问题的: 1、找到内存空间里的垃圾 2、回收垃圾,让程序能再次利用这部分空间   这里插一句解释什么是垃圾:就是分配到堆中的那些不能通过程序引用的对象称为非活动对象,也即是占着 ...
相信大家对单例模式应该不陌生,每个人都能写出好多种单例模式的实现,总结来说就有五种:懒汉、饿汉、静态内部类、枚举和双重检查锁定。针对这几种方式的代码,可以在网上搜索到,这里就不再细说。   最近又看了一遍单例的几种实现方式,发现了一些其他东西。先看以下单例模式的实现代码 public class Singleton2 {    private Singleton2(){}    private static Singleton2 instance;    public static synchronized Singleton2 getInstance() {        if (i ...
最近上线一个定时任务:根据条件查询数据,然后生成excel,当成邮件中的附件发送给指定用户。在这个定时任务执行的时候,从gc的日志部分如下: 2016-10-12T15:10:56.017+0800: 2130.042: [GC2016-10-12T15:10:56.017+0800: 2130.042: [ParNew: 605431K->65838K(613440K), 0.0397940 secs] 1115602K->592670K(2029056K), 0.0400670 secs] [Times: user=0.19 sys=0.01, real=0.04 s ...
java的移位运算有三种:左移<<,有符号右移>>,无符号右移>>>   对于左移<<,不管正负数,操作数右边的低位以0补齐,相当于乘以2的n次方,n为移动的位数。 比如1<<2,0000 0001位移两位的话,变为0000 0100,也就是4。 其实相当于1乘以2的2次方,得到结果为4,-1<<2类似,得到的结果为-4   但1<<32,可以想象二进制的移位,那个1移到了尽头,这时最低位不在补0,而是补1,从而得到的结果为1其自身   其实操作数移位的位数若超过本身类型占用位数,比如I ...
前几天开发一个多线程执行的任务,在多线程执行的时候,一直在报错,如下: An attempt by a client to checkout a Connection has timed out. com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting to acquire a resource from com.mchange.v2.resourcepool.BasicResourcePool@29426a4 -- timeout at awaitAvailable() 从异常信 ...
现在越来越多的使用git来做代码管理工具,它的确比svn更加强大。 前几天在使用git合并代码的时候,发现一个小问题 比如branch1修改文件a.txt中的一处内容,把a=3改为了a=4 同时branch2也修改了文件a.txt,并且是把a=3改为a=5 以上两个分支都进行了提交,并push到了远程仓库 这时,我们为了上线,需要把branch2这个分支合并到branch1中,于是我们在branch1分支上执行了合并命令:git merge origin/branch2 这时候你会发现a.txt文件有冲突,然后我们以branch1的内容为准,即相当于覆盖掉branch2的修改,当 ...
在开发maven项目时,一般都会把配置文件放到src/main/resources目录下,针对这个目录,maven的resources对其进行单独的配置。   resources配置一般如下: <resources>  <resource>    <directory>src/main/resources</directory>    <filtering>true</filtering>    <includes>      <include>context ...
Runnable比Thread要多一些优势,主要是以下两点 避免点继承的局限,一个类可以继承多个接口。 <!--?xml version="1.0" encoding="UTF-8" standalone="no"?--> 适合于资源的共享 第一点就不多说了,至于第二点看以下两个代码示例就清楚了 static class TicketThread extends Thread {    // 一共十张票    private int ticketNum = 10;    @Override  ...
String的split方法可以按照正则表达式把string数据拆分成数组 如下: String test1 = "1,2,3"; System.out.println(test1.split(",").length); 结果为3 若test1=“1,2,3,”,结果为3 若test1=“,1,2,3”,结果为4,第一个元素就是空 // Add segments before each match found while(m.find()) { if (!matchLimited || matchList. ...
最近在开发过程中,发现工程中的一些包有问题,主要分为以下两种: 1、最新包(版本号未变,只是被更新了)少了一个方法 2、jar包被更新了,但是无法更新最新的包下来   首先先确定一下更新包会导致更新哪些文件?下面都以a-1.0.1-snapshot.jar包为例 当你更新了a-snapshot.jar的内容,并上传到maven服务器时,会更新一个元数据文件maven-metadata.xml,这个文件内容类似如下 <!--?xml version="1.0" encoding="UTF-8" standalone="no&qu ...
Global site tag (gtag.js) - Google Analytics