![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java虚拟机
文章平均质量分 80
HryReal
while(!dead) { study(); }
展开
-
MAT内存管理使用
转载:http://www.jianshu.com/p/d8e247b1e7b2MAT简介MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。使用内存分析工具从众多的对象中进行分析,快速的计算出在内存中对象的占用大小,看看是谁阻止了垃圾收集器的回收工作,并可以通过报表转载 2017-10-30 14:22:40 · 785 阅读 · 0 评论 -
Java对象在Java虚拟机的创建过程
创建 1.虚拟机遇到new指令时,会先去常量池查看是否找到这个类的符号引用,并且检查这个符号代表的类是否被虚拟机加载过,如果没有,则先执行类加载。 2.类加载完后,就要执行分配内存的操作。分配内存有两种方法。 a)指针碰撞:内存分配事规整的,在内存中,一边是分配过的,一边是没有分配过的,中间是区分它们的指针,只需要这个指针向空闲空间那边移动一段和对象大小相等的距离即可原创 2017-10-30 10:18:49 · 322 阅读 · 0 评论 -
Java的编译方式
Java主流编译体系采用了前端编译+JIT编译的方式:1、前端编译把Java源码文件(.java)编译成Class文件(.class)的过程;也即把满足Java语言规范的程序转化为满足JVM规范所要求格式的功能;优点:许多Java语法新特性(”语法糖”:泛型、内部类等等),是靠前端编译器实现的,而不是依赖虚拟机;编译成的Class文件可以直接给JVM解释器解释执行,省去编译时间,加快启动速度;缺原创 2017-11-15 17:27:02 · 15505 阅读 · 0 评论 -
JAVA虚拟机运行数据区
1.程序计数器 程序计数器是一段小的内存空间,可以把它看成当成线程所执行的字节码的行号指示器。因此,他是线程私有的,生命周期与线程相同。 如果线程执行的是Java方法,则计数器记录的是正在执行的虚拟机字节码指令的地址;如果是Native方法,则计数器为空。2.JAVA虚拟机栈 虚拟机栈也是线程私有的,它描述的是Java方法执行的内存模型。每个方法对应一个栈帧,存储这个方法的各种原创 2017-10-29 19:47:37 · 220 阅读 · 0 评论 -
分派
,原创 2017-11-06 10:36:06 · 14615 阅读 · 0 评论 -
运行时栈帧结构
栈帧是用于虚拟机进行方法调用和方法执行的数据结构。每一个栈帧的如栈和出栈过程代表了一个方法执行和结束的过程。 每一个栈帧包括局部变量表,操作数栈,动态链接,返回地址等等信息。栈帧的所有信息在编译代码阶段就已经确定了,不会收到运行时数据的影响。 1.局部变量表每一个变量都会储存在Slot中,64位机器的Slot占64位,每个Slot都可以存储java数据类型和引用类型。局部变量表的第0原创 2017-11-05 19:16:09 · 15008 阅读 · 0 评论 -
类加载器
1.类和类加载器类加加载阶段 “通过一个类的全限定名来获取描述该类的二进制流” 过程在虚拟机外部实现,而实现这个动作的是类加载器。 类加载器的功能不止加载类,它和这个类本身能确认其在虚拟机的唯一性。比较两个类是否相同,必须类全限定名相同和类加载器相同。 2.类加载器种类对于java开发人员来讲,类加载器有三种启动类加载器 这类加载器将负责加载存放在$JAVA_HOME\lib中的,或者被-Xb原创 2017-11-05 14:46:30 · 14712 阅读 · 0 评论 -
类的加载过程
类从加载到虚拟机到卸载,它的整个生命周期包括:加载(Loading),验证(Validation),准备(Preparation),解析(Resolution),初始化(Initialization),使用(Using)和卸载(Unloading)。其中,验证、准备和解析部分被称为连接(Linking)。加载: 在加载阶段,虚拟机主要完成三件事:1.通过一个类的全限定名来获取定义原创 2017-11-05 00:11:46 · 14658 阅读 · 0 评论 -
类加载的时机
Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的加载机制。 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括了:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用转载 2017-11-04 10:24:40 · 14441 阅读 · 0 评论 -
通过JConsole查看本地远程虚拟机
一、JConsole是什么 从Java 5开始 引入了 JConsole。JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运行。您可以轻松地使用 JConsole(或者,它更高端的 “近亲” VisualVM )来监控 Java 应用程序性能和跟踪 Java 中的代码。二、如何启动JConsole如果是从命令行启动,使 JDK 在 PATH 上,运原创 2017-11-02 18:13:20 · 15104 阅读 · 1 评论 -
JavaJDK中的命令行工具
JavaJDK中的命令行工具 本文内容主要学习自《深入理解Java虚拟机》,超赞的一本书强烈推荐!一,常用JDK监控和故障处理工具 命令名称 全称 用途 jstat JVM Statistics Monitoring Tool 用于收集Hotspot虚拟机各方面的运行数据 jps JVM Process Status Tool 显示指定系统内所有的HotSpo转载 2017-11-02 12:20:05 · 14564 阅读 · 0 评论 -
GC日志分析
JVM的GC日志的主要参数包括如下几个:-XX:+PrintGC 输出GC日志-XX:+PrintGCDetails 输出GC的详细日志-XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)-XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)-XX:+PrintHeapAtGC 在进行转载 2017-11-01 23:57:37 · 14533 阅读 · 0 评论 -
垃圾收集算法与垃圾收集器
典型的垃圾收集算法1.Mark-Sweep(标记-清除)算法 这是最基础的垃圾回收算法,之所以说它是最基础的是因为它最容易实现,思想也是最简单的。标记-清除算法分为两个阶段:标记阶段和清除阶段。标记阶段的任务是标记出所有需要被回收的对象,清除阶段就是回收被标记的对象所占用的空间。具体过程如下图所示: 从图中可以很容易看出标记-清除算法实现起来比较容易,但是有一个比较严重的问题就是容易产生内存碎原创 2017-11-01 23:09:26 · 11624 阅读 · 0 评论 -
判断对象存活方法及回收方法
引用计数方法给对象添加一个引用计数器,当有对象引用它时,计数器的值就+1,引用实效时,计数器的值-1。 但是这个方法却解决不了相互引用循环的问题。 比如class Haha { public Object instant = null; public static void test(){ Haha A = new Haha(); Haha B =原创 2017-11-01 22:39:05 · 3692 阅读 · 0 评论 -
OutOfMemory (OOM)的类型与检测
Java堆溢出Java堆存的是对象的实例,所以无限添加对象实例很容易造成堆溢出public class OutOfMemoryError_Heap { static class OOMObject{} public static void main(String[] args) { List <OOMObject> list = new ArrayList<OOMOb原创 2017-11-01 15:28:14 · 727 阅读 · 0 评论 -
内存泄漏(OOM)产生原因
为何会内存溢出 我们知道JVM根据generation(代)来进行GC,根据下图所示,一共被分为young generation(年轻代)、tenured generation(老年代)、permanent generation(永久代, perm gen),perm gen(或称Non-Heap 非堆)是个异类,稍后会讲到。注意,heap空间不包括perm gen。绝大多数的对象都在youn转载 2017-10-30 15:05:40 · 2073 阅读 · 1 评论 -
对象的访问方式
对象访问方式 虽然定义的reference类型数据来作为对象内存数据的引用,但JVM规范没有定义这个引用应该通过何种方式定位、访问堆上的对象,也没有不强制规定对象的内部结构应当如何表示; 这些都取决于JVM的实现,目前主流的对象访问方式有两种:(A)、使用句柄 Java堆划分一块内存作为句柄池,reference中存储就是对象的句柄地址;原创 2017-11-15 20:21:11 · 14966 阅读 · 0 评论