jvm原理

JAVA概念复习

£可爱£侵袭症+ 提交于 2019-11-27 07:05:58
####JAVA概念介绍 0. 面试: 1. 谈谈你对 Java 平台的理解 1. 对于“Java 是解释执行”这句话,这个说法不太准确。 * 我们开发的 Java 的源代码,首先通过Javac 编译成为字节码(bytecode),然后,在运行时,通过 Java 虚拟机(JVM)内嵌的解释器将字节码转换成为最终的机器码。 * 但是常见的 JVM,比如我们大多数情况使用的 Oracle JDK提供的 Hotspot JVM,都提供了 JIT(Just-In-Time)编译器,也就是通常所说的动态编译器,JIT 能够在运行时将热点代码编译成机器码,这种情况下部分热点代码就属于编译执行,而不是解释执行了。 2. “Java 是解释执行”,这句话正确吗? * 对于“Java 是解释执行”这句话,这个说法不太准确。我们开发的 Java 的源代码,首先通过 Javac 编译成为字节码(bytecode),然后,在运行时,通过 Java 虚拟机(JVM)内嵌的解释 器将字节码转换成为最终的机器码。 * 但是常见的 JVM,比如我们大多数情况使用的 Oracle JDK 提供的 Hotspot JVM,都提供了 JIT(Just-In-Time)编译器,也就是通常所说的动态编译器, JIT 能够在运行时将热点代码编译成机器码,这种情况下部分热点代码就属于编译执行,而不是 解释执行了。 *

案例实战:每日上亿请求量的电商系统,JVM年轻代垃圾回收参数如何优化?

只谈情不闲聊 提交于 2019-11-26 10:31:00
出自:http://1t.click/7TJ 目录: 案例背景引入 特殊的电商大促场景 抗住大促的瞬时压力需要几台机器? 大促高峰期订单系统的内存使用模型估算 内存到底该如何分配? 新生代垃圾回收优化之一:Survivor空间够不够 新生代对象躲过多少次垃圾回收后进入老年代? 多大的对象直接进入老年代? 别忘了指定垃圾回收器 今日思考题 1、案例背景引入 按照惯例,我们接下来会用案例驱动来带着大家分析到底该如何在特定场景下,预估系统的内存使用模型。 然后合理优化新生代、老年代、Eden和Survivor各个区域的内存大小。 接着再尽量优化参数避免新生代的对象进入老年代,尽量让对象留在新生代里被回收掉。 我们这里的背景是电商系统,电商系统其实一般会拆分为很多的子系统独立部署 比如商品系统、订单系统、促销系统、库存系统、仓储系统、会员系统,等等 我们这里就以比较核心的订单系统作为例子来说明。 (提示:食用本案例之前,请务必充分理解专栏之前两周的文章!) 我们的案例背景是每日上亿请求量的电商系统,那么大家可以来推算一下每日上亿请求量的电商系统,他会每日有多少活跃用户? 一般按每个用户平均访问20次来计算,那么上亿请求量,大致需要有500万日活用户。 那么继续来推算一下,这500万的日活用户都是会进来进行大量的浏览,那么多少人会下订单? 这里可以按照10%的付费转化率来计算

ASM Core Api 详解

半世苍凉 提交于 2019-11-26 07:19:08
前言 前面一篇文章 ASM 简介 对 ASM 框架做了简单的介绍。 本篇文章主要对该框架的 Core Api 其中重要的一些类进行详细的介绍,让大家可以更得心应手的使用 ASM。 在开始之前,让我们先回顾一下 ASM Core Api 调用流程: ASM 提供了一个类ClassReader可以方便地让我们对class文件进行读取与解析; ASM 在ClassReader解析class文件过程中,解析到某一个结构就会通知到ClassVisitor的相应方法(eg:解析到类方法时,就会回调ClassVisitor.visitMethod方法); 可以通过更改ClassVisitor中相应结构方法返回值,实现对类的代码切入(eg:更改ClassVisitor.visitMethod()方法的默认返回值MethodVisitor实例,通过操作该自定义MethodVisitor从而实现对原方法的改写); 其它的结构遍历也如同ClassVisitor; 通过ClassWriter的toByteArray()方法,得到class文件的字节码内容,最后通过文件流写入方式覆盖掉原先的内容,实现class文件的改写。 以上,就是 ASM Core Api 的整体运作流程。 接下来,我将对其中涉及到的重要的类进行详细解析。 ClassReader ClassReader