深入理解Java虚拟机
文章平均质量分 83
韦轩
软件工程
展开
-
Java内存区域与内存溢出异常
第一部分:Java内存模型一、Java内存模型二、程序计数器1、这是一块较小的内存空间,可以看做当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支,循环,跳转,异常处理,线程恢复等基础功能都需要依赖这个计数器来完成。2、程序计数器是线程私有内存Java虚拟机的多线程是通原创 2015-06-25 17:43:45 · 673 阅读 · 0 评论 -
Java类编译后Class文件概述(上)
一、Class文件注意:每一个Class 文件都对应着唯一一个类或接口的定义信息,但是相对地,类或接口并不一定都得定义在文件里(譬如类或接口也可以通过类加载器直接生成)。二、class文件的文件结构class文件格式采用一种类似于C语言结构体的伪结构来存储数据,这种伪结构只有两种数据类型:无符号数和表。class文件的结构描述Clas原创 2015-07-04 22:29:35 · 3870 阅读 · 0 评论 -
类加载器
类加载器类加载阶段的加载部分的"通过一个类的全限定名获取此类的二进制字节流"由类加载器完成。对于任意的一个类,都需要由加载他的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性。类加载器,主要作用是将class加载到JVM中,查询每个类应该由谁加载。ClassLoader 是个抽象类,有很多子类。如果我们要实现自己的ClassLoader,直接继承URLClassLo原创 2015-07-09 22:17:34 · 460 阅读 · 0 评论 -
虚拟机性能监控与故障处理工具
Sun SDK 监控和故障处理工具jps 虚拟机进程状况工具格式 jps [option] [hostid]本地虚拟机唯一ID: local virtual machine identifier,LVMID进程ID:process identifierjps可以通过RMI 协议查询开启了RMI服务的远程虚拟机进程状态,hostid为RMI 注册表中的注册的主机名。原创 2015-07-02 18:27:09 · 765 阅读 · 0 评论 -
虚拟机类加载机制
虚拟机类加载机制约定:一、每个class文件都有可能代表着Java语言中的一个类或接口二、class并非一定指的是class文件,也有可能是一串二进制流类的生命周期加载 ----> 验证 ----> 准备 ----> 解析 ----> 初始化 ---- > 使用 ----> 卸载其中,加载,验证,准备,初始化,卸载这5个阶段的顺序是固定的,解析可能在初始化之前或原创 2015-07-08 19:33:18 · 427 阅读 · 0 评论 -
理解GC日志
理解GC 日志如何查看GC日志设置参数 :-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log/** * * -verbose:[class|gc|jni] 在输出设备上显示虚拟机运行信息。 * -verbose:class 显示有多少个类被加载 * -verbose:gc 在虚拟机发生内存原创 2015-06-29 19:03:43 · 775 阅读 · 0 评论 -
垃圾回收算法
垃圾回收算法一、标记-清除算法 Mark-Sweep首先,标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。问题:1、效率不高2、标记完成后产生大量的内存碎片。空间碎片太多可能导致以后在程序运行过程中需要分配较大对象时,无法找到足够的内存而不得不提前触发另一次垃圾收集动作。二、复制算法 Copying为了解决效率问题和碎片问题。算法思想:将可用原创 2015-06-29 14:26:19 · 389 阅读 · 0 评论 -
垃圾回收器介绍
垃圾回收器介绍没有最好的垃圾回收器,没有万能的回收器,我们只是在对应的应用选择合适的垃圾收集器注意区分并发和并行并发concurrent:用户线程和垃圾收集线程同时工作。并行parallel:多个垃圾收集线程同时工作,用户线程仍然在等待一、Serial收集器在jdk1.3之前,是虚拟机新生代收集的唯一选择。这是一个单线程的收集器,只使用一个收集线程完成收集工作,在进原创 2015-06-29 16:42:50 · 805 阅读 · 0 评论 -
内存分配策略与回收策略
内存分配策略与回收策略给对象分配内存以及回收给对象分配的内存。对象的内存分配绝大部分主要是在Java堆上,有一部分特殊的就是JIT编译器,经过JIT编译后被拆散为标量类型并间接地在栈上分配内存。对象主要分配集中在新生代的Eden区,如果启动了本地线程分配缓冲,按照线程优先在TLAB上分配。少数分配在老年代,分配在哪里取决于当前使用的垃圾回收器组合和虚拟机中相关内存参数的设定。原创 2015-06-29 21:01:55 · 1076 阅读 · 0 评论 -
垃圾回收器概述
垃圾回收要考虑的问题1、那些内存需要回收?2、什么时候回收?3、如何回收?如何判断对象"已死"?一、Reference Counting ---- 引用计数法1、算法思想给对象添加一个引用计数器,每当有一个地方引用它时,计数器的值就加一;当引用失效时,计数器减一。任何时刻,计数器值为0的对象就是不可能再被使用的。2、采用这种方式的案例微软的C原创 2015-06-29 12:53:38 · 645 阅读 · 0 评论 -
测试OOM异常
一、Java堆溢出内存溢出和内存泄露内存溢出:指程序运行过程中无法申请到足够的内存而导致的一种错误。内存溢出通常发生于OLD段或Perm段垃圾回收后,仍然无内存空间容纳新的Java对象的情况。内存泄露:指程序中动态分配内存给一些临时对象,但是对象不会被GC所回收,它始终占用内存。即被分配的对象可达但已无用package com.weixuan.outofmemory;imp原创 2015-06-26 00:15:46 · 2088 阅读 · 0 评论 -
Java类编译后Class文件概述(下)
具体的实例Java文件package com.weixuan.test;public class MyTest { private int age; private String name; public int getAge() { return age; } public String getName() { return name; } pu原创 2015-07-05 12:10:33 · 582 阅读 · 0 评论