精华内容
下载资源
问答
  • JAVA JVM性能调优监控工具详解
  • Java JVM启动参数

    万次阅读 2018-08-22 22:51:46
    已经使用了一段时间的Java,期间也了解和用过一些JVM(Java Virtual Machine)参数,但是没有仔细去整理过每个参数代表的意义,为此整理成文。 Java使用方式 java [options] classname [args] java [options] -jar ...

    Java JVM启动参数

    摘要

    已经使用了一段时间的Java,期间也了解和用过一些JVM(Java Virtual Machine)参数,但是没有仔细去整理过每个参数代表的意义,为此整理成文。

    Java使用方式

    1. java [options] classname [args]
    2. java [options] -jar filename [args]

    options: 命令行选项,空格分隔

    classname: 启动的class名称

    filename: Jar包名称(JAR)

    args: main()方法参数,空格隔开

    加载的class的main()方法必须定义为public static,并且无返回值,参数是字符串列表

    public static void main(String[] args)

    如果使用-jar选项,则args是JAR包包含的class。启动class必须通过Main-Class的manifest指定,示例如下:

    jar {
      manifest {
        attributes 'Main-Class': 'com.xx.xx'
      }
    }

    Options

    Java 命令行提供了以下几种类型的选项

    • 标准选项
    • 非标准选项
    • 高级运行选项
    • 高级JIT编译选项
    • 高级垃圾回收选项
    • 高级可用性选项

    (1) 标准选项被所有类型的JVM支持。标准选项用来做常规操作,如查看版本,设定class path等。

    (2) 非标准选项一般是指Java HotSpot Virtual Machine特定的选项,不能保证被所有类型的JVM支持,该类选项使用时,以-X开头。

    (3) 高级选项是用于Java HotSpot Virtual Machine特定区域调优的选项,同样不能保证被所有的JVM支持。该类选择使用时,以-XX开头。对于Boolean类型的选项,通过使用+表示选项生效,- 来标示选项无效。如-XX:+OptionName表示选项OptionName生效,-XX:-OptionName表示选项OptionName无效。

    标准选项

    所有类型的JVM均支持标准选项, 为此简单列举经常用到的几个选项。

    • -d32

      将应用运行在32bit的环境,如果32bit环境未初始化或不支持,则报错。默认是运行在32bit环境。

    • -d64

      将应用运行在64bit环境。如果64bit环境未初始化或不支持,则报错。默认是运行在32bit环境。

    • -help/-?

      显示帮助文档

    • -verbose:class

      显示每个加载的class

    • -verbose:gc

      显示每次垃圾回收事件

    • -version

      显示当前java 版本

    • -disableassertions[:[packagename]…|:classname] / -da[:[packagename]…|:classname]
      禁用断言(assert),可以指定禁用断言的package和class。

    • -disablesystemassertions / -dsa
      禁用全部断言(assert)

    • -enableassertions[:[packagename]…|:classname] / -ea[:[packagename]…|:classname]

      启用断言,可以指定package和class。默认断言是禁用的。

    • -enablesystemassertions / -esa

      启用全部断言(assert)

    • -server

      选择Java HotSpot Server VM。64bit版本隐含设置-server。

    • -D[property]=value

    定义系统属性值。property变量是一个字符串代表属性名,value代表设定的属性值。

    以设置系统的文件编码为utf-8为例:

    -Dfile.encoding=utf-8

    非标准选项

    非标准选项一般是指Java HotSpot Virtual Machine特定的选项。列举经常用到的几个选项。

    • -X

      显示有效的-X选项的帮助信息

    • -Xbatch

      禁用后台编译。默认情况下JVM是后台编译。该选项等同于 -XX:-BackgroundCompilation

    • -Xloggc:filename

      将GC(garbage collection)信息重定向到filename。当-Xloggc-verbose:gc同时给出时,-Xloggc将重载-verbose:gc

    • -Xmnsize

      设置堆中年轻代(young generation)的初始值和最大值大小。单位是bytes,常用K,M,G (不区分大小写)

      年轻代主要放置新对象,这块区域也是GC执行比较频繁的区域。如果该区域设置较小,可能导致频繁minor GC,如果设置过大,只有Full GC执行则每次GC耗时较长。Oracle建议的大小是整个堆大小的1/4 - 1/2之间。

      以设置大小为256 MB为例:

      -Xmn256m

      不同于-Xmn同时设置初始值和最大值,可通过-XX:NewSize设置初始,-XX:MaxNewSize设置最大值。

    • -Xmssize

      设置堆的初始值,该值必须是1024的倍数并且大于1MB。

      以设置初始值6 MB的堆为例:

      -Xms6m

      如果该值不设置,则通过计算年轻代和老年代的和作为堆的初始值

    • -Xmxsize

      指定应用的最大内存大小,该值必须是1024的倍数并且大于2MB。对于服务型应用,-Xms-Xmx常设置为相同,至于原因涉及垃圾回收机制,如果两者设置相同则应用占据的内存不进行动态扩展。

      以设置最大内存大小1G为例:

      -Xmx1g

      -Xmx等价于高级选项-XX:MaxHeapSize

    • -Xsssize

      设置线程栈的大小。

      以设置大小为1024KB的线程栈为例:

      -Xss1024k

      -Xss等价于高级选项-XX:ThreadStackSize

    高级运行选项

    该类选项控制Java HotSpot VM运行时的情况。列举经常用到的几个选项。

    • -XX:+DisableAttachMechanism

      启用该选项会导致附件在JVM的工具类如jcmd, jstack,jmap jinfo无效。默认情况该选项无效,JVM提供的工具类可使用。

    • -XX:MaxDirectMemorySize=size

      设置最大直接内存大小为size,对于新IO可以使用堆外内存(直接内存)构建对象,该选项是设置这块区域的大小。

      以设置最大直接内存1MB为例:

      -XX:MaxDirectMemorySize=1m

    • -XX:ThreadStackSize

      设置线程栈大小,等价于-Xss选项。

    高级可用性选项

    该类选项提供收集系统信息和debug的能力。列举经常用到的几个选项。

    • -XX:+HeapDumpOnOutOfMemory

      启用该选项,当出现java.lang.OutOfMemoryError异常时,Java的堆信息会dump到当前目录的文件中,文件命名为: java_pid[进程PID].hprof,可以通过-XX:HeapDumpPath指定dump文件路径。通过dump的文件我们利用工具,如MemoryAnalyzer,可以查看系统当时的情况,默认禁用。

    • -XX:HeapDumpPath=path

      指定OutOfMemoryError异常时dump文件的路径,示例如下:

      
      # 指定dump文件路径
      
      -XX:HeapDumpPath=/var/log/java_heapdump.hprof
    • -XX:LogFile=path

      设置log文件,默认情况下在当前目前,命名为hotspot.log。一般我们会利用slf4j工具设置日志,该选项倒不怎么使用。

    高级垃圾回收选项

    该类选项是Java HotSpot VM 用来控制垃圾回收。

    • -XX:+AggressiveHeap

      启用Java堆优化。基于服务器的情况自适应的进行堆优化。默认禁用。

    • -XX:+CMSClassUnloadingEnabled

      启用类卸载当使用CMS(the concurrent mark-sweep)垃圾收集器时。默认启用。如果禁用该选择,设置为-XX:-CMSClassUnloadingEnabled

    • -XX:CMSInitiatingOccupancyFraction=precent

      设置老年代占比当开始CMS垃圾收集时,数值在0-100之间。默认值-1。

      以老年代占比70%为例:

      -XX:CMSInitiatingOccupancyFraction=70
    • -XX:ConcGCThreads=threads

      设置垃圾回收线程的个数在并发GC时。默认值为JVM中有效的CPU的个数。

      以线程个数2为例:

      -XX:ConcGCThreads=2
    • -XX:ParallelGCThreads=threads

      设置垃圾回收线程的个数在并行GC时。默认值为JVM中有效的CPU的个数。

      以线程个数2为例:

      -XX:ParallelGCThreads=2
    • -XX:+DisableExplicitGC

      启用该选项,程序中调用System.gc()的处理均无效。默认禁用该选项,即程序中显示调用System.gc()是执行的。

    • -XX:InitialHeapSize=size

      设置应用内存初始大小,该值为0或为1024的倍数并且大于1 MB

      以设置初始内存大小为6 MB为例:

      -XX:InitialHeapSize=6m
      -XX:InitialHeapSize=6144k
      -XX:InitialHeapSize=6291456

      如果设置为0,则初始值为老年代和新生代的和。

    • -XX:MaxHeapSize=size

      设置应用内存最大值,该值为1024的倍数并且大于2 MB,该值通常与-XX:InitialHeapSize设置相同。

      该选项等价于-Xmx

    • -XX:NewRatio=ratio

      设置年轻代和老年代的比值,默认为2。

      以比值为1为例:

      -XX:NewRatio=1
    • -XX:NewSize=size

      设置堆的年轻代的初始值大小,等价于选项 -Xmn

    • -XX:+PrintGCDetails

      打印每一次GC的详细信息,默认禁用。

    • -XX:+PrintGCDateStamps

      每次GC均显示时间戳,默认禁用

    • -XX:+PrintGCApplicationStoppedTime

      打印GC延迟时长,默认禁用

    • -XX:+UseConCMarkSweepGC

      启用该选项表示在老年代的垃圾回收采用CMS垃圾回收器。启用该选项之后,-XX:+UseParNewGC选项会自动启用,并且不能禁用。默认禁用。在JDK 8中,老年代使用CMS的组合方式,年轻代不使用ParNew,即-XX:-UseParNewGC-XX:+UseConCMarkSweepGC被废弃。

    • -XX:+UseG1GC

      启用G1(garbage-first)垃圾收集器。G1是一种服务器风格的垃圾收集器,针对具有大量RAM的多处理器机器。目标是减少GC延时并且保持吞吐量。建议在设置堆(>= 6 GB)较大时使用。默认禁用。

    • -XX:+UseParallelGC

      启用Parallel Scavenge垃圾收集器,该垃圾收集器是多进程处理,目标是提高吞吐量。该选项启用后,-XX:+UseParallelOldGC会自动启用,除非显示禁用。默认禁用。

    • -XX:+UseParallelOldGC

      启用该选项,在Full GC时使用Parallel Garbage 垃圾收集器。默认禁用。与-XX:+UseParallelGC配对使用。

    • -XX:+UseParNewGC

      启用该选项,在年轻代采用并行线程垃圾回收器。默认禁用。在JDK 8中,年轻代使用ParNew,老年代不使用CMS的组合方式,即-XX:+UseParNewGC-XX:-UseConCMarkSweepGC被废弃。

    • -XX:+UseSerialGC

      启用单线程垃圾回收器。针对简单的小应用,不需要特别垃圾回收设置,该选项是一个交好的选择。默认禁用。

    最后配张年轻代和老年代垃圾回收器的组合图,加深理解。

    这里写图片描述

    图片来自 参考文献[2]

    参考文献

    [1] jdk 1.8 帮助文档

    [2] 深入理解Java虚拟机: JVM高级特性和最佳实践

    展开全文
  • 线上java JVM问题排查

    千次阅读 多人点赞 2020-01-10 10:42:35
    下面是一个老系统,代码写的有点问题导致出现这样一个JVM占比过高的问题,正常情况下也就是CPU负载不高的时候21:00左右的,也有30万,但是再多一点30几万就是阈值,就会出现堆积。 这个队列一直是增长的快。 这...

    作者:霞落满天

    第一部分  是我以前公司的一则正式案例:

    第二部分 是我另一个博客上写的主要是最近发现大家问的比较多就写了此文

     

    第一部分 线上真实故障案例

     

    下面是一个老系统,代码写的有点问题导致出现这样一个JVM占比过高的问题,正常情况下也就是CPU负载不高的时候21:00左右的,也有30万,但是再多一点30几万就是阈值,就会出现堆积。

    这个队列一直是增长的快。

    这个是zabbix的CPU监控图,可以看出某些时段CPU会有性能毛刺:

     

    经过跟同事一起讨论发现是系统框架中 kafka producer 使用了线程池,但设置较小,而消息量比较大,导致消息堆积

     

    我建议在项目中,将线程数量加大。

    下面是分析过程:

    1          dump文件来看kafka.producer.KafKaProducerImpl这个对象中的queue占用了大量内存,这个类应该fx-kafka中提供的功能,用来写业务kafka的;

    从图来看,堆内存已经占用了1.4G,可能存在内存泄露风险。

     

    2        建议查看一下dump文件中的线程消耗CPU情况,

    a可能是有线程在不停的循环造成的CPU过高;

    b gc线程不停回收造成?

     

    线上问题当时的CPU占用情况如图所示:

     

    下面是当时java内存dump

     

     

     

    =========================

    第二部分 JVM常见排障步骤

    0.jps

    这个输出java进程pid

    #jps

     

    查看java的线程

    #top -Hp 25448

    如图25757这个线程比较耗时,看看他在做什么

    注意需要折算出线程pid的16进制值,然后jstack。

    可以打印更多信息

    #jstack pid | grep -A 20 649d

    参考:JVM调优之jstack找出最耗cpu的线程并定位代码

    top+jstack分析cpu过高原因

     

    1.jstack

    #jstack -l pid > jstack.log

    使用jstack命令输出这一时刻的线程栈

    jstack线程分析

    jstack日志深入理解

     

    2.jmap

    #jmap -dump:format=b,file=heapDump 6900

    #jmap -dump:live,format=b,file=dump.bin  6900

    -dump:[live,]format=b,file=<filename> 使用hprof二进制形式,输出jvm的heap内容到文件=. 
    live子选项是可选的,假如指定live选项,那么只输出活的对象到文件. 

    Java命令学习系列(3):Jmap

    jmap查看堆内存大小

    #jmap -heap  pid

    注意:jmap使用的时候jvm是处在停顿状态的,只能在服务不可用的时候为了解决问题来使用,否则会造成服务中断。

    使用jmap -histo[:live] pid查看堆内存中的对象数目、大小统计直方图,如果带上live则只统计活对象,如下:
    # jmap -histo:live pid | more

     

    需要使用MAT工具分析jmap dump的内存

    使用jmap和MAT分析JVM堆内存

     

    3.jstat

    jstat -gcutil pid

    250毫秒一次采样4次

    可以看出:
    堆内存 = 年轻代 + 年老代 + 永久代
    年轻代 = Eden区 + 两个Survivor区(From和To)

    现在来解释各列含义:
    S0C、S1C、S0U、S1U:Survivor 0/1区容量(Capacity)和使用量(Used)
    EC、EU:Eden区容量和使用量
    OC、OU:年老代容量和使用量
    PC、PU:永久代容量和使用量
    YGC、YGT:年轻代GC次数和GC耗时
    FGC、FGCT:Full GC次数和Full GC耗时
    GCT:GC总耗时
    E、hprof(Heap/CPU Profiling Tool)

    4.gcore

    #gdb -q --pid=1990

    (gdb) generate-core-file
    (gdb) detach
    (gdb) quit
    jmap -dump:format=b,file=heap.hprof /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java core.1990 

    需要具体jdk对应的bin/java

    参考:

    gcore 获取程序core dump file 但程序不用退出,gdb 分析core

    java程序性能分析之thread dump和heap dump

     

    5.堆外内存泄露分析

    top出来java占用内存极大而jmap出来的很小,说明有堆外内存泄露。

    参考Java堆外内存泄露分析

     

    综合使用参考: JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解

    JVM性能调优监控工具专题一:JVM自带性能调优工具(jps,jstack,jmap,jhat,jstat,hprof)

    JVM性能调优监控工具专题二:VisualVM基本篇之监控JVM内存,CPU,线程

    下面一些写的好,如果觉得前面不够尽兴可以延申阅读

    如何使用MAT进行内存泄露分析

    jvm系列六、windows用jdk自带工具jps、jstack找出性能最差的代码 【windows下的比较实用】

    JVM 发生 OOM 的 8 种原因、及解决办法

    面试官问:平时碰到系统CPU飙高和频繁GC,你会怎么排查【评判标准】

    1.如果是Full GC次数过多,那么通过jstack得到的线程信息会是类似于VM Thread之类的线程;

    2.而如果是代码中有比较耗时的计算,那么我们得到的就是一个线程的具体堆栈信息

    3.如果说该接口中有某个位置是比较耗时的,由于我们的访问的频率非常高,那么大多数的线程最终都将阻塞于该阻塞点,这样通过多个线程具有相同的堆栈日志,我们基本上就可以定位到该接口中比较耗时的代码的位置。

    4.waiting on condition

    如果该线程本身就应该处于等待状态,比如用户创建的线程池中处于空闲状态的线程,那么这种线程的堆栈信息中是不会包含用户自定义的类的。这些都可以排除掉,而剩下的线程基本上就可以确认是我们要找的有问题的线程。通过其堆栈信息,我们就可以得出具体是在哪个位置的代码导致该线程处于等待状态了。

    5.deadlock死锁这种情况基本上很容易发现

    =========================

    JVM很多时间是因为系统架构不合理导致的,比如过大的内存,其实系统只要稍微调整下,完全可以提前避免。推荐看看我精心制作的课程《高性能微服务架构设计模式》你会对系统架构有很大的提高。

    高性能微服务架构设计模式
    主讲:霞落满天

    现在企业开发都是微服务架构,但是有很多问题,比如分布式定义,分布式的微服务怎么拆分,什么时候拆分,怎么做到高性能,针对这些问题我录制了一期学习视频。有任何学习问题可以给我留言

    视频地址有试听:https://edu.csdn.net/course/detail/27256/
    课程大纲
    开篇 高性能系统架构的分布式理论基础
    模型 可无限扩展的AKF立方
    问题 亿级QPS的电商网站遇到的问题
    模式 CQRS模式进行架构设计
    模式 事件溯源模式进行架构设计
    结尾 新问题

    课程精彩图片分享:

    展开全文
  • Linux - Ubuntu 下配置JAVA JVM

    千次阅读 2019-04-04 10:41:36
    JAVA_HOME=/home/bigdata/jdk1.8.0_201 最终文件内容如下。 配置完成后,运行 source /etc/environment sudo reboot ##重启 记住一定要重启,之后才能正常运行。 重启完成后,运行 java -version ,...

    下载

    首先去下载 JDK ,版本会有更新。选择需要版本。
    点击Accept License Agreement后才能下载,选择Linux x64的那个.gz下载。
    下载

    解压并配置环境

    先说一下,下面的命令都是按照我自己的路径和jdk版本写的,全部都要根据自己的情况换名字。

    将压缩包进行解压,放入合适的位置。

    tar -zxvf jdk-8u201-linux-x64.tar.gz
    

    如果有root权限可以更改 /etc/environment 内的环境,没有权限的话更改 ~/.bashrc 环境变量。一般在机子创建的虚拟机里是有权限的,所以这里修改/etc/environment 文件。

    文件本身具有PATH=“...” 语句,所以在PATH后追加 jdk的 bin 目录即可,使用冒号分隔。追加内容如下,

    :/home/bigdata/jdk1.8.0_201
    

    当然这个要换成你自己的目录。

    同时,为了之后的方便操作,把下面两句话也添加到文件中,

    JAVA_HOME=/home/bigdata/jdk1.8.0_201
    

    最终文件内容如下。
    环境变量

    配置完成后,运行

    source /etc/environment
    sudo reboot  ##重启
    

    记住一定要重启,之后才能正常运行。

    重启完成后,运行 java -version ,检测是否成功配置。
    java版本

    如果出现错误,先看看是不是环境变量正确配置,再看看是什么其他原因。

    echo $JAVA_HOME
    echo $PATH
    

    设置好的环境变量

    展开全文
  • 查看Java JVM参数配置信息命令

    千次阅读 2019-01-03 18:37:00
    查看Java JVM参数配置信息命令 查看Java JVM参数配置信息命令 java -XX:+PrintCommandLineFlags jvm运行时状态的参数,可以很快找出问题所在。现在把几个命令记录一下:1. jstat这个命令对于查看...

    查看Java JVM参数配置信息命令

    查看Java JVM参数配置信息命令

    java -XX:+PrintCommandLineFlags

    jvm运行时状态的参数,可以很快找出问题所在。现在把几个命令记录一下:
    1. jstat
    这个命令对于查看Jvm的堆栈信息很有用。能够查看eden,survivor,old,perm等heap的capacity,utility信息
    对于查看系统是不是有能存泄漏以及参数设置是否合理有不错的意义
    2. jstack
    这个是用来查看jvm当前的thread dump的。可以看到当前Jvm里面的线程状况。这个对于查找blocked线程比较有意义
    3. jmap
    这个是用来查看jvm当前的heap dump的。可以看出当前jvm中各种对象的数量,所占空间等。可以到处一份binary heap dump的bin文件,这个文件能够直接用Eclipse Memory Anayliser来分析,并找出潜在的内存泄漏的地方。
    4. jinfo
    查看运行中的java实例参数,如下设置的tomcat的最大内存

     jinfo -flag MaxHeapSize 3556

    查看已经赋值过的参数信息

    jinfo -flag MaxHeapSize 7208

    查看垃圾回收器

     jinfo -flag UseG1GC 7208

    5. 非jvm命令 -- netstat
    通过这个命令可以看到linux系统当前在各个端口的链接状态,比如查看数据库连接数等

    posted @ 2019-01-03 18:37 Foryourfuture 阅读( ...) 评论( ...) 编辑 收藏
    展开全文
  • zabbix自动发现JAVA进程,并进行自动添加监控JAVA 进程的JVM数据,统计分析告警监控。 支持多种中间件,tomcat、weblogic、微服务方式部署JAVA应用监控。 自带发现脚本和监控脚本,以及zabbix导入模板。
  • Java JVM虚拟机学习的经典书籍

    千次阅读 2019-02-20 21:55:47
    1、深入理解Java虚拟机——JVM高级特性与最佳实践(第2版) 基于最新JDK1.7,围绕内存管理、执行子系统、程序编译与优化、高效并发等核心主题对JVM进行全面而深入的分析,深刻揭示JVM的工作原理。以实践为导向,...
  • Java JVM 中 堆,栈,方法区 详解

    万次阅读 多人点赞 2017-03-01 16:45:51
    jvm运行时数据区有... JVM栈 (Java Virtual Machine Stacks) 2. 堆内存 (Heap Memory) 3. 方法区 (Method Area) 4. 本地方法栈 (Native Method Stacks) 5. 程序计数器 (Program Counter (PC) Register)二
  • java JVM设置

    千次阅读 2014-08-21 00:30:16
    一、设置JVM内存设置 1. 设置JVM内存的参数有四个: ...-Xms Java Heap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值; -Xmn Java Heap Young区大小,不熟悉最好保
  • java jvm 查看运行状态

    千次阅读 2018-08-28 17:36:00
    sudo /usr/local/jdk1.7/bin/jstack -l 13224 | tee ~/13224.dump 获取java 线程下的dump记录 top -H -p 46366 查看该进程下的所有线程 printf "%x\n" 28887 转16进制数字 sudo /usr/local/jdk1.7/bin/...
  • Java JVM 8-java堆新生代,老年代的划分及回收算法

    万次阅读 多人点赞 2018-06-17 11:39:21
    Java堆(Java Heap)是JVM所管理的最大内存区域,也是所有线程共享的一块区域,在JVM启动时创建。  此内存区域存放的都是对象的实例和数组。JVM规范中说到:”所有的对象实例以及数组都要在堆上分配”。  Java堆...
  • java获得jvm内存大小

    2012-12-18 14:06:59
    java获得jvm内存大小
  • Android DVM和Java JVM以及ART概述

    千次阅读 2017-10-14 12:49:39
    Android DVM(Dalvik Virtual Machine)和Java JVM(Java Virtual Machine)以及ART(Android RunTime)概述JVMJava Virtual Machine,Java虚拟机,JVM是基于栈的虚拟机,JVM栈是内存中连续的存储空间。JVM优点是相对...
  • Java JVM内存调优

    千次阅读 2013-10-29 14:47:47
    首先需要注意的是在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC过后这个值是不会变化的,因此内存调优的时候要更多地使用JDK提供的内存查看...
  • Java JVM】如何避免内存泄漏、溢出

    千次阅读 2016-12-30 11:35:46
    JVM会突然需要大量neicun,这时会出发GC优化系统内存环境 5、尽量运用对象池技术以提高系统性能 生命周期长的对象拥有生命周期短的对象时容易引发内存泄漏,例如大集合对象拥有大数据量的业务对象的时候,可以...
  • 缘起  今天在对XML-security运行randoop时,出现了一个错误:在编译生成的测试用例时...涉及点有这样的几点: javac, java.lang.OutOfMemoryError: Java heap space,jvm堆栈的调优。发现了一些有用文章,转载了下。
  • Java JVM(十一):MAT 工具的使用

    万次阅读 2015-09-16 12:58:20
    介绍个人对于MAT 工具的使用
  • JVM(Java虚拟机)

    2018-12-14 09:38:49
    JVM(Java虚拟机)的整个流程:发展,运行区域,垃圾回收器,内存分配策略,垃圾收集,JVM分析工具,JVM优化
  • java jvm 最大线程数设置

    万次阅读 2014-10-31 18:39:25
    对于一个JVM实例到底能开多少个线程一直心存疑惑,所以打算实际测试下,简单google了把,找到影响线程数量的因素有下面几个:   -Xms intial java heap size -Xmx maximum java ...
  • 常见JVM面试题及答案整理

    万次阅读 多人点赞 2019-08-26 11:35:04
    总结了JVM一些经典面试题,分享出我自己的解题思路,希望对大家有帮助,有哪里你觉得不正确的话,欢迎指出,后续有空会更新。 1.什么情况下会发生栈内存溢出。 思路: 描述栈定义,再描述为什么会溢出,再说明一下...
  • 新手之路——java JVM_Bind问题解决

    万次阅读 2016-02-21 17:11:43
    严重: StandardServer.await: create[localhost:8005]:...java.net.BindException: Cannot assign requested address: JVM_Bind at java.net.DualStackPlainSocketImpl.bind0(Native Method) at java.net.DualStackP
  • JavaJVM虚拟机详解

    万次阅读 多人点赞 2017-01-26 19:14:22
    1、 什么是JVMJVMJava Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
  • java -jar jvm参数示例

    千次阅读 2020-07-22 23:47:07
    /usr/local/jdk1.8.0_181/bin/java \ -server -Xms4g -Xmx4g \ -XX:+UseG1GC -XX:+PerfDisableSharedMem \ -XX:+ParallelRefProcEnabled \ -XX:MaxGCPauseMillis=250 \ -XX:+UseLargePages \ -XX:+AlwaysPreTouch \ ...
  • Java JVM 内存解析

    千次阅读 2018-11-28 15:30:07
    文章目录Java JVM 内存解析1、最大可用内存 -Xmx2、虚拟机中可用内存量3、虚拟机总内存量4、虚拟机当前实际可用内存5、Log 方法 Java JVM 内存解析 1、最大可用内存 -Xmx 设置虚拟机最大可以使用的内存总量 // JDK...
  • Java面试系列】JVM与调优面试题

    万次阅读 2020-04-30 15:59:21
    目录 一、JVM 内存区域划分 1.程序计数器(线程私有) 二、JVM 执行子系统 1.Class 类文件结构 三.垃圾回收器和内存分配策略 ...四、编写高效优雅 Java 程序 ...六.JVM详解篇 ... Java虚拟机(JVM)原理篇 ...
  • 应用场景:某个程序发起了N个线程循环不停做某些事情,正常情况下这些线程需要被安全的停止方可保证数据不丢失,如果停电的情况那就没辙,那么有时候需要关闭服务器,那么如何让jvm告诉其内部的程序现在要关闭了呢?...
  • Java面试问题笔记——JVM

    千次阅读 2019-05-29 10:16:38
    JVMJava运行基础,面试时一定会遇到JVM的有关问题,内容相对集中,但对只是深度要求较高. 其中内存模型,类加载机制,GC是重点方面.性能调优部分更偏向应用,重点突出实践能力.编译器优化和执行模式部分偏向于理论...
  • Java中的JVM关闭钩子

    万次阅读 2020-08-14 00:54:54
    Java中的JVM关闭钩子 (翻译篇) 关机钩子是一种特殊的构造,允许开发人员插入一段代码,以便在JVM关闭时执行。当我们需要在VM关闭时执行特殊的清理操作时,这就很方便了。 通常使用关机钩子处理的一般结构,如确保我们...
  • Java Jvm运行机制原理

    万次阅读 2017-10-26 09:10:48
    一:简介在学习Java虚拟机之前,也就是Jvm之前,我想大家能够带着问题去学习,这样的话,大家学习起来也会比较有所获! 1.Java虚拟机(Jvm)是什么? 2.Java虚拟机是用来干什么的? 3.Java虚拟机它的体系结构是...
  • tomcat启动失败:Failed creating java jvm.dll

    千次阅读 2012-05-30 16:32:09
    在启动tomcat6时失败,错误信息是: [2011-01-12 17:20:54] [174 javajni.c] ...[2011-01-12 17:20:54] [994 prunsrv.c] [error] Failed creating java D:\Java\jre1.6.0_10\bin\client\jvm.dll [2011-01-12

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 856,543
精华内容 342,617
关键字:

javajvm

java 订阅