这篇文章想记录下Java的GC的一些细节,例如什么时候JVM会垃圾回收?
哪些对象将会被回收?还会讨论下哪些对象会进入到老年代。

注意: 你需要先知道 Eden/Old/Minor gc/Full gc/S0 S1这些都代表什么

  • Eden 年轻代中的一部分,年轻代 * 80%
  • S0 年轻代中的一部分,年轻代 * 10%
  • S1 年轻代中的一部分,年轻代 * 10%
  • Old 年老代
  • Minor gc 针对年轻代的垃圾回收,快,程序不会暂停
  • Full gc 针对年老代的垃圾回收,慢,程序会暂停,俗称 Stop The World

查看全部


我原名胡胜冬,双King是我大学的时候,打游戏用到的名字,现在虽然不打游戏了,还保留了这个名字,用作笔名。男,日常开发语言是Java,30岁,从事Java已经有9年时间了,不敢说高手,每天都在学习中,不学习就要落后。

在宝驾科技、京东待过,目前在国美,我刚开始工作的时候,是2012年,一个最深的感受是网上的文档比较少,资料也很少,那个时候还是stucts和jsp的时代,jdk也用的1.5或者1.6,遗憾的是在刚开始工作的时候,没有能找到一个正确的学习方法,导致工作的前几年,技术并没有出现特别大的进步,一般来说,刚入门的前2年,会接受大量的知识,技术水平也会一天一个样子,甚为惋惜。现在也在恶补中。

写这个博客,也断断续续好几年,中间有过停顿,近期又拾起来了,希望可以把自己的所学,能够讲清楚,对自己来说是一个提升,如果能让别人也学到一些,尤其是对于新入行的Java开发人员,有一点点的帮助,那就更好了。

查看全部


最近在看IP分片重组的部分,在网上搜索了一下RFC815的中文翻译文章,没有找到一个合适的,索性自己下载了原版文档来看,正好以前并没有翻译过文档,RFC815文档也不是很长,正好拿来开始,翻译的也有许多自己不太明白,后续再完善吧。

David D. Clark
MIT计算机科学实验室
计算机系统通讯组
1982年7月

查看全部


(1)锁表查询的代码有以下的形式:

1
select count() from v$locked_object;select from v$locked_object;

(2)查看哪个表被锁

1
select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;

(3)查看是哪个session引起的

1
select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time;

(4)杀掉对应进程执行命令:

1
2
alter system kill session’1025,41’;
//其中1025为sid,41为serial#.

全文完。


本文翻译自rel=”shortcut icon” considered harmful,并不是原创。

大多数的网站使用下面的HTML代码来指定favicon:

1
<link rel='shortcut icon' href='/favicon.ico'>

看起来很好,是吗?猜猜看,并不是!

今天,我学习了shortcut不是一个有效的链接符,确实,这并不在HTML5的4.12.5关于link类型的说明中,实际上,这可能是IE特有的属性,在IE之外,应该使用rel=”icon”更好。

查看全部


为什么处理有序数据比无序的数组要快呢?这个问题在stackoverflow上面有很高的投票数,虽然涉及的原理很基础,但是也有必要翻译一下,看看具体的解释,原文链接


1 问题

下面有一段C++的代码看起来很奇怪,因为一些未知的原因,排序之后的代码速度奇迹般的比没有排序的时候快6倍。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <algorithm>
#include <ctime>
#include <iostream>
int main()
{
// Generate data
const unsigned arraySize = 32768;
int data[arraySize];
for (unsigned c = 0; c < arraySize; ++c)
data[c] = std::rand() % 256;
// !!! With this, the next loop runs faster
std::sort(data, data + arraySize);
// Test
clock_t start = clock();
long long sum = 0;
for (unsigned i = 0; i < 100000; ++i)
{
// Primary loop
for (unsigned c = 0; c < arraySize; ++c)
{
if (data[c] >= 128)
sum += data[c];
}
}
double elapsedTime = static_cast<double>(clock() - start) / CLOCKS_PER_SEC;
std::cout << elapsedTime << std::endl;
std::cout << "sum = " << sum << std::endl;
}

查看全部


在我的另外的一篇博文为什么处理有序数组比无序数组要快中,提到了当代的CPU都有很深的pipeline,那么CPU的pipeline到底是什么东西呢?在CPU的工作流程中起到了什么样的作用呢?于是搜到了这么一篇文章。CPU的Pineline遨游之旅

一个好的程序员有必要去了解下在处理器的内部是怎么工作的,CPU就是关键。
那么在CPU内部发生了什么事情呢?执行一条命令需要多长时间?一款新的CPU有12层流水线或者18层又代表了什么呢?甚至31层?

应用程序一般把CPU当作一个黑盒子,指令按一定的顺序进入这个黑盒子,按顺序出来,这里面就有一些门道了。作为一个开发人员,学习下CPU内部发生了什么是非有用,特别是当你在进行调优的时候。

这篇文章就是要说说基于X86架构下的CPU的深度流水线(说明文章的目的和内容,背景非常重要)。

查看全部