- 浏览: 110412 次
- 性别:
- 来自: 北京
最新评论
-
liubey:
自己总结的?不错~
垃圾回收的两点三共四标 -
qianban0201:
例子举得很好
Thread和Runnable的区别 -
qianban0201:
描述的很详细,学习了
maven的resources介绍 -
jjhpeopl:
kk_liang 写道博主不觉得你举的栗子会造成线程不安全吗? ...
Thread和Runnable的区别 -
kk_liang:
博主不觉得你举的栗子会造成线程不安全吗?另外类前面加上stat ...
Thread和Runnable的区别
文章列表
大多数读者都知道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 ...