
JVM
文章平均质量分 78
潘建南
这个作者很懒,什么都没留下…
展开
-
JVM字节码指令
转载自:https://www.cnblogs.com/tenghoo/p/jvm_opcodejvm.htmlJava虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成。基本数据类型1、栈帧(Stack Frame)的局部变量表中的最小单位为slot(变量槽)。除了l...转载 2019-02-17 14:29:56 · 864 阅读 · 0 评论 -
JVM常用参数
堆配置-Xms //初始堆大小-Xmx //最大堆大小-Xmn2g //设置年轻代大小为2G。在整个堆内存大小确定的情况下,增大年轻代将会减小年老代,反之亦然。此值关系到JVM垃圾回收,对系统性能影响较大,官方推荐配置为整个堆大小的3/8。-XX:NewSize=n //设置年轻代初始大小初始值大小-XX:MaxNewSize=n //设置年轻代的最大值大小-XX:NewRati...转载 2019-02-14 16:00:41 · 643 阅读 · 1 评论 -
从JVM源码看synchronized
索引synchronized的使用 修饰实例方法 修饰静态方法 修饰代码块 总结 Synchronzied的底层原理 对象头和内置锁(ObjectMonitor) synchronzied的底层原理 synchronized的优化 偏向锁 轻量级锁 轻量级锁膨胀 重量级锁 自旋 编译期间锁优化 总结 参考资料 synchron...转载 2018-12-12 12:04:32 · 3182 阅读 · 3 评论 -
Java锁升级
前言:对象的对象头中的存放着synchronized用的锁信息,详细结构内容请看《Java对象的内存布局》锁的升级Java SE1.6为了减少获得锁和释放锁所带来的性能消耗,引入了“偏向锁”和“轻量级锁”,所以在Java SE1.6里锁一共有四种状态,无锁状态,偏向锁状态,轻量级锁状态和重量级锁状态,它会随着竞争情况逐渐升级。锁可以升级但不能降级,意味着偏向锁升级成轻量级锁后不能降级成偏向...原创 2018-12-07 16:44:15 · 3048 阅读 · 0 评论 -
HotSpot JVM默认垃圾收集器
JDK版本默认垃圾收集器jdk1.7 默认垃圾收集器Parallel Scavenge(新生代)+Serial Old(老年代)jdk1.8 默认垃圾收集器Parallel Scavenge(新生代)+Serial Old(老年代)jdk1.9 默认垃圾收集器G1jdk10 默认垃圾收集器G1 -XX:+PrintCommandLineFlagsjvm参数可查看默认设置收集...原创 2018-11-20 17:52:15 · 2793 阅读 · 0 评论 -
JDK各版本特性
JDK各版本特性老版本 JDK 1.0 1996-01-23 JDK 1.1.4 Sparkler 宝石 1997-09-12 JDK 1.1.5 Pumpkin 南瓜 1997-12-13 JDK 1.1.6 Abigail 阿比盖尔–女子名 1998-04-24 JDK 1.1.7 Brutus 布鲁图–古罗马政治家和将军 1998-09-28...原创 2018-10-16 10:10:47 · 3787 阅读 · 0 评论 -
JVM 对象查询语言(OQL)
本文主要翻译自JDK 1.8的JVM监控工具jhat中关于OQL的英文帮助说明。可以在jhat 和 jvisualvm 中进行实践。OQL(对象查询语言) OQL是用于查询Java堆的类SQL查询语言。OQL允许过滤/选择从Java堆中获取的信息。虽然HAT已经支持预定义的查询,例如“显示类X的所有实例”,但OQL增加了更多的灵活性。OQL基于JavaScript表达式语言。 O...翻译 2018-08-24 20:30:08 · 27748 阅读 · 5 评论 -
RedHat/CentOS linux 6 环境编译openJDK7
操作系统:RedHat / CentOS安装步骤如下: 1. 下载openjdk-7u6-fcs-src-b24-28_aug_2012.zip 2. 提前装好JDK 6并且设置好环境变量vi /etc/profile,加入JDK6的安装目录:export ALT_BOOTDIR=/usr/java/jdk1.6.0_32通过source /et...原创 2015-08-31 22:37:32 · 1719 阅读 · 0 评论 -
使用Netbeans开发调试OpenJDK中的HotSpot
编译OpenJDK请看我上一篇文章RedHat/CentOS linux 6 环境编译openJDK7一、下载并安装Netbeans 7.0.1 (c/c++) http://share.weiyun.com/6292e450ed1c88423812e268f355a108 或者官网下载https://netbeans.org/community/releases/70/ ps:之所以使用7.原创 2016-06-03 18:23:19 · 6939 阅读 · 4 评论 -
JVM 垃圾收集器(Garbage Collection)
判断对象是否存活在堆里边存放着java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,首先需要确定这些对象之中哪些还“存活”着,哪些已经“死去”(即不可能再被任何途径使用的对象)。引用计数算法给对象添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。该方法简单,但也有一个缺点是很难解决对象之间相互...转载 2018-08-22 22:18:09 · 303 阅读 · 0 评论 -
Java对象内存大小计算
最近在读《深入理解Java虚拟机》,对Java对象的内存布局有了进一步的认识,于是脑子里自然而然就有一个很普通的问题,就是一个Java对象到底占用多大内存?在网上搜到了一篇博客讲的非常好:http://yueyemaitian.iteye.com/blog/2033046,里面提供的这个类也非常实用:import java.lang.instrument.Instrumentation;...转载 2018-07-03 14:43:34 · 11849 阅读 · 1 评论 -
Java多态的实现机制——静态分派与动态分派
1. Java多态简介多态是同一个行为具有多个不同表现形式或形态的能力。 多态就是同一个接口,使用不同的实例而执行不同操作,如下图所示:多态存在的三个必要条件:继承、重写、父类引用指向子类对象。多态的体现:重写、接口、抽象类和抽象方法多态性语言具有灵活,抽象,行为共享,代码共享的优势,很好的解决了应用程序函数同名问题。更多介绍:http://www.runoob.com/j...转载 2018-08-26 15:16:47 · 1174 阅读 · 0 评论 -
JVM类加载过程
为什么研究类加载全过程?有助于连接JVM运行过程 更深入了解Java动态性(解热部署,动态加载),提高程序的灵活性类加载机制JVM把class文件加载到内存,并对数据进行校验、准备、解析和初始化,最终形成JVM可以直接使用的Java类型的全过程。 加载 将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区中的运行时数据结构,在堆中生成一个代表这个类的jav...转载 2018-08-26 11:45:40 · 243 阅读 · 0 评论 -
JDK 1.8 JVM内部结构改变_元空间(Metaspace)取代永久代(PermGen)
一、JVM 运行时数据区 根据 JVM 规范,JVM 运行时数据区共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。 1、虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建。栈里面存着的是一种叫“栈帧”的东西,每个方法会创建一个栈帧,栈帧中存放了局部变量表(基本数据类型和对象引用)、操作数栈、方法出口等信息。栈的大小可以固定也可以动态扩展。当栈调用深度大于JVM所允许...转载 2018-08-22 12:05:44 · 11476 阅读 · 5 评论 -
JVM内存区域
Java虚拟机所管理的内存包括以下几个运行时数据区域,如下图 其中JVM的方法区和堆区由所有线程所共享,其它区域线程隔离。JVM其实可以理解成一个应用级的OS(操作系统),它的结构可以结合计算机的结构来加以理解,如下图 —— Created by 潘建南原创 2016-07-06 22:09:06 · 452 阅读 · 0 评论 -
Java对象的内存布局
在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。 对象头包括两部分信息,第一部分用于存储对象自身的运行时数据,如哈希码、GC分代年龄、锁状态标识、线程持有的锁、偏向线程ID、偏向时间戳等,这部分数据长度在32位和64位的虚拟机分别为32bit和64bit,官方称它为“Mark Wor原创 2017-03-30 14:38:27 · 536 阅读 · 0 评论 -
走进Java
Java主要的优点:Java摆脱了平台的束缚,实现了“一次编译,到处运行”。提供了一个相对安全内存管理和访问机制,完善的垃圾回收机制。实现了热点代码检测和运行时编译及优化。有一套完善的程序接口,大量的第三方类库。Java所带来的这些好处使程序开发效率得到了很大的提升。原创 2016-07-04 20:29:40 · 398 阅读 · 0 评论