`
frenchmay
  • 浏览: 231328 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
文章列表
垃圾收集 引用计数 堆中每一个对象都有一个引用计数。当一个对象被创建了,并且指向该对象的引用被分配给一个变量,这个对象的引用计数被置为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栈(每个 ...

08-09

08 事业重新开始 09 日拱一卒,不求速成
如果你尚未阅读深入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包,客户端接收后返馈一个 ...

理想万岁

想成为一个真正的程序员,或者一个业余的计算机科学家. 想了很久,或许只有这样才能给我短暂的人生带来些许慰藉. 自己的悟性不是很高,也不能很好地严格要求自己,执行能力也不是很强. 不过有一两个志同道合的好友, 彼此互相分享,彼此互相鼓励 才能接着这忽明忽暗的灯光沿着这条路走下去. 谢谢,他们.
如果古龙是一个程序员的话 他的编码风格或许会是这样的 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的负 ...
Global site tag (gtag.js) - Google Analytics