Javaliu'Blog

  • 首页

  • 归档

  • 分类

  • 标签

  • 关于

  • 公益 404

JVM优化——JVM优化工具介绍(8)

发表于 2016-12-13 | 更新于 2021-11-22 | 分类于 JVM

在JVM运行的过程中,为保证其稳定、高效或在出现GC问题时分析问题原因,我们需要对GC进行监控。所谓监控,其实就是分析清楚当前GC的情况。其目的是鉴别JVM是否在高效的进行垃圾回收,以及有没有必要进行调优。通过监控GC,我们可以搞清楚很多问题,如:

  1. minor GC和major GC的频率;
  2. 执行一次GC所消耗的时间;
  3. 新生代的对象何时被移到老生代以及花费了多少时间;
  4. 每次GC中,其它线程暂停(Stop the world)的时间;
  5. 每次GC的效果如何,是否不理想;
阅读全文 »

JVM优化——JVM优化总结(7)

发表于 2016-12-13 | 更新于 2021-11-22 | 分类于 JVM

以上所有的知识都是为了这最后一步,调优,但是在调优之前我们要记住以下原则:

1. 多数的Java应用不需要在服务器上进行GC优化;
2. 多数导致GC问题的Java应用,都不是因为我们参数设置错误,而是代码问题;
3. 在应用上线之前,先考虑将机器的JVM参数设置到最优(最适合);
4. 减少创建对象的数量;
5. 减少使用全局变量和大对象;
6. GC优化是到最后不得已才采用的手段;
7. 在实际使用中,分析GC情况优化代码比优化GC参数要多得多;

GC 优化的目的有两个:

GC的时间足够短
GC的次数足够少
阅读全文 »

JVM优化——JVM垃圾回收算法以及收集器(5)

发表于 2016-12-12 | 更新于 2021-11-22 | 分类于 JVM

说到垃圾回收(Garbage Collection,GC),很多Java程序员认为垃圾回收是JVM的问题,我们不需要去关心垃圾回收的问题,全权都交给了JVM来处理就好了。那么在Java中,什么样的对象会被认定为“垃圾”?那么当一些对象被确定为垃圾之后,采用什么样的策略来进行回收(释放空间)?在目前的商业虚拟机中,有哪些典型的垃圾收集器?了解Java的垃圾回收(GC)原理能给我们带来什么好处?我们如何监控GC,我们如何优化GC使其工作的更好?下面我们就逐一探讨一下这些问题,这也是本文的大纲:

  1. 什么样的对象被定为“垃圾”?
    . 典型的垃圾收集算法
    . 典型的垃圾收集器
阅读全文 »

JVM优化——JVM参数讲解(06)

发表于 2016-12-09 | 更新于 2021-11-22 | 分类于 JVM

JVM默认有好多参数,但是好多都是没有启用的,或者有些是在JVM启动的时候设置了一些默认值,假如我们能指定某些参数的值或者启用某些JVM监控参数的设置,这对我们以后JVM的调优将有很大帮助。

JVM参数大约有三种表示方法:

  1. 标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容;
  2. 非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;
  3. 非稳定参数(-XX),此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用(但是,这些参数往往是非常有用的);
阅读全文 »

JVM优化——Java对象内存分配机制(04)

发表于 2016-12-09 | 更新于 2021-11-22 | 分类于 JVM

Java内存分配和回收的机制概括的说就是:分代分配,分代回收。对象根据其存活时间大体分为:新生代、老年代和持(永)久代

新生代(Young Generation)

对象被创建时,内存的分配首先发生在新生代,除非这个对象太大,或者超过了设置的阈值-XX:PretenureSizeThresold设置的值,则直接被分配到Old区。大部分的对象在创建后很快就不再使用,因此很快变得不可达,于是被年轻代的GC机制清理掉,这个GC机制被称为Minor GC或叫Young GC。注意,Minor GC并不代表新生代内存不足,它事实上只表示在Eden区上的GC。

阅读全文 »

JVM优化——JVM堆内存结构(03)

发表于 2016-12-09 | 更新于 2021-11-22 | 分类于 JVM

JVM的优化主要是对JVM堆内存的优化,首先必须了解堆内存的组成部分,了解各个组成部分的作用

如图:
JVM Heap Memory Struct

阅读全文 »

JVM优化——JVM运行时内存结构(02)

发表于 2016-12-08 | 更新于 2021-11-22 | 分类于 JVM

要想对JVM进行优化,必须先了解JVM内存区域划分,在JVM运行时的数据区里,JVM管理的内存区域大约分如下几个模块:堆区、方法区、程序计数器、虚拟机栈、本地方法栈。

如图:
JVM Memory

阅读全文 »

跟我一起学习Vim--Vim乱码

发表于 2016-12-07 | 更新于 2021-11-22 | 分类于 Vim

在Vim中,有四个与编码有关的选项,它们是:fileencodings、fileencoding、encoding 和termencoding。在实际使用中,任何一个选项出现错误,都会导致出现乱码。因此,每一个Vim用户都应该明确这四个选项的含义。下面,我们详细介绍一下这四个选项的含义和作用。

1. encoding(enc)

encoding简写为enc,是Vim内部使用的字符编码方式。通常情况下,enc和locale相同,即enc的默认值是由你的locale来决定的。当我们设置了encoding之后,Vim内部所有的buffer、寄存器、脚本中的字符串等,全都使用这个编码。Vim在工作的时候,如果编码方式与它的内部编码不一致,它会先把编码转换成内部编码。如果工作用的编码中含有无法转换为内部编码的字符,在这些字符就会丢失。因此,在选择 Vim 的内部编码的时候,一定要使用一种表现能力足够强的编码,以免影响正常工作。

阅读全文 »

JVM优化——一些基本概念(01)

发表于 2016-12-06 | 更新于 2021-11-22 | 分类于 JVM

JDK、JRE和JVM是Java编程语言的核心概念,尽管它们看起来差不多,作为程序员我们可能不怎么关心,但是作为专业的程序员我们必须了解清楚。

1. JDK、JRE、JVM概念

JDK(Java开发工具包)

JDK是Java的核心组件,并提供编译、调试和运行一个Java程序所需要的所有工具,可执行文件和二进制文件,JDK针对不同的平台有不同的安装包,可以说JDK是JRE的超集,它包含了JRE的Java编译器,调试器和核心类。

阅读全文 »

跟我一起学习Vim--Vim配置

发表于 2016-12-05 | 更新于 2021-11-22 | 分类于 Vim

Vim基本配置

刚刚安装或者系统默认的Vim是非常丑陋的,如:没有语法高亮、不显示行号……当然了功能也不是很完善,根本不像网上说的那样神奇,这是因为没有对Vim进行一些配置,现在我们就来配置一下,让其发挥神器的功能,编辑vim ~/.vimrc,如果没有则创建。

阅读全文 »
1…345…7
javaliu

javaliu

学习总结 思考感悟

68 日志
16 分类
128 标签
GitHub 微博 JVM 指南 宝库 Redis
© 2021 javaliu
京ICP备2020046604号