JVM
文章平均质量分 92
淡淡的倔强
不怕千万人阻挡,只怕自己投降!
展开
-
JVM命令-jstack
一、简介jstack用法/opt/java8/bin/jstackUsage: jstack [-l] <pid> (to connect to running process) 连接活动线程 jstack -F [-m] [-l] <pid> (to connect to a hung process) 连接阻塞线程 jstack [-m] [-l] <executable> <core>转载 2020-08-17 19:54:48 · 279 阅读 · 0 评论 -
JVM命令-jmap
一、命令概述jmap 用于生成堆 dump文件,查看堆内对象统计信息、classloader 信息、 finalizer 队列Usage: jmap [option] <pid> (to connect to running process) jmap [option] <executable <core> (to connect to a core file) jmap [option] [server_id@]&l转载 2020-07-21 20:05:22 · 484 阅读 · 0 评论 -
JVM命令-jstat
jstat用法如下:jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]-t :代表时间粗-h<lines>:即-h跟数字,代表隔几行显示标题vmid :代表vm进程idinterval:代表监控间隔时间段,默认毫秒做单位count:代表取数次数例:jstat -gcutil -t -h5 123456 1000 100表示每1000毫秒收集一次jv转载 2020-07-21 19:47:28 · 1173 阅读 · 1 评论 -
触发JVM进行Full GC的情况及应对策略
本文转载自触发JVM进行Full GC的情况及应对策略前言堆内存划分为 Eden、Survivor 和 Tenured/Old 空间,如下图所示:从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC,对老年代GC称为Major GC,而Full GC是对整个堆来说的,在最近几个版本的JDK里默认包括了对永生带即方法区的回收(JDK8中无永生...转载 2018-08-18 20:42:28 · 358 阅读 · 0 评论 -
JVM常用参数总结
本文是对Java8 JVM参数解读的总结1、堆设置##设置初始年轻代堆大小-Xmn512m##设置初始的年轻代的大小,该参数等价于-Xmn。-XX:NewSize=512m设置最大的年轻代的堆大小。默认自动检测。-XX:MaxNewSize=512m##设置初始的堆大小-Xms2048m##设置最大的内存分配大小。一般的服务端部署,-Xms和-Xmx设置为同样大小...原创 2018-08-09 15:11:20 · 1070 阅读 · 0 评论 -
JVM实用参数(一)打印所有XX参数及值
本篇文章基于Java 6(update 21oder 21之后)版本, HotSpot JVM 提供给了两个新的参数,在JVM启动后,在命令行中可以输出所有XX参数和值。-XX:+PrintFlagsFinal-XX:+PrintFlagsInitial-XX:+PrintCommandLineFlags-XX:+PrintFlagsFinal让我们现在就了解一下新参数的输...转载 2018-03-14 14:56:30 · 5621 阅读 · 0 评论 -
Java8 JVM参数解读
我们知道java虚拟机启动时会带有很多的启动参数,Java命令本身就是一个多参数的启动命令。那么具体JVM启动包含哪些参数呢?这篇文章针对java8的情况做一篇汇总解读,包含大多数常见和不常见的命令参数,过于小众的就不写了。JVM参数官网:http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.ht...转载 2018-02-27 18:20:42 · 3246 阅读 · 0 评论 -
面向JIT编程-方法内联
一、什么是JITJIT的全称是Just in time compilation,中文称之为即时编译,能够加速 Java 程序的执行速度。JIT是JVM最强大的武器之一,在运行时可以让java从屌丝到高富帅的飞跃,强大到在google上搜索为什么java比c++快居然会有200W的结果。JIT 编译过程通常JIT的有以下几种手段来优化JVM的性能:1、针对特定CPU型号的编译优...转载 2018-03-08 19:13:05 · 5996 阅读 · 0 评论 -
JVM实用参数(二)JVM类型、工作模式及代码缓存
一、JVM的类型当虚拟机运行在-client模式的时候,使用的是一个代号为C1的轻量级编译器, 而-server模式启动的虚拟机采用相对重量级,代号为C2的编译器. C2比C1编译器编译的相对彻底,,服务起来之后,性能更高.-server 模式启动时,速度较慢,但是一旦运行起来后,性能将会有很大的提升。大意是说,这两个JVM是使用的不同编译器。Client JVM适合需要快速启动和较小...原创 2018-03-14 18:02:47 · 2192 阅读 · 0 评论 -
JVM学习笔记(六)Java Class类文件结构
Java语言从诞生之时就宣称一次编写,到处运行的跨平台特性,其实现原理是源码文件并没有直接编译成机器指令,而是编译成Java虚拟机可以识别和运行的字节码文件(Class类文件,*.class),字节码文件是一种平台无关的中间编译结果,字节码文件由java虚拟机读取,解析和执行,java虚拟机屏蔽了不同操作系统和硬件平台的差异性。 如今的java虚拟机已经称为一种通用平台,不但能够运行java语言转载 2017-04-25 17:52:32 · 1828 阅读 · 0 评论 -
JVM学习笔记(五)垃圾收集器
Java堆内存被划分为新生代和年老代两部分,新生代主要使用复制和标记-清除垃圾回收算法,年老代主要使用标记-整理垃圾回收算法,因此java虚拟中针对新生代和年老代分别提供了多种不同的垃圾收集器,JDK1.6中Sun HotSpot虚拟机的垃圾收集器如下:图中如果两个垃圾收集器直接有连线,则表明这两个垃圾收集器可以搭配使用。虚拟机所处的区域,则表示它是属于新生代收集器还是老年代收集器。1、Seria原创 2017-04-24 23:07:27 · 1805 阅读 · 0 评论 -
JVM学习笔记(四)垃圾回收算法
Java虚拟机的内存区域中,程序计数器、虚拟机栈和本地方法栈三个区域是线程私有的,随线程生而生,随线程灭而灭;栈中的栈帧随着方法的进入和退出而进行入栈和出栈操作,每个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这三个区域的内存分配和回收都具有确定性。垃圾回收重点关注的是堆和方法区部分的内存。GC需要完成的三件事情: 1、哪些内存需要回收? 2、什么时候回收? 3、如何回收?判断原创 2017-04-14 16:55:51 · 1971 阅读 · 0 评论 -
JVM学习笔记(七)类加载机制-类加载的时机、过程
前言 Java虚拟机类加载过程是把Class类文件加载到内存,并对Class文件中的数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型的过程。 与那些在编译时需要进行连接工作的语言不同,在java语言里,类型的加载,连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为java应用程序提供高度的灵活性,在java里天生可以原创 2017-04-26 23:57:47 · 4312 阅读 · 2 评论 -
JVM学习笔记(八)类加载机制-类加载器
前言 类加载器虽然只用于实现类的加载动作,但它在java程序中起到的作用却远远不限于类加载阶段。对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在java虚拟机中的唯一性,每一个类加载器,都拥有一个独立的类名称空间。两个类被同一虚拟机加载,即时这两个类来源于同一个Class文件,只要加载它们的类加载器不同,那这两个类就必定不想等。 这里所指的“相等“,包括代表类的Class原创 2017-05-01 15:59:30 · 2135 阅读 · 0 评论 -
JVM学习笔记(三)Java内存溢出(OutOfMemoryError)实例
本文转载自:《深入理解java虚拟机》学习笔记2——Java内存溢出实例 注意:本文对方法区和常量池内存溢出实例是基于JDK1.6,对于HotSpot虚拟机,Java jdk1.7中的常量池被移到了堆中,在jdk1.8中移除整个永久代,取而代之的是一个叫元空间(Metaspace)的区域,如果想了解更多可以参考—— Java 8: 元空间(Metaspace)。通过简单的小例子程序,演示Jav转载 2017-04-14 11:51:34 · 2165 阅读 · 0 评论 -
JVM学习笔记(一)java内存区域
java虚拟机在执行java程序的过程中将它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。javaSE 7 版中java虚拟机所管理的内存讲会包括以下几个运行时数据区域,如下图所示:其中方法区和堆是由所有线程共享的数据区。 Java虚拟机栈,本地方法栈和程序计数器是线程隔离的原创 2017-04-13 16:34:41 · 1931 阅读 · 0 评论 -
JVM学习笔记(二)HotSpot虚拟机对象探秘
以常用的虚拟机HotSpot和常用的内存区域java堆为例,深入探讨HotSpot虚拟机在java堆中对象分配、布局和访问的全过程。一、对象的创建 java是一门面向对象的编程语言,在java程序运行过程中无时无刻都有对象被创建出来。在语言层面上,创建对象(例如克隆、反序列化)通常仅仅是一个new关键字而已,而在虚拟机中,对象(文中讨论的对象限于普通java对象,不包括数组和Class对象等)的创原创 2017-04-13 22:50:24 · 2081 阅读 · 0 评论 -
Java 8: 元空间(Metaspace)
前言 很多开发者都在其系统中见过“java.lang.OutOfMemoryError: PermGen space”这一问题。这往往是由类加载器相关的内存泄漏以及新类加载器的创建导致的,通常出现于代码热部署时。相对于正式产品,该问题在开发机上出现的 频率更高,在产品中最常见的“问题”是默认值太低了。常用的解决方法是将其设置为256MB或更高。 JDK8 HotSpot JVM 将移除永久转载 2017-04-13 18:06:26 · 41326 阅读 · 0 评论