JVM
文章平均质量分 78
Owen William
这个作者很懒,什么都没留下…
展开
-
垃圾收集器和内存分配
1.串行回收器串行回收器是指使用单线程进行垃圾的回收。每次回收时,串行回收器只有一个工作线程,对于并行能力软弱的计算机来说,串行回收器的专注性和独占性往往有更好的性能表现。串行回收器可以在新生代和老年代使用,根据作用于不同的堆空间,分为新生代串行回收器和老年代串行回收器。1.1新生代串行回收器1) 串行回收器主要有两个特点: a) 它仅仅使原创 2016-03-26 17:40:05 · 881 阅读 · 2 评论 -
认识Java虚拟机的基本结构
1. Java虚拟机的架构1) 类加载子系统负责从文件系统或者网络中加载Class信息,加载的类信息存放于一块称为方法的内存空间。除了类信息外,方法区中可能还会存放运行时常量池信息, 包括字符串字面量和数字量(这部分常量信息是Class文件中常量池部分的内存映射)。2) Java堆在虚拟机启动的时候建立,它是Java程序最主要的内存工作区域。几乎所有原创 2016-03-26 16:48:36 · 2805 阅读 · 4 评论 -
字节码文件
1.字节码文件1.1字节码文件的内部组成结构每一个项(类结构格式的内容)包括类型、名称以及该项的数量。类型可以是表名,同时也是“基本类型”。在这个结构体中只有两种数据结构,分别是无符号和表,其中无符号数属于字节码文件中的“基本类型”,如下:字节码文件中的“基本类型”1) magic(魔术):一个有效的字节码文件的前4个字节为0Xcafebabe,也被称之为魔术原创 2016-03-26 18:10:39 · 3076 阅读 · 0 评论 -
垃圾回收概念与算法
1.讨论常用的垃圾回收算法1.1引用计数法(Reference Counting)1) 引用计数器的实现很简单,对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器加1,当引用失效时,引用计算器就减1。只要对象A的引用计数器的值为0,则对象A就不可能再被使用。2) 引用计算器有两个非常严重的问题: a) 无原创 2016-03-26 17:08:35 · 826 阅读 · 0 评论 -
剖析HotSpot的初始化过程
1.HotSpot的构成模块 HotSpot的顶层模块包含在/openjdk/hospot/src/share/vm中,分别为adlc、asm、cl、ci、classfile、code、compiler、gc、interpreter、libadt、memory、oops、opto、Prims、runtime、services、shark和utilities2.跟踪HotS原创 2016-03-26 18:19:37 · 737 阅读 · 0 评论 -
剖析HotSpot的Launcher
1.HotSpot的源码目录结构├─agent Serviceability Agent的客户端实现├─make 用来build出HotSpot的各种配置文件├─src HotSpot VM的源代码原创 2016-03-26 18:17:28 · 580 阅读 · 0 评论 -
字节码的编译原理
1.编译原理 java编译器在将java源码编译为一个有效的字节码文件,主要会经历4个步骤:词法解析à语法解析à语义解析à生成字节码2.词法解析步骤2.1词法解析过程 词法解析是javac编译器执行字节码编译的第一步。主要任务就是将java源码中的关键字和标示符等内容转换为符合java语法规范的Token序列,然后按照指定的顺序规则进行匹配校验,以便为原创 2016-03-26 18:03:43 · 3553 阅读 · 1 评论 -
锁与并发
1.锁在Java虚拟机中的实现和优化1.1 偏向锁1. 偏向锁是JDK1.6提出的一种锁优化方式。其核心思想是,如果程序没有竞争,则取消之前已经取得锁的线程同步操作。也就是,若某一锁被线程获取后,便进入偏向模式,当线程再次请求锁时,无需进入相关的同步操作,从而节省了操作时间。如果在此之间有其他线程进行了锁请求,则锁退出偏向模式。在JVM中使用-XX:+UserBiasedLo原创 2016-03-26 17:56:12 · 1083 阅读 · 0 评论 -
分析Java堆
1. String 在虚拟机中的实现1.1 String对象的特点(1). 不变性:不变性是指String对象一旦生成,则不能再对它进行改变。String的这个特性可以泛化成不变(immutable)模式,即一个对象的状态在对象被创建之后就不再发生变化。不变模式的主要作用在于,当一个对象需要被多线程共享,并且访问频繁时,可以省略同步和锁等待时间,从而大幅度提高系统性能。原创 2016-03-26 17:52:32 · 1503 阅读 · 0 评论 -
使用jvm监控应用
1.说明在项目中,如果要去监控某个java应用的性能,这个时候有多个方法。你可以应用开源的软件或自己写个程序来监控。如果是自己写个程序来监控java的应用,我们就要考虑用什么样的方法是最好的。其中有两个方法: 第一种方法,你可以使用Sigar将要监控的代码写到自己的应用中,但是前提是这个应用是你自己公司开发的,如果要监控其它公司的应用,人家可能就不太愿意开放这个接口给你。第二种方法...原创 2019-06-19 15:58:32 · 496 阅读 · 0 评论