最近一直在看<深入理解Java虚拟机>第三版,无意中发现了第三版是最近才发行的,听说讲解的JDK版本升级,新增了近50%的内容. 这种神书,看懂了,看进去了,真的看的很快,并没有想象中的晦涩难懂,毕竟是公认的经典,作者书面描述能力肯定了得.虽然这种书,不会让你的代码能力马上提升,但是真正的让你知其然,还知其所以然.等遇到了这方面的问题,肯定不会像无头苍蝇一样,一头雾水,起码有一定的思路.更多Java.计算机方面的一些好书正在路上,今年一定要好好地提升一下内功. 不过,比如第五章的内容,调优实战…
在堆里面存放着Java几乎所有的对象实例,垃圾收集器要进行垃圾回收,要做的第一步便是找出那些对象是需要回收的. 怎么判断对象是否需要回收? 常用的方法有两种. 1.引用计数算法.为每一个对象添加一个引用计数器,每当有人持有对其的一个引用的时候,该计数器加1.这种算法(Reference Counting)实现简单,判断效率高,是一个很不错的算法,如Python语言.COM和Squirrel中都用它来管理内存.但是主流的Java虚拟机实现中并没有使用这个算法,主要原因是它很难解决对象之间循环引用的…
Java内存模型与线程 概述 多任务处理在现代计算机操作系统中几乎已是一项必备的功能,多任务运行是压榨手段,就如windows一样,我们使劲的压榨它运行多个任务,俱要high又要耍.并发则是另外一种更具体的应用场景.每秒事物处理数(Transactions per Second,tps)是最重要的指标.开发人员应该了解与运用并发. 硬件的效率与一致性 除了有软件上的并发,物理计算机也有并发问题.计算机的存储设备与处理器运算速度有几个数量级的差距,现代计算机都不得不加入一层高速缓存来作为内存与处理…
1.1   垃圾收集器 垃圾收集器是内存回收的具体实现.以下讨论的收集器是基于JDK1.7Update14之后的HotSpot虚拟机.这个虚拟机包含的所有收集器有: 上图展示了7种作用于不同分代的收集器,如果两个收集器之间存在连线,就说明它们可以搭配使用.虚拟机所处的区域,则表示它是属于新生代收集器还是老年代收集器.接下来笔者将逐一介绍这些收集器的特性.基本原理和使用场景,并重点分析CMS和G1这两款相对复杂的收集器,了解它们的部分运作细节. 直到现在为止还没有最好的收集器出现,更加没有万能的收…
1.Java如何实现平台无关系 Java要实现平台无关系就需要在Java代码和本地机器之间引入一个中间层,实现Java代码和本地机器的解耦,而这个中间层就是字节码.字节码独立于本地机器,以实现代码的可移植性.Java代 码通过编译器编译成字节码,字节码又通过虚拟机编译为当前本地机器可识别的本地机器代码并执行. 2.如何表示类和接口信息(Class文件的结构) 虚拟机要做到语言无关性,就需要同一个字节码结构,实现字节码与特定语言的解耦. (1)类和接口所具有信息 1)类和接口的名称.访问修饰符.包…
1.概述 2.对象已死吗? 引用计数器 给对象添加一个引用计数器,每当有引用时,计数器加1,引用失效时,计数器减1:任何时刻计数器为0的对象就是不可能再被使用的. 若对象是循环引用,则无法处理.JVM不使用. 可达性分析算法 通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所经过的路径称为引用链(Reference Chain),当一个对象没有任何引用链相连时,表明该对象不可用. Java语言中,可作为 GC Roots的对象包括如下: 虚拟机栈(栈帧中的本地变…
书上关于GCTimeRatio的讲解有点难以理解,查看Oracle的文档后重新理解了下 -XX:GCTimeRatio 运行时间 / GC时间 当GCTimeRatio为19时,运行时间是GC时间的19倍,也就是GC时间不能超过 1 / (1 + 19) = 0.05 附上Oracle的文档原文 -XX:GCTimeRatio=nnn A hint to the virtual machine that it's desirable that not more than 1 / (1 + nnn…
这是why技术的第34篇原创文章 本周还是在家办公的一周,上面的图就是我在家的工位,和上周<Dubbo Cluster集群那点你不知道的事>这篇文章里面的第一张图片比起来,升级了显示器支撑臂,如果短还可以加长:用上了机械键盘,让指尖享受那一点点来自红轴的美妙反馈...... 还是那句话:工欲善其事,必先利其器.在家办公,我是认真的. 图中显示器下面的两本书分别是<深入理解Java虚拟机>的第2版和第3版.也就是本文的主角. 你的手边有第2版吗? 来,翻到第57页.这里面有个“坑”,…
类加载机制 谈起类加载机制,在这里说个题外话,当初本人在学了两三个月的Java后,只了解了一些皮毛知识,就屁颠屁颠得去附近学校的招聘会去蹭蹭面试经验,和HR聊了一会后开始了技术面试,前抛出了两个简单的小问题铺垫了一下,然后接下来的问题就是简单的说一下类加载机制,听到这个问题,我脑子里面想到这个问题我看过,在<深入理解Java虚拟机>这本书上看到过这个原理,但是只是很浅显的翻看了一下,并没有下功夫去了解其中的原理.然后就大脑一片空白,什么也想不到了,支支吾吾没有回答上来,这就gg了,当时羞愧得想…