- 浏览: 232222 次
- 性别:
- 来自: 杭州
最新评论
-
Reaper:
还是自己懒惰,期望合并代码讲解
关于FastHashMap -
lijunwyf41:
大并发的情况,建议用 ConcurrentHashMap 类
关于FastHashMap -
shiqicai:
但是这样的话,后面一系列有关性能的联系都没有办法做了啊!
SICP Exercise 1.22 遇到的问题 -
astarring:
可惜我《深入理解计算机系统》才刚开始看呀!而且我是学java的 ...
深入java虚拟机1-4章, all in sandbox(1) -
qchqz123:
BDB 在MySQL数据库中,BDB是一种事务安全型表类型。 ...
unix c语言环境下数据库开发-环境配置
文章列表
垃圾收集
引用计数
堆中每一个对象都有一个引用计数。当一个对象被创建了,并且指向该对象的引用被分配给一个变量,这个对象的引用计数被置为1.当任何其他变量被赋值为对这个对象的引用时,计数加1。当一个对象的引用超 ...
java虚拟机的堆里存放着正在运行的java程序所创建的所有对象。当一个对象不再被程序引用时,它所使用的堆空间可以被回收,以便后续的新对象所使用。垃圾收集器必须能够断定哪些对象是不再被引用的,并且能够把它们所占据的堆空间释放出来。在释放不再被引用的对象的过程中,垃圾收集器运行将要被释放的对象的终结方法(finalizer)。
除了释放不再被引用的对象,垃圾收集器还要处理堆碎片。在一个虚拟内存系统中,增长的堆所需要的额外分页(或交换)空间会影响运行程序的性能。
垃圾收集
垃圾收集算法要做两件事情
1) 检测出垃圾对象
2)回收垃圾对象所使用的堆空间并还给程序
垃圾检测通常通过建立一个根对象 ...
java虚拟机在class文件中对应类型的常量池中使用了一种类似utf8格式的变体来存储一个常量字符串。
(这里请不要和java se的string api搞混淆,这里谈的是class文件的文件格式问题,我这里只是感觉这种方式比较节省空间,故拿出来请大家看一下。)
utf-8编码模式允许字符串中的所有unicode字符以2个字节的形式表示,而ascii码(空字符null除外)以一个字节表示。
从'\u0001’到'、'\u007f'的所有字符都使用一个字节表示。
字节0: 0
6543210
空字符null('\u0000')和从'\u0080'到'\u07ff'的所有字符使用两 ...
java栈
每当启动一个新线程的时候,java虚拟机都会为它分配一个java栈。java以栈帧为单位保存线程的运行状态。虚拟机只会对java栈执行两种操作:以栈帧为单位的压栈或者出栈。
java方法可以通过两种方式完成,一种通过return返回,成为正常返回;一种通过抛出异常而异常终止
。虚拟机都会将当前栈弹出java栈然后释放掉,这样上一个方法的栈帧就是当前栈帧了。
java栈上是此对应的java线程所私有的。因此不存在多线程情况下栈数据访问同步的问题。
栈帧
栈帧由三部分组成:局部变量区,操作数栈和帧数据区。
局部变量区和操作数栈要视对应的方法而定,它们是按照字长计算的。
局 ...
堆
java程序在运行时所创建的所有类实例或数组都存放在同一个堆中。而每个java虚拟机实例中只存在一个堆空间,因此所有线程都将共享这个堆,又由于每个java程序独占一个java虚拟机实例,因此都有它自己的堆空间。
因此要考虑多线程访问对象(堆数据)的同步的问题了。
java虚拟机有一条在堆中分配新对象的指令,但是没有释放内存的指令。java虚拟机的垃圾回收机制负责回收没有被使用的内存。
只要有一个对象引用,虚拟机就必须能够快速定位对象类型的数据。另外它也必须通过该对象引用访问相应的类数据(存储于方法区中的类型信息)。因此在对象中通常会有一个指向方法区的指针。
堆空间的设计举例
一种设计:把堆分 ...
java虚拟机实例的生命周期:
java虚拟机的职责是负责运行一个java程序。
当启动一个java虚拟机时,一个虚拟机实例便诞生了。
当该程序关闭退出时,这个虚拟机实例也随之退出。
如果一台主机上同时运行3个java程序,就会产生3 ...
java虚拟机内置的安全特性
java虚拟机在执行字节码时还进行其他一些内置的安全机制的操作。
1.类型安全的引用转换
2.结构化的内存访问(无指针算法)
3.自动化垃圾收集(不必显式地释放被分配的内存)
4.数组边界检查
5.空引用检查
java程序只能使用类型安全,结构化的方法去访问内存
这样可以避免黑客知道一个类装载器在内存中的位置,赋予一个指针指向那块内存,从而对类装载器的数据进行操作,而达到破坏安全系统的目的。
未指明运行时数据空间在java虚拟机内部是怎样分布的
运行时数据空间是指一些java虚拟机用来存储一个运行时java程序所需的内存空间。包括:java栈(每个 ...
如果你尚未阅读深入java虚拟机,推荐你先阅读深入理解计算机系统。
如果你已经阅读过深入理解计算机系统,推荐你阅读深入java虚拟机。
如果这两本书你都阅读过或者都在阅读,我就不知道说什么好了。
java虚拟机(jvm)是 ...
原文地址:http://blog.csdn.net/eroswang/archive/2008/03/10/2162986.aspx
关闭socket分为主动关闭(Active closure)和被动关闭(Passive closure)两种情况。前者是指有本地主机主动发起的关闭;而后者则是指本地主机检测到远程主机发起关闭之后,作出回应,从而关闭整个连接。
其状态图如下图所示:
起初每个socket都是CLOSED状态,当客户端初使化一个连接,他发送一个SYN包到服务器,客户端进入SYN_SENT状态。
服务器接收到SYN包,反馈一个SYN-ACK包,客户端接收后返馈一个 ...
- 2008-12-28 14:47
- 浏览 3715
- 评论(0)
想成为一个真正的程序员,或者一个业余的计算机科学家.
想了很久,或许只有这样才能给我短暂的人生带来些许慰藉.
自己的悟性不是很高,也不能很好地严格要求自己,执行能力也不是很强.
不过有一两个志同道合的好友,
彼此互相分享,彼此互相鼓励
才能接着这忽明忽暗的灯光沿着这条路走下去.
谢谢,他们.
- 2008-12-21 00:38
- 浏览 799
- 评论(0)
如果古龙是一个程序员的话
他的编码风格或许会是这样的
package liveness;
//他已经记不得是什么时候写的这段代码
public class Transfer
{
private static final Object tieLock = new Object();
//每个程序员都会有感到不安时候
public void transferMoney(
Account from,
Account to,
int amount
)
{
synchroni ...
我一直在探寻你的踪迹
对面的小房子,小巷的深处的门边
虽然明知你不可能在那里
若能实现愿望的话,我想马上飞到你的身边
已经没有什么做不到的了
我会放下一切抱紧你
如果只想找一个能够驱赶寂寞的人,找谁都应该可以的
但是在这个连星星都能掉下来的夜里,我骗不了自己
不要让四季如此匆匆走过
在一起嬉戏着的快乐时光
我一直在探寻你的踪迹
在四岔路口,在梦中
虽然明知道你不可能在那里
如果能发生奇迹的话,我想马上见到你
从新一天的清晨开始,我...
会说出一直没有说出口的"喜欢你"
夏天的回忆在胸口回旋着
霎时消失的悸动
我一直在探寻你的踪迹
在明亮的大街上,那樱花街上
虽然明知道你 ...
整理自java并发编程实践第12章 12.4测试方法补遗
不连贯的同步性:
为了同步某个对象或者对象本身的某个域的访问,使用同步锁(内部锁或者显式锁,例如,对象本身的内部锁)来保护同步对象.但是如果访问该同步对象没有一贯性地通过同步锁获得访问,就意味着同步策略没有一贯地执行.通俗地讲就是在访问同步对象的时候,采用了双重标准,既有同步的操作也有非同步的操作,破坏了同步的连贯性和完整性.
直接调用Thread.run
直接调用Thread的run方法几乎总是个错误,应该调用Thread.start
未释放的显式锁
不同于内部锁,显式锁在控制退出了它们被请求的访问的时候,不会自动地释 ...
阅读java并发编程实践第11章,11.4减少锁的竞争.
ConcurrentHashMap的实现使用了一个包含16个对象锁的数组,每个锁都负责同步hash buckets数组中的 1/16的元素;buckets中的第n个元素由locks中第 n除以16 个锁来守护.假设hash算法的实现能够提供合理的扩展性,并且关键字能够以统一的方式访问,这会将对于锁的请求减少到原来的1/16.这种基于分离锁设计的技术实现能够使得ConcurrentHashMap支持16个并发的请求.
但是分离锁的负面作用是:对容器加锁,进行独占访问变得更加困难,并且更加昂贵.
例如当buckets的负 ...