随笔分类 - JVM
摘要:1、修改tomcat_home/bin/catalina.sh 文件,搜索 Execute The Requested Command 字样,在其上,添加 :CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Djava.rmi
阅读全文
摘要:1. top 查看%CPU占用情况,查看哪个java进程占用cpu比较高2. jps -l 确定是哪个进程 # jps -l 得到222433. ps -mp 进程号,tid,time 通过ps 查看具体哪个JVM线程,找到消耗cpu最大的线程(tid) # ps -mp 22243 -o THRE
阅读全文
摘要:4.2.1 标记-清除算法(Mark-Sweep) 标记-清除算法采用从根集合(GC Roots)进行扫描,对存活的对象进行标记,标记完毕后,再扫描整个空间中未被标记的对象,进行回收,如下图所示。标记-清除算法不需要进行对象的移动,只需对不存活的对象进行处理,在存活对象比较多的情况下极为高效,但由于
阅读全文
摘要:下面一张图是HotSpot虚拟机包含的所有收集器,图是借用过来滴: Serial收集器(复制算法)新生代单线程收集器,标记和清理都是单线程,优点是简单高效。是client级别默认的GC方式,可以通过-XX:+UseSerialGC来强制指定。 Serial Old收集器(标记-整理算法)老年代单线程
阅读全文
摘要:前面部分,我们了解了判断对象是否为垃圾对象、垃圾收集算法以及垃圾收集器,这些部分主要是针对内存回收的。Java技术体系中所提倡的自动内存管理无非就是两部分: a). 垃圾回收 b). 内存分配 我们先来看看JVM内存区域的划分: heap区:Eden Space(伊甸园)、Survivor Spac
阅读全文
摘要:前面几章,我们讲了Java虚拟机、虚拟机的内存结构、认识对象(创建、内存分配、访问定位)、对象的回收。 前面的准备都是理论基础,出现了问题,也能从原理上来剖析问题是如何出现的,本章开始,将学习借助工具如何解决问题,让我们的虚拟机的性能达到最优。 工具介绍: Jps(JVM Process Statu
阅读全文
摘要:打算把Java虚拟机这块单独弄一个主题出来,做做备忘,结构如图所示: 后面还有一部分待更新...
阅读全文
摘要:Java 虚拟机的内存模型分为两部分:一部分是线程共享的,包括 Java 堆和方法区;另一部分是线程私有的,包括虚拟机栈和本地方法栈,以及程序计数器这一小部分内存 2.1 程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,它的作用可以看做是当前线程所执行
阅读全文
摘要:在HotSpot虚拟机中,对象在内存中的布局分为三块:对象头、示例数据、对齐填充。1.对象头 包括两部分:Mark Word、类型指针、数组长度(if 数组对象) (1)Mark Word:存储对象自身的运行时数据(哈希码、GC年龄、锁标志、持有的锁等)。被设计成非固定数据结构,根据对象状态占用内部
阅读全文
摘要:Java堆和方法区主要存放各种类型的对象(方法区中也存储一些静态变量和全局常量等信息),那么我们在使用GC对其进行回收的时候首先要考虑的就是如何判断一个对象是否应该被回收。 也就是要判断一个对象是否还有其他的引用或关联使得这个对象处于存活的状态。我们需要将不在存活状态的所有对象标记出,以便于GC进行
阅读全文
摘要:Sun Classic VM : 以今天的视角来看,Sun Classic VM的技术可能很原始,这款虚拟机的使命也早已终结。但仅凭它“世界上第一款商用Java虚拟机”的头衔,就足够有让历史记住它的理由。 1996年1月23日,Sun公司发布JDK 1.0,Java语言首次拥有了商用的正式运行环境,
阅读全文
摘要:1. 类加载器有两种(下面说的父类并不是继承关系,而是包装关系): 1.1. Java虚拟机自带的类加载器: 1.1.1. 根类加载器(Bootstrap) --> C++编写 1.1.1.1. 该加载器没有父加载器,它负责加载虚拟机核心类库,如java.lang.*等。 1.1.2. 扩展类加载器
阅读全文
摘要:类加载机制概述:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是java虚拟机的机制 1. Java程序执行时遵循以下顺序 1.1. 加载:将类的.class文件中的二进制数据装载到内存中,将其放在运行时数据区的方法区
阅读全文

浙公网安备 33010602011771号