jvm
ZhaoYingChao88
学而不思则罔,思而不学则殆!
展开
-
jvm 内存溢出的多种原因及优化方法
让我们看一下我们日常在开发过程中接触内存溢出的异常: Exception in thread "main" [Full GCjava.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Unknown Source) at java.util.Arrays.copyOf(Unknown原创 2017-03-22 10:33:50 · 10530 阅读 · 0 评论 -
Java的四种引用方式
Java的四种引用方式java内存管理分为内存分配和内存回收,都不需要程序员负责,垃圾回收的机制主要是看对象是否有引用指向该对象。java对象的引用包括 强引用,软引用,弱引用,虚引用Java中提供这四种引用类型主要有两个目的:第一是可以让程序员通过代码的方式决定某些对象的生命周期;第二是有利于JVM进行垃圾回收。下面来阐述一下这四种类型引用的概念:1.强引用 是指创建一个对象并把这个对象赋给一...原创 2018-04-17 17:38:00 · 315 阅读 · 0 评论 -
虚拟机内存结构
虚拟机内存结构JVM的主要结构如下图所示方法区和堆由所有线程共享,其他区域都是线程私有的程序计数器(Program Counter Register)类似于PC寄存器,是一块较小的内存区域,通过程序计数器中的值寻找要执行的指令的字节码,由于多线程间切换时要恢复每一个线程的当前执行位置,所以每个线程都有自己的程序计算器。这一个区域不会有OutOfMemeryError。当执行Java方法时,这里存储...原创 2018-04-18 16:28:21 · 395 阅读 · 0 评论 -
Java 内存模型之堆内存管理
Java 内存模型之堆内存(Heap) 一、背景知识:内存类型介绍 1、什么是 Perm Gen? Perm Gen : Permanent Generation Perm Gen 区是一个特殊的JVM内存区,因为它用来存储用来描述 Class 的 元数据(Class 可以不属于Java语言的一部分,也可以属于),诸如:描述类及其方法。 在大的应用中该区一会儿就满了,并抛出错误:java.lan...原创 2018-04-23 15:01:27 · 582 阅读 · 0 评论 -
JVM堆外内存
广义的堆外内存说到堆外内存,那大家肯定想到堆内内存,这也是我们大家接触最多的,我们在jvm参数里通常设置-Xmx来指定我们的堆的最大值,不过这还不是我们理解的Java堆,-Xmx的值是新生代和老生代的和的最大值,我们在jvm参数里通常还会加一个参数-XX:MaxPermSize来指定持久代的最大值,那么我们认识的Java堆的最大值其实是-Xmx和-XX:MaxPermSize的总和,在分代算法下,...原创 2018-05-17 09:43:50 · 1069 阅读 · 0 评论 -
jvm详解
JVM内存模型总体架构图程序计数器多线程时,当线程数超过CPU数量或CPU内核数量,线程之间就要根据时间片轮询抢夺CPU时间资源。因此每个线程有要有一个独立的程序计数器,记录下一条要运行的指令。线程私有的内存区域。如果执行的是JAVA方法,计数器记录正在执行的java字节码地址,如果执行的是native方法,则计数器为空。虚拟机栈线程私有的,与线程在同一时间创建。管理JAVA方法执行的内存模型。每...原创 2018-05-17 09:46:53 · 617 阅读 · 0 评论 -
JVM G1详解
java程序性能当我们调优java程序时,通常的目标有两个: 响应能力 或者 吞吐量响应能力响应能力指一个程序或者系统对请求的是否能够及时响应。 比如: 一个桌面UI能多快的响应一个事件; 一个网站能够多快返回一个页面请求; 数据库能够多快返回查询的数据;对于这类对响应能力敏感的场景,长时间的停顿是无法接受的。吞吐量吞吐量关注的是,在一个指定的时间内,最大化一个应用的工作量。 如下方式来衡量一个系...原创 2018-05-17 17:21:25 · 13412 阅读 · 5 评论 -
JVM 栈分配与TLAB
我们在学习使用Java的过程中,一般认为new出来的对象都是被分配在堆上,但是这个结论不是那么的绝对,通过对Java对象分配的过程分析,可以知道有两个地方会导致Java中new出来的对象并一定分别在所认为的堆上。这两个点分别是Java中的逃逸分析和TLAB(Thread Local Allocation Buffer)。本文首先对这两者进行介绍,而后对Java对象分配过程进行介绍。1. 逃逸分析1...原创 2018-05-18 11:08:20 · 10445 阅读 · 5 评论 -
jvm 常用工具
jps查看所有的jvm进程,包括进程ID,进程启动的路径等等。我自己也用PS,即:ps -ef | grep javajstack观察jvm中当前所有线程的运行情况和线程当前状态。系统崩溃了?如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。系统hung...原创 2018-05-18 11:20:00 · 833 阅读 · 0 评论 -
jvm GC日志分析详解
JVM和GC调优,总结下CMS的一些特点和要点,让我们先简单的看下整个堆年轻代和年老代的垃圾收集器组合(以下配合java8完美支持,其他版本可能稍有不同),其中标红线的则是我们今天要着重讲的内容:垃圾回收器的可用组合: ParNew and CMS"Concurrent Mark and Sweep" 是CMS的全称,官方给予的名称是:“Mostly Concurrent Mark and Sw...原创 2018-05-18 11:36:59 · 6654 阅读 · 0 评论 -
堆外内存与堆内内存详解
堆外内存一直是Java业务开发人员难以企及的隐藏领域,究竟他是干什么的,以及如何更好的使用呢?那就请跟着我进入这个世界吧。一、什么是堆外内存1、堆内内存(on-heap memory)回顾堆外内存和堆内内存是相对的二个概念,其中堆内内存是我们平常工作中接触比较多的,我们在jvm参数中只要使用-Xms,-Xmx等参数就可以设置堆的大小和最大值,理解jvm的堆还需要知道下面这个公式:堆内内存 = 新生...原创 2018-05-07 17:14:42 · 33307 阅读 · 7 评论 -
分析内存泄露的一般方法
分析内存泄露的一般步骤 如果发现Java应用程序占用的内存出现了泄露的迹象,那么我们一般采用下面的步骤分析把Java应用程序使用的heap dump下来使用Java heap分析工具,找出内存占用超出预期(一般是因为数量太多)的嫌疑对象必要时,需要分析嫌疑对象和其他对象的引用关系。查看程序的源代码,找出嫌疑对象数量过多的原因。dump heap 如果Java应用程序出现了内存泄露,...原创 2018-05-28 19:28:23 · 3318 阅读 · 0 评论 -
JMM 内存模型
多任务和高并发的内存交互多任务和高并发是衡量一台计算机处理器的能力重要指标之一。一般衡量一个服务器性能的高低好坏,使用每秒事务处理数(Transactions Per Second,TPS)这个指标比较能说明问题,它代表着一秒内服务器平均能响应的请求数,而TPS值与程序的并发能力有着非常密切的关系。物理机的并发问题与虚拟机中的情况有很多相似之处,物理机对并发的处理方案对于虚拟机的实现也有相当大的参...原创 2018-07-02 17:26:26 · 468 阅读 · 0 评论 -
JVM 引用机制
理解 Java 的 GC 与 幽灵引用 Java 中一共有 4 种类型的引用 : StrongReference、 SoftReference、 WeakReference 以及 PhantomReference (传说中的幽灵引用 呵呵), 这 4 种类型的引用与 GC 有着密切的关系, 让我们逐一来看它们的定义和使用场景 : 1. Strong Refere...原创 2018-04-17 17:35:39 · 217 阅读 · 0 评论 -
JVM MAT使用分析详解
MAT简介MAT是一款非常强大的内存分析工具,在Eclipse中有相应的插件,同时也有单独的安装包。在进行内存分析时,只要获得了反映当前设备内存映像的hprof文件,通过MAT打开就可以直观地看到当前的内存信息。一般说来,这些内存信息包含:所有的对象信息,包括对象实例、成员变量、存储于栈中的基本类型值和存储于堆中的其他对象的引用值。所有的类信息,包括classloader、类名称、父类、静态变量等...原创 2018-04-17 15:11:19 · 5186 阅读 · 0 评论 -
JVM优化:生产环境参数实例及分析
java application项目(非web项目)改进前:-Xms128m-Xmx128m-XX:NewSize=64m-XX:PermSize=64m-XX:+UseConcMarkSweepGC-XX:CMSInitiatingOccupancyFraction=78-XX:ThreadStackSize=128-Xloggc:logs/gc.log-Dsun.rmi.dgc原创 2017-11-14 19:51:56 · 508 阅读 · 0 评论 -
三大Java 虚拟机垃圾回收机制的比较(HotSpot, JRockit, IBM JVM)
Hotspot JVM使用和 IBM Websphere及 OracleWeblogic不同的垃圾回收机制,但是垃圾回收的概念和算法是相通的。 HotSpotJVM 1)HotSpotJVM使用内存分区(如永久perm区和分代Generation Heap区),分代区(Generation Heap区)又包括新生Yong区和老生Old/Tenured区,Yong区中又分为Ede原创 2017-04-28 16:39:40 · 6595 阅读 · 1 评论 -
JConsole使用
一、JConsole是什么 从Java 5开始 引入了 JConsole。JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运行。您可以轻松地使用 JConsole(或者,它更高端的 “近亲” VisualVM )来监控 Java 应用程序性能和跟踪 Java 中的代码。二、如何启动JConsole如果是从命令行启动,使 JD原创 2017-04-28 16:57:45 · 2239 阅读 · 0 评论 -
使用JVisualVM进行性能分析
地址:https://visualvm.dev.java.net/连接1、本地机器的程序直接可以监听到2、远程机器的程序需要加上JVM参数-Dcom.sun.management.jmxremote= true-Dcom.sun.management.jmxremote.port= 9090原创 2017-04-28 17:00:46 · 3256 阅读 · 0 评论 -
jvm内存调优关键参数-续
堆内存设置原理JVM堆内存分为2块:Permanent Space 和 Heap Space。Permanent 即 持久代(Permanent Generation),主要存放的是Java类定义信息,与垃圾收集器要收集的Java对象关系不大。Heap = { Old + NEW = {Eden, from, to} },Old 即 年老代(Old Generation原创 2017-05-02 15:48:48 · 716 阅读 · 0 评论 -
深入理解JVM—基础
深入理解JVM—JVM内存模型我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存,用户缓冲用户IO等待导致CPU的等待成本,但是随着CPU的发展,内存的读写速度也远远跟不上CPU的读写速度,因此,为了解决这一纠纷,CPU厂商在每颗CPU上加入了高速缓原创 2017-05-02 16:04:15 · 604 阅读 · 0 评论 -
JVM监测&工具
前几篇篇文章介绍了介绍了JVM的参数设置并给出了一些生产环境的JVM参数配置参考方案。正如之前文章中提到的JVM参数的设置需要根据应用的特性来进行设置,每个参数的设置都需要对JVM进行长时间的监测,并不断进行调整才能找到最佳设置方案。本文将介绍如果通过工具及Java api来监测JVM的运行状态,并详细介绍各工具的使用方法。 需要监测的数据:(内存使用情况 谁使用了内存 GC的原创 2017-05-02 16:08:10 · 1563 阅读 · 0 评论 -
JVM 参数介绍
功能开关:参数默认值或限制说明参数默认值功能-XX:-AllowUserSignalHandlers限于Linux和Solaris,默认不启用允许为java进程安装信号处理器,信号处理参见类:sun.misc.Signal, sun.misc.SignalHandler-XX:+Di转载 2017-05-02 16:41:15 · 527 阅读 · 0 评论 -
JVM性能监控和调优
参考:http://www.cnblogs.com/java-zhao/category/776216.html1. JVM性能监控1、定位系统问题依据GC日志堆转储快照(heapdump/hprof文件)线程快照(threaddump/javacore文件)运行日志异常堆栈分析依据的工具jps:显示指定系统内的所有JVM进程jstat:收集原创 2017-05-07 15:27:19 · 865 阅读 · 0 评论 -
最全JVM7.8分析和优化
1. JVM堆内存划分这两天看到下面这篇文章的图不错。一图读懂JVM架构解析1.1 JDK7及以前的版本其中最上一层是Nursery内存,一个对象被创建以后首先被放到Nursery中的Eden内 存中,如果存活期超两个Survivor之后就会被转移到长时内存中(Old Generation)中。永久内存中存放着对象的方法、变量等元数据信息原创 2017-05-07 19:03:24 · 1840 阅读 · 1 评论 -
JVM调优总结-调优方法
JVM调优工具Jconsole,jProfile,VisualVMJconsole : jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用。对垃圾回收算法有很详细的跟踪。详细说明参考这里 JProfiler:商业软件,需要付费。功能强大。详细说明参考这里 VisualVM:JDK自带,功能强大,与JProfiler类似。推荐。原创 2017-04-26 19:21:04 · 828 阅读 · 0 评论 -
jvm内存调优及原理的学习笔记
JVM 一.虚拟机的基本结构 1.jvm整体架构 类加载子系统:负责从文件系统或者网络中加载class信息,存入方法区中。方法区(Perm):存放加载后的class信息,包括静态方法,jdk1.6以前包含了常量池。参数:-XX:PermSize初始值 -XX:MaxPermSize最大值 Java堆(Hea原创 2017-04-26 20:18:38 · 702 阅读 · 1 评论 -
JVM调优实战
java application项目(非web项目)改进前:-Xms128m-Xmx128m-XX:NewSize=64m-XX:PermSize=64m-XX:+UseConcMarkSweepGC-XX:CMSInitiatingOccupancyFraction=78-XX:ThreadStackSize=128-Xloggc:logs/gc.log-Dsun.rmi.dgc原创 2017-10-18 19:36:15 · 412 阅读 · 0 评论 -
JVM调优——CMS GC日志分析
最近在学习JVM和GC调优,今天总结下CMS的一些特点和要点,让我们先简单的看下整个堆年轻代和年老代的垃圾收集器组合(以下配合java8完美支持,其他版本可能稍有不同),其中标红线的则是我们今天要着重讲的内容:垃圾回收器的可用组合: ParNew and CMS"Concurrent Mark and Sweep" 是CMS的全称,官方给予的名称是:“Mostly Concurrent Mark...原创 2018-07-11 17:20:19 · 539 阅读 · 0 评论