jvm
huanshirenjian
这个作者很懒,什么都没留下…
展开
-
JVM调优系列1-JVM内存区域划分
1.jvm内存区域分类 jvm在执行java程序时会把它管理的内存区域划分为若干个不同的数据区域,包括虚拟机栈、方法区、本地方法栈、堆程序计数器。 1.1 程序计数器 当前线程执行的字节码的行号指示器,线程私有的,占用空间小,无法干涉。 1.2 虚拟机栈 线程运行时,会将方法打包成一个栈针放入虚拟机栈。栈针包括局部变量表、操作数栈、动态连接、方法出口等。方法的执行就对应栈针的入栈和出栈,当前线程...原创 2019-04-17 07:54:03 · 154 阅读 · 0 评论 -
JVM调优系列7-类的加载
1. 类的加载过程 类的加载分为5个阶段。加载,验证,准备,解析,初始化。 (1)加载 就是类的加载器根据类的全路径名找到class文件,将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构,在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。 (2)验证 验证过程包括验证class文件的合法性,语法的合法性等 (3)准备 给类的静态变量...原创 2019-04-22 08:18:01 · 187 阅读 · 0 评论 -
JVM调优系列6-class类文件结构
java语言之所以能够跨平台是因为java代码被编译成为了字节码,也就是class类。本职上class文件也就是二进制,Java虚拟机指令集和符号表以及若干其他辅助信息。这种二进制文件和平台无关,只要是在java虚拟机上都可以运行。 ...原创 2019-04-22 00:16:49 · 127 阅读 · 0 评论 -
JVM调优系列5-垃圾收集器
1.判断对象存活 JVM中盘判断对象存活有两种方法:引用计数法和可达性分析。 1.1引用计数法 每个对象都有一个引用计数器,被引用时加1,引用失效时减一。 优点:快,方便,实现简单。 缺点:对象相互引用时,很难判断对象是否改回收。 1.2可达性分析 通过一系列成为根对象“GC Roots”的节点开始向下搜索,搜索经过的路径称为引用链(Reference Chain)。当一个对象到根节点没有任何引用...原创 2019-04-19 07:27:56 · 234 阅读 · 0 评论 -
JVM调优系列4-堆溢出和栈溢出
1.堆溢出 参数 : -Xms5m -Xmx5m -XX:+PrintGC 出现java.lang.OutOfMemoryError: GC overhead limit exceeded 一般是(某个循环里可能性最大)在不停的分配对象,但是分配的太多,把堆撑爆了。 出现java.lang.OutOfMemoryError: Java heap space一般是分配了巨型对象。 2.栈溢出 ja...原创 2019-04-18 08:44:21 · 518 阅读 · 0 评论 -
JVM调优系列3-虚拟机中对象的创建
1.对象创建的过程 当new一个对象时: (1)虚拟机首先执行相应的类加载过程 (2)然后需要为对象分配内存。为对象分配内存就是在堆中把一块确定大小的内存划分出来。这时候会有一个问题:java堆是否规整 如果堆规整,所有用过的内存放在一边,没用过的内存放在另一边,中间放一个指针作为分界线。这时候分配内存就是讲指针向空闲的一边挪动一段与对象大小相等的空间。这种分配方式叫做指针碰撞。 如果堆不规整已...原创 2019-04-18 08:35:23 · 113 阅读 · 0 评论 -
JVM调优系列2-JAVA逃逸分析、栈上分配、标量替换、同步消除
1.逃逸分析 逃逸分析只是一种分析,是为其他优化手段提供分析支撑,它本身并不做优化。逃逸分析是分析方法体的局部变量的作用范围是否会逃出方法体。 逃逸分析包括: (1)全局变量赋值逃逸 public class EscapeAnalysis { public static Object object; public void globalVariableEscap...原创 2019-04-17 23:26:02 · 713 阅读 · 0 评论