java虚拟机
iteye_5681
这个作者很懒,什么都没留下…
展开
-
深入java虚拟机1-4章, all in sandbox(1)
如果你尚未阅读深入java虚拟机,推荐你先阅读深入理解计算机系统。如果你已经阅读过深入理解计算机系统,推荐你阅读深入java虚拟机。如果这两本书你都阅读过或者都在阅读,我就不知道说什么好了。 java虚拟机(jvm)是建立于一个本地系统之上沙箱之中。这个基础天生便决定了java的平台平台无关性。我们所编写的java程序调用java api,由java api调用 本地方法(动态库)操作...2008-12-31 23:40:37 · 107 阅读 · 0 评论 -
深入java虚拟机第9章, 垃圾收集(4)
深入java虚拟机第9章, 垃圾收集(4)finalize方法终结方法是垃圾收集器在释放对象前必须运行。垃圾收集器必须检查它所发现的不再被引用的对象是否存在finalize方法。对象可触及性的生命周期在垃圾收集器看来,堆中的每一个对象都有三个状态之一:可触及的,可复活的,以及不可触及的。如果垃圾收集器从根节点可以追踪到这个对象,这个对象就是可触及的。...2009-03-25 02:18:54 · 91 阅读 · 0 评论 -
深入java虚拟机第20章, 线程同步-对象锁
java虚拟机的一些运行时数据区会被所有线程共享,其他的数据是各个线程私有的。因为堆和方法区是被所有线程共享的,java程序需要为两种多线程访问数据进行协调。1)保存在堆中的实例变量2)保存在方法区中的类变量程序不需要协调保存在java栈中的局部变量,因为java栈中的数据是属于拥有该栈的线程私有的。在java虚拟机中,每个对象和类在逻辑上都是和一个监视器相关联的。对于对象来说,相关联的...2009-01-05 22:13:15 · 108 阅读 · 0 评论 -
深入java虚拟机第20章, 线程同步-同步和互斥
监视器java监视器支持两种线程:互斥和协作。java虚拟机通过对象锁来实现互斥,允许多个线程在同一个共享数据上独 立而不干扰地工作。协作则通过object类的wait方法和notify方法来实现,允许多个线程为了同一个目标而共同工作。我们将监视器比作一个建筑物,里面有很多房间,房间里面有一些数据,并且同一个时间只能被一个线程占据。一个线程进入房间到离开为止,独占其中全部的数据。进入这个...2009-01-05 21:53:03 · 103 阅读 · 0 评论 -
深入java虚拟机第9章, 垃圾收集(3)火车算法
大范围的垃圾收集会占用大量的资源和时间,可能会导致暂停和无法满足实时系统的要求。因此,使用渐进式的收集算法。火车算法是为了在成熟对象空间提供限度时间的渐进收集。 车厢,火车和火车站火车算法把成熟对象空间划分为固定长度的内存块,算法每次在一个块中单独执行。每个块属于一个集合。块被叫车厢,集合被叫做火车,成熟对象空间是火车站。火车被排序,块被附加到火车的尾部。 这种方式表示出了成熟...2009-01-04 21:50:21 · 124 阅读 · 0 评论 -
深入java虚拟机第9章, 垃圾收集(2)
垃圾收集引用计数堆中每一个对象都有一个引用计数。当一个对象被创建了,并且指向该对象的引用被分配给一个变量,这个对象的引用计数被置为1.当任何其他变量被赋值为对这个对象的引用时,计数加1。当一个对象的引用超过了生存期或者被设置一个新的值时,对象的引用计数减1.任何引用数为0的对象可以被当作垃圾收集。当一个对象被垃圾收集的时候,它引用的任何对象计数值减1.在这种方法中,一个对象被垃圾收集后可能导致...2009-01-04 21:17:33 · 86 阅读 · 0 评论 -
深入java虚拟机第9章, 垃圾收集(1)
java虚拟机的堆里存放着正在运行的java程序所创建的所有对象。当一个对象不再被程序引用时,它所使用的堆空间可以被回收,以便后续的新对象所使用。垃圾收集器必须能够断定哪些对象是不再被引用的,并且能够把它们所占据的堆空间释放出来。在释放不再被引用的对象的过程中,垃圾收集器运行将要被释放的对象的终结方法(finalizer)。除了释放不再被引用的对象,垃圾收集器还要处理堆碎片。在一个虚拟内存系统中...2009-01-03 23:37:18 · 88 阅读 · 0 评论 -
深入java虚拟机第5章, class文件常量池中字符串类urf8格的存储格式
java虚拟机在class文件中对应类型的常量池中使用了一种类似utf8格式的变体来存储一个常量字符串。(这里请不要和java se的string api搞混淆,这里谈的是class文件的文件格式问题,我这里只是感觉这种方式比较节省空间,故拿出来请大家看一下。) utf-8编码模式允许字符串中的所有unicode字符以2个字节的形式表示,而ascii码(空字符null除外)以一个字节表示...2009-01-03 21:42:10 · 122 阅读 · 0 评论 -
深入java虚拟机第5章, 栈
java栈每当启动一个新线程的时候,java虚拟机都会为它分配一个java栈。java以栈帧为单位保存线程的运行状态。虚拟机只会对java栈执行两种操作:以栈帧为单位的压栈或者出栈。 java方法可以通过两种方式完成,一种通过return返回,成为正常返回;一种通过抛出异常而异常终止。虚拟机都会将当前栈弹出java栈然后释放掉,这样上一个方法的栈帧就是当前栈帧了。 java栈上是此对应...2009-01-02 18:56:41 · 132 阅读 · 0 评论 -
深入java虚拟机第5章, 堆
堆java程序在运行时所创建的所有类实例或数组都存放在同一个堆中。而每个java虚拟机实例中只存在一个堆空间,因此所有线程都将共享这个堆,又由于每个java程序独占一个java虚拟机实例,因此都有它自己的堆空间。因此要考虑多线程访问对象(堆数据)的同步的问题了。java虚拟机有一条在堆中分配新对象的指令,但是没有释放内存的指令。java虚拟机的垃圾回收机制负责回收没有被使用的内存。只要有一...2009-01-02 00:19:09 · 85 阅读 · 0 评论 -
深入java虚拟机第5章, jvm
java虚拟机实例的生命周期:java虚拟机的职责是负责运行一个java程序。当启动一个java虚拟机时,一个虚拟机实例便诞生了。当该程序关闭退出时,这个虚拟机实例也随之退出。如果一台主机上同时运行3个java程序,就会产生3个java虚拟机实例。java虚拟机通过调用某个初始类的main方法来运行一个java程序。public class HelloWorld { public ...2009-01-01 22:26:50 · 74 阅读 · 0 评论 -
深入java虚拟机1-4章, all in sandbox(2)
java虚拟机内置的安全特性 java虚拟机在执行字节码时还进行其他一些内置的安全机制的操作。1.类型安全的引用转换2.结构化的内存访问(无指针算法)3.自动化垃圾收集(不必显式地释放被分配的内存)4.数组边界检查5.空引用检查 java程序只能使用类型安全,结构化的方法去访问内存这样可以避免黑客知道一个类装载器在内存中的位置,赋予一个指针指向那块内存,从而对类装载器的数据进...2009-01-01 11:51:10 · 135 阅读 · 0 评论 -
JNI tips
java通过JNI调用dll,参见firefly的帖子 《JNI 对象的操作》 这里是一些使用心得。1.链接异常Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\Program Files\Java\jdk1.5.0_08\jre\bin\QueryClientDLL.dll: Can't find depe...2011-02-14 09:48:37 · 138 阅读 · 0 评论