JVM
GarfieldEr007
这个作者很懒,什么都没留下…
展开
-
使用 Eclipse Memory Analyzer 进行堆转储文件分析
概述对于大型 JAVA 应用程序来说,再精细的测试也难以堵住所有的漏洞,即便我们在测试阶段进行了大量卓有成效的工作,很多问题还是会在生产环境下暴露出来,并且很难在测试环境中进行重现。JVM 能够记录下问题发生时系统的部分运行状态,并将其存储在堆转储 (Heap Dump) 文件中,从而为我们分析和诊断问题提供了重要的依据。通常内存泄露分析被认为是一件很有难度的工作,一般由团队中的资深人士进...转载 2020-01-15 22:35:46 · 729 阅读 · 0 评论 -
jvm理论-字节码指令
Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成。基本数据类型1、除了long和double类型外,每个变量都占局部变量区中的一个变量槽(slot),而long及double会占用两个连续的变量槽。2、大多数对于boolean、byte、short和char类型数...转载 2019-11-22 12:56:06 · 624 阅读 · 0 评论 -
JVM 垃圾回收器工作原理及使用实例介绍
垃圾收集基础Java 语言的一大特点就是可以进行自动垃圾回收处理,而无需开发人员过于关注系统资源,例如内存资源的释放情况。自动垃圾收集虽然大大减轻了开发人员的工作量,但是也增加了软件系统的负担。拥有垃圾收集器可以说是 Java 语言与 C++语言的一项显著区别。在 C++语言中,程序员必须小心谨慎地处理每一项内存分配,且内存使用完后必须手工释放曾经占用的内存空间。当内存释放不够完全转载 2018-02-28 22:57:49 · 729 阅读 · 0 评论 -
JVM系列三:JVM参数设置、分析
不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率。但是调整GC是以个极为复杂的过程,由于各个程序具备不同的特点,如:web和GUI程序就有很大区别(Web可以适当的停顿,但GUI停顿是客户无法接受的),而且由于跑在各个机器上的配置不同...转载 2018-06-01 08:53:35 · 582 阅读 · 0 评论 -
java jvm 参数 -Xms -Xmx -Xmn -Xss 调优总结
缘起 今天在对XML-security运行randoop时,出现了一个错误:在编译生成的测试用例时,java.lang.OutOfMemoryError: Java heap space。感觉很新奇,就上网查了一下。涉及点有这样的几点: javac, java.lang.OutOfMemoryError: Java heap space,jvm堆栈的调优。发现了一些有用文章,转载了下。注:该文章中...转载 2018-06-01 08:54:37 · 1792 阅读 · 0 评论 -
Java虚拟机学习(8):查看JVM参数及值的命令行工具
查看JVM各个参数值方式1. HotSpot vm中的各个globals.hpp文件 查看jvm初始的默认值及参数globals.hppglobals_extension.hppc1_globals.hppc1_globals_linux.hppc1_globals_solaris.hppc1_globals_sparc.hppc1_globals_windows.hppc1_globals_x...转载 2018-06-01 08:55:38 · 1092 阅读 · 0 评论 -
JVM监控与调优
光说不练假把式,学习Java GC机制的目的是为了实用,也就是为了在JVM出现问题时分析原因并解决之。通过学习,我觉得JVM监控与调优主要的着眼点在于如何配置、如何监控、如何优化3点上。下面就将针对这3点进行学习。(如果您对Java的内存区域划分和内存回收机制尚不明确,那在阅读本文前,请先阅读我的前一篇博客《Java系列笔记(3) – Java 内存区域和GC机制》,在该博客中,详细叙述了Java...转载 2018-06-01 08:56:39 · 676 阅读 · 0 评论 -
JVM实用参数(四)内存调优
理想的情况下,一个Java程序使用JVM的默认设置也可以运行得很好,所以一般来说,没有必要设置任何JVM参数。然而,由于一些性能问题(很不幸的是,这些问题经常出现),一些相关的JVM参数知识会是我们工作中得好伙伴。在这篇文章中,我们将介绍一些关于JVM内存管理的参数。知道并理解这些参数,将对开发者和运维人员很有帮助。所有已制定的HotSpot内存管理和垃圾回收算法都基于一个相同的堆内存划分:新生代...转载 2018-06-01 08:57:16 · 709 阅读 · 0 评论 -
jvm参数详解
内存相关选项参数详解默认值-Xms初始堆大小---Xmx最大堆大小---Xmn年轻代大小(1.4or lator)整个JVM内存大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8---XX:newSize表示新生代初始内存的大小,应该小于 -Xms的值---XX:NewRat...转载 2018-06-01 08:57:51 · 780 阅读 · 0 评论 -
JVM 的 工作原理,层次结构 以及 GC工作原理
from: https://uestc-dpz.github.io JVMJava 虚拟机 Java 虚拟机(Java virtual machine,JVM)是运行 Java 程序必不可少的机制。JVM实现了Java语言最重要的特征:即平台无关性。原理:编译后的 Java 程序指令并不直接在硬件系统的 CPU 上执行,而是由 JVM 执行。JVM屏蔽了与具体平台相关的信息,使Java语...转载 2018-09-11 21:05:08 · 735 阅读 · 0 评论 -
Java虚拟机(二)对象的创建与OOP-Klass模型
相关文章 Java虚拟机系列前言在前一篇文章中我们学习了Java虚拟机的结构原理与运行时数据区域,那么我们大概知道了Java虚拟机的内存的概况,那么内存中的数据是如何创建和访问的呢?这篇文章会给你答案。1.对象的创建对象的创建通常是通过new一个对象而已,当虚拟机接收到一个new指令时,它会做如下的操作。 (1)判断对象对应的类是否加载、链接、初始化 虚拟机接收到一条new指令时...转载 2018-11-10 14:20:58 · 617 阅读 · 0 评论 -
全面理解Java内存模型(JMM)及volatile关键字
关联文章:深入理解Java类型信息(Class对象)与反射机制深入理解Java枚举类型(enum)深入理解Java注解类型(@Annotation)深入理解Java类加载器(ClassLoader)深入理解Java并发之synchronized实现原理Java并发编程-无锁CAS与Unsafe类及其并发包Atomic深入理解Java内存模型(JMM)及volatile关键字剖析基于并发AQS的重入...转载 2018-06-09 13:58:41 · 631 阅读 · 0 评论 -
JVM调优总结(6):新一代的垃圾回收算法
原文出处: pengjiaheng垃圾回收的瓶颈传统分代垃圾回收方式,已经在一定程度上把垃圾回收给应用带来的负担降到了最小,把应用的吞吐量推到了一个极限。但是他无法解决的一个问题,就是Full GC所带来的应用暂停。在一些对实时性要求很高的应用场景下,GC暂停所带来的请求堆积和请求失败是无法接受的。这类应用可能要求请求的返回时间在几百甚至几十毫秒以内,如果分代垃圾回收方式要达到这个转载 2018-03-11 13:11:31 · 852 阅读 · 1 评论 -
JVM调优总结(4):分代垃圾回收
原文出处: pengjiaheng为什么要分代分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的。因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率。在Java程序运行的过程中,会产生大量的对象,其中有些对象是与业务信息相关,比如Http请求中的Session对象、线程、Socket连接,这类对象跟业务直接挂钩,因此生命周期比较长。但是还有转载 2018-03-11 13:10:25 · 805 阅读 · 0 评论 -
Java GC系列(3):垃圾回收器种类
目录垃圾回收介绍垃圾回收是如何工作的?垃圾回收的类别垃圾回收监视和分析在这篇教程中我们将学习几种现有的垃圾回收器。在Java中,垃圾回收是一个自动的进程可以替代程序员进行内存的分配与回收这些复杂的工作。这篇是垃圾回 收教程系列的第三篇,在前面的第2部分我们看到了在Java中垃圾回收是如何工作的,那是篇有意思的文章,我推荐你去看一下。第一部分介绍了Java的垃 圾回收,主要有JVM体转载 2018-02-28 22:59:00 · 689 阅读 · 0 评论 -
JVM字节码
栈和局部变量操作 将常量压入栈的指令 aconst_null 将null对象引用压入栈 iconst_m1 将int类型常量-1压入栈 iconst_0 将int类型常量0压入栈 iconst_1 将int类型常量1压入栈 iconst_2 将int类型常量2压入栈 iconst_3 将int类型常量3压入栈 icon...转载 2018-02-22 16:22:45 · 732 阅读 · 0 评论 -
Java基础:JVM垃圾回收算法
众所周知,Java的垃圾回收是不需要程序员去手动操控的,而是由JVM去完成。本文介绍JVM进行垃圾回收的各种算法。1. 如何确定某个对象是垃圾1.1. 引用计数法1.2. 可达性分析2. 典型的垃圾回收算法2.1. 标记-清除算法(Mark-Sweep)2.2. 复制算法(Copying)2.3. 标记-整理算法(Mark-Compact)2.4.转载 2018-03-11 13:05:39 · 841 阅读 · 0 评论 -
JVM垃圾回收算法 总结及汇总
先看一眼JVM虚拟机运行时的内存模型: 1.方法区 Perm(永久代、非堆)2.虚拟机栈3.本地方法栈 (Native方法)4.堆5.程序计数器 1 首先的问题是:jvm如何知道那些对象需要回收 ?目前两种标识算法、三种回收算法、两种清除算法、三种收集器引用计数法每个对象上都有一个引用计转载 2018-03-11 13:07:50 · 891 阅读 · 0 评论 -
图解JVM垃圾回收算法
1 简单介绍下----->垃圾回收概念GC中的垃圾,指的是存在于内存中的、不会再被使用的对象。而垃圾回收就是把那些不再被使用的对象进行清除,收回占用的内存空间。如果不及时对内存中的垃圾进行清理,那么这些垃圾对象所占的内存空间会一直保留到应用程序结束,被保留的空间无法被其他对象使用。如果大量不会被使用的对象一致占着空间不放,如果应用程序需要内存空间,没有多余的内存空间供其使用的话,就会导致内转载 2018-03-11 13:09:18 · 856 阅读 · 0 评论 -
对象在JVM中的表示: OOP-Klass模型
http://blog.csdn.net/linxdcn/article/details/72850375本人基于上文做了简单的整理,解释及拓展,方便像和我一样不熟悉C++的人能更好的理解原文中的一些概念介绍HotSpot是基于c++实现,而c++是一门面向对象的语言,本身具备面向对象基本特征,所以Java中的对象表示,最简单的做法是为每个Java类生成一个c++类与之对应。但H...转载 2018-11-10 14:23:08 · 1139 阅读 · 0 评论 -
深入理解JVM之前端编译器(一)
前两天在leetcode做了算法题,惊讶的发现用java实现的时间复杂度,竟然跻身于C/C++同列,甚至偶尔会超过后两者,虽然知道JVM功不可没,但还是很好奇在VM编译过程中到底发生了什么,翻出《深入理解java虚拟机》一探究竟,算是有所收获,记录如下。概述java语言的“编译期”其实是一段“不确定”的操作过程,因为可能是下面三种:前端编译器 叫编译器的前端可能更合适,主要是把.ja...转载 2018-11-11 09:10:35 · 868 阅读 · 0 评论 -
深入理解 Java 内存模型 JMM
前提《深入理解 Java 内存模型》程晓明著,该书在以前看过一遍,现在学的东西越多,感觉那块越重要,于是又再细看一遍,于是便有了下面的读书笔记总结。全书页数虽不多,内容讲得挺深的。细看的话,也是挺花时间的,看完收获绝对挺大的。也建议 Java 开发者都去看看。里面主要有 Java 内存模型的基础、重排序、顺序一致性、Volatile 关键字、锁、final。本文参考书中内容。基础并发编...转载 2019-07-22 22:12:55 · 629 阅读 · 0 评论 -
JVM核心知识体系
1.问题 1、如何理解类文件结构布局? 2、如何应用类加载器的工作原理进行将应用辗转腾挪? 3、热部署与热替换有何区别,如何隔离类冲突? 4、JVM如何管理内存,有何内存淘汰机制? 5、JVM执行引擎的工作机制是什么? 6、JVM调优应该遵循什么原则,使用什么工具? 7、JPDA架构是什么,如何应用代码热替换? 8、JVM...转载 2019-07-22 22:15:53 · 712 阅读 · 0 评论 -
《深入理解java虚拟机》笔记1——Java内存区域与Java对象
运行时数据区域JVM载执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束而建立和销毁。具体如下图所示:(其中程序计数器、Java虚拟机栈、本地方法栈为线程私有;Java堆、方法区位线程共享的内存区域。)程序计数器(Program Counter Re...转载 2019-07-22 22:17:14 · 612 阅读 · 0 评论 -
《深入理解java虚拟机》笔记2——GC算法与内存分配策略
说起垃圾收集(Garbage Collection, GC),想必大家都不陌生,它是JVM实现里非常重要的一环,JVM成熟的内存动态分配与回收技术使Java(当然还有其他运行在JVM上的语言,如Scala等)程序员在提升开发效率上获得了惊人的便利。理解GC,对于理解JVM和Java语言有着非常重要的作用。并且当我们需要排查各种内存溢出、内存泄漏问题时,当垃圾收集称为系统达到更高并发量的瓶颈时,只有...转载 2019-07-22 22:18:07 · 592 阅读 · 0 评论 -
《深入理解Java虚拟机》笔记3——7种垃圾收集器
如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。**Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商、版本的虚拟机所提供的垃圾收集器都可能会有很大差别,并且一般都会提供参数供用户根据自己的应用特点和要求组合出各个年代所使用的收集器。接下来讨论的收集器基于JDK1.7 Update 14 之后的HotSpot虚拟机(在此版本中正式提供了商用的G1收集...转载 2019-07-22 22:19:00 · 591 阅读 · 0 评论 -
《深入理解Java虚拟机》笔记4——类文件结构
代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。由于最近十年内虚拟机以及大量建立在虚拟机之上的程序语言如雨后春笋般出现并蓬勃发展,将我们编写的程序编译成二进制本地机器码(Native Code)已不再是唯一的选择,越来越多的程序语言选择了操作系统和机器指令集无关的、平台中立的格式作为程序编译后的存储格式。无关性的基石Java刚诞生的宣传口号:一...转载 2019-07-22 22:21:13 · 592 阅读 · 0 评论 -
《深入理解Java虚拟机》笔记5——类加载机制与字节码执行引擎
第七章 虚拟机类加载机制7.1 概述虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成,这虽然增量一些性能开销,但是会为Java应用程序提供高度的灵活性。7.2 类加载的时机类的整个生命周期:加载、验证、准备...转载 2019-07-22 22:22:29 · 806 阅读 · 0 评论 -
《深入理解Java虚拟机》笔记6——高效并发
第五部分 高效并发第十二章 Java内存模型与线程并发处理的广泛应用是使得Amdahl定律代替摩尔定律成为计算机性能发展源动力的根本原因,也是人类“压榨”计算机运算能力的最有力武器。12.1 概述多任务处理在现代计算机操作系统中几乎已是一项必备的功能了; 除了充分利用计算机处理器的能力外,一个服务端同时对多个客户端提供服务则是另一个更具体的并发应用场景; 服务端是Java语言最...转载 2019-07-22 22:23:37 · 715 阅读 · 0 评论 -
深入理解 Java 虚拟机 学习笔记
第二章 Java 内存区域与内存溢出异常内存区域-- from 姜志明对象创建加载类 若已经在内存中则跳过。 类加载完以后就可以确定对象所需的空间大小// TODO why? 分配内存 根据 GC 回收算法的不同,分配方式略有区别。 标记整理算法,使用空闲列表 带压缩的算法,使用指针碰撞(已分配和未分配内存间由指针分隔) ...转载 2019-07-22 22:26:06 · 747 阅读 · 1 评论 -
java finalize方法总结、GC执行finalize的过程
注:本文的目的并不是鼓励使用finalize方法,而是大致理清其作用、问题以及GC执行finalize的过程。1. finalize的作用finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法。 finalize()与C++中的析构函数不是对应的。C++中的析构函数调用的时机是确定的(对象离开作用域或...转载 2019-07-17 12:52:23 · 742 阅读 · 0 评论 -
Java虚拟机详解03----常用JVM配置参数
【声明】欢迎转载,但请保留文章原始出处→_→生命壹号:http://www.cnblogs.com/smyhvae/文章来源:http://www.cnblogs.com/smyhvae/p/4736162.html本文主要内容:Trace跟踪参数 堆的分配参数 栈的分配参数零、在IDE的后台打印GC日志:既然学习JVM,阅读GC日志是处理Java虚拟...转载 2019-06-12 22:26:05 · 586 阅读 · 0 评论 -
javac 编译与 JIT 编译
javac 编译与 JIT 编译编译过程不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理机的目标代码或虚拟机能执行的指令集之前,都会按照如下图所示的各个步骤进行:其中绿色的模块可以选择性实现。很容易看出,上图中间的那条分支是解释执行的过程(即一条字节码一条字节码地解释执行,如 JavaScript),而下面的那条分支就是传统编译原理中从源代码到目标机器代码的生成过...转载 2018-11-11 09:10:49 · 579 阅读 · 0 评论 -
类加载器的双亲委派及打破双亲委派
一般的场景中使用Java默认的类加载器即可,但有时为了达到某种目的又不得不实现自己的类加载器,例如为了达到类库的互相隔离,例如为了达到热部署重加载功能。这时就需要自己定义类加载器,每个类加载器加载各自的类库资源,以此达到资源隔离效果。在对资源的加载上可以沿用双亲委派机制,也可以打破双亲委派机制。一、沿用双亲委派机制自定义类加载器很简单,只需继承ClassLoader类并重写findClass方...转载 2018-11-11 09:10:59 · 589 阅读 · 0 评论 -
类加载机制-双亲委派,破坏双亲委派--这一篇全了解
概述概念虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接时候用的Java类型。类的生命周期类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用、卸载。其中验证、准备、解析统称为连接上图中,加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,类的加载过程必须严格...转载 2018-11-11 09:11:05 · 772 阅读 · 0 评论 -
破坏双亲委派机制的那些事
前言今天重读《深入理解Java虚拟》这本书,读到破坏双亲委派机制这一小节,其中有一段话,如下双亲委派模型的第二次“被破坏”是由这个模型自身的缺陷所导致的,双亲委派很好地解决了各个类加载器的基础类的统一问题(越基础的类由越上层的加载器进行加载),基础类之所以称为“基础”,是因为它们总是作为被用户代码调用的API,但世事往往没有绝对的完美,如果基础类又要调用回用户的代码,那该怎么办?这并非...转载 2018-11-11 09:11:12 · 1098 阅读 · 0 评论 -
JVM常用启动参数
目录一、堆大小设置(堆 = 年轻代 + 年老代+ 持久代) 二、垃圾回收器设置(串行收集器、并行收集器、并发收集器 ) 三、辅助信息参数设置本文参考jvm参数设置大全:http://www.cnblogs.com/marcotan/p/4256885.html堆内存分配及gc:http://www.cnblogs.com/weiguo21/p/5195460.html ...转载 2019-01-19 18:20:26 · 1413 阅读 · 0 评论 -
通过踩坑带你读透虚拟机的“锁粗化”
之前在学习volatile时,踩过一些坑。通过这些坑,学习了一些jvm的锁优化机制。后来在面试的过程中,被问到的概率还挺高。于是,我整理了这篇踩坑记录。1. java多线程内存模型在聊踩坑记录前,先要了解下java多线程内存模型。大家可通过“并发编程网”的一篇文章去学习这块知识,网址是http://ifeve.com/java-memory-model-1/。下面截取部分段落,先让大家熟悉...转载 2019-01-20 23:10:13 · 646 阅读 · 0 评论 -
1.6的锁优化(适应性自旋/锁粗化/锁削除/轻量级锁/偏向锁)
高效并发是JDK 1.6的一个重要主题,HotSpot虚拟机开发团队在这个版本上花费了大量的精力去实现各种锁优化技术,如适应性自旋(Adaptive Spinning)、锁削除(Lock Elimination)、锁膨胀(Lock Coarsening)、轻量级锁(Lightweight Locking)、偏向锁(Biased Locking)等,这些技术都是为了在线程之间更高效地共享数据,以及解...转载 2019-01-20 23:17:25 · 785 阅读 · 0 评论 -
JVM内存模型、指令重排、内存屏障概念解析
在高并发模型中,无是面对物理机SMP系统模型,还是面对像JVM的虚拟机多线程并发内存模型,指令重排(编译器、运行时)和内存屏障都是非常重要的概念,因此,搞清楚这些概念和原理很重要。否则,你很难搞清楚哪些操作是在并发先绝对安全的?哪些是相对安全的?哪些并发同步手段性能最低?valotile的二层语义分别是什么?等等。 本来打算自己写一篇有关JVM内存模型的博文,后来整理资料的时候偶然发...转载 2019-01-20 23:42:42 · 702 阅读 · 0 评论