
Java虚拟机
文章平均质量分 95
Java虚拟机
张维鹏
这个作者很懒,什么都没留下…
展开
-
G1 垃圾收集器原理详解
Young CG 和 Mixed GC,是G1回收空间的主要活动。当应用开始运行时,堆内存可用空间还比较大,只会在年轻代满时,触发年轻代收集;随着老年代内存增长,当到达 IHOP 阈值 -XX:InitiatingHeapOccupancyPercent(老年代占整堆比,默认45%) 时,G1开始着手准备收集老年代空间。首先经历并发标记周期,识别出高收益的老年代分区。但随后G1并不会马上开启一次混合收集,而是等待下一次年轻代收集,在这次STW中,确定下次混合收集的CSet,触发 Mixed GC原创 2022-01-04 06:51:38 · 25571 阅读 · 32 评论 -
Java虚拟机:对象创建过程与类加载机制、双亲委派模型
类加载机制,就是虚拟机把类的数据从class文件加载到内存,并对数据进行校检,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型的过程。JVM的类加载机制,规定一个类有且只有一个类加载器对它进行加载。而如何保证这个只有一个类加载器对它进行加载呢?则是由双亲委派模型来实现的。一个类加载器收到了类加载的请求,他不会去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一层的类加载器都是如此,因此所有请求都会被传到最顶层的启动类加载器,只有当父加载器反馈无法完成加载请求时,子加载器才会尝试加载.原创 2020-11-22 11:39:57 · 40587 阅读 · 10 评论 -
Java虚拟机:垃圾回收机制与垃圾收集器
在GC开始时,对象会存在Eden和From区,To区是空的,当Eden区没有足够的内存分配给对象时,虚拟机会发起一次Minor GC。进行GC时,Eden区存活的对象会被复制到To区,From区存活的对象会根据年龄值决定去向,达到阈值的对象会被移动到老年代中,没有达到阈值的对象会被复制到To区(但如果符合“动态年龄判断”的条件,即使未达到阈值也会从Survivor区直接移动到老年代)。这时Eden区和From区已经被清空了,接下来From区和To区交换角色,以保证To区在GC开始时是空的。...原创 2018-05-12 17:23:14 · 11768 阅读 · 3 评论 -
Java虚拟机:JVM 主要组成部分与内存区域
一、Java运行时内存中的数据区域:每一个Java程序启动后,会获得一个JVM的实例,用来管理内存。Java 虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有个字的用途,以及创建和销毁时间。Java虚拟机所管理的内存将会包括以下几个运行时数据区域:1、程序计数器:程序计数器是一块较小的空间,是当前线程执行的字节码的行号指示器,字......原创 2018-05-12 15:45:50 · 14678 阅读 · 1 评论 -
Java虚拟机:Java中堆和栈的详细区别
一、Java把内存划分成两种:一种是栈内存,一种是堆内存。在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。堆内存用来存放由new创建的对象和数组。在堆中分配的内存,由Java虚拟机的自动垃圾回...原创 2019-04-12 13:02:15 · 18446 阅读 · 8 评论 -
Java虚拟机:class类文件结构
一、平台无关性:Java的无关性的实现,是由于Java源代码编译后生成的存储字节码的文件,即Class文件,以及Java虚拟机的实现。无关性包括:平台无关性以及语言无关性。(1)平台无关性,是指java代码可以运行在不同操作系统的虚拟机上面,因为不同的操作系统都有各自的Java虚拟机,从而实现程序的“一次编写,到处运行”。(2)语言无关性是指Jav...原创 2018-05-09 18:34:43 · 1359 阅读 · 0 评论 -
Java虚拟机:性能监控与故障处理工具
概述:给一个系统定位问题的时候,知识、经验是关键基础,数据是依据。工具是运用知识处理数据的手段。这里说的数据包括:运行日志、异常堆栈、GC日志、线程快照文件(threaddump/javacore文件)、堆转储快照(heapdump/hprof文件)等。## JDK的命令行工具:JDK的命令行工具大多数是对jdk/lib/tools.jar类库的一层薄包装而已,它们的主要功能代码是在t...原创 2018-11-15 11:53:46 · 1358 阅读 · 1 评论 -
Java虚拟机:常见JVM参数配置和GC性能优化
一、常见的JVM参数配置:1、垃圾回收统计信息:-XX:+PrintGC打印GC简要信息-XX:+PrintGCDetails打印GC的详细信息-XX:+PrintGCTimeStamps打印CG发生的时间戳-Xloggc:log/gc.log指定GC log的位置,以文件输出-XX:+PrintHeapAtGC每一次GC前和GC后,都打印堆信息。2...原创 2019-02-19 22:52:02 · 7373 阅读 · 0 评论 -
Java虚拟机:深入详细分析Java ClassLoader原理与源码
一、什么是ClassLoader? ClassLoader就是类加载器,当我们写好一个Java程序之后,都是由若干个.class文件组成的一个完整的Java应用程序,当程序在运行时,即会调用该程序的一个入口函数来调用系统的相关功能,而这些功能都被封装在不同的class文件当中,所以经常要从这个class文件中要调用另外一个class文件中的方法,如果另外一个文件不存在的,...原创 2019-04-13 19:43:50 · 4851 阅读 · 0 评论 -
堆栈分析-服务器问题定位
日常开发中,我们常见的服务器问题主要可以归类为一下几种:CPU过载问题、内存过高问题、磁盘IO问题、网络问题。当服务器出现问题时,我们一般可以按照以下思路进行定位:① 如果最近有版本发布,则先从代码提交记录中分析最新版本代码是否存在问题;② 使用 ps、top等命令分析线程状态;③ 先将出现异常的服务器下线并保留服务器环境,接着使用 jstack 导出线程快照信息以及使用 jmap 导出堆栈内存日志进行分析,该命令会会线上服务器性能造成影响,所以执行前先下线服务器防止对用户造成影响...原创 2022-01-24 08:00:00 · 7802 阅读 · 1 评论