JVM
文章平均质量分 78
syc0616
这个作者很懒,什么都没留下…
展开
-
JVM从入门到精通-JVM工具图形篇
1.JVM性能诊断GUI工具概述2.JConsle连接分三种方式:本地,远程,高级;注意:启动jconsole和运行程序的用户必须是一个,才可以进行监控;3. Visual VM3.1 概述3.2 插件安装选择安装插件IDEA中安装Visual VM插件3.3连接方式3.4 主要功能...原创 2021-03-21 09:37:07 · 98 阅读 · 0 评论 -
JVM从入门到精通-JVM工具命令行篇
第一章JVM概述1.为什么调优JVM2.调优概述3.性能优化步骤1.性能监控2.性能分析3.性能调优减少Full GC的频率,以较小的内存改善应用程序的响应性、吞吐量和延迟性;4.性能指标并发数:三者关系并发数影响吞吐量和响应时间;当适合时,吞吐量最大,响应时间较快;当并发数达到极限时,堵车,响应时间和吞吐量都会减少;第二章:JVM诊断工具-命令行1.JPS查看正在运行的Java进程2.JPS [o.原创 2021-03-17 08:18:40 · 307 阅读 · 1 评论 -
JVM从入门到精通-垃圾回收器
1.垃圾回收器的分类1.按线程数分:串行垃圾回收器和并行垃圾回收器2.按工作模式分,可分为并发式垃圾回收器和独占式垃圾回收器3.按碎片处理方式分,可分压缩式垃圾回收器和非压缩式垃圾回收器4.按工作的内存区间分,分为年轻代垃圾回收器和老年代垃圾回收器评估GC的性能指标评估GC的性能指标:吞吐量(throughput)评估GC的性能指标:暂停时间(pause time)评估GC的性能指标:吞吐量VS暂停时间2.不同的..原创 2021-03-11 06:50:29 · 127 阅读 · 0 评论 -
JVM从入门到精通-垃圾回收相关概念
1.System.gc方法的理解System.gc会显示触发Full GC;同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存;但无法保证对垃圾收集器的调用,也可能不调用;System.runFinalization强制调用失去引用的对象的finalize方法例子:从字节码来看,局部变量表中buffer占用索引1的位置,垃圾回收,只是把指向去掉为清除值;局部变量表的长度还是2;局部变量表的长度还是2,而索引1的位...原创 2021-03-09 07:07:15 · 71 阅读 · 0 评论 -
JVM从入门到精通-垃圾回收-算法
为什么GC1.什么是垃圾面试题垃圾:运行程序中没有任何指针指向的对象;为什么需要GC内存迟早会被消耗完,JVM将整理出的内存分配给新的对象;没有GC就不能保证营养程序的正常运行;内存泄露:没有指针指向该对象;但也无法回收JAVA垃圾回收机制应该关心那些区域主要是:堆和方法区垃圾回收器:对年轻代,老年代回收;甚至对全堆和方法区回收;频繁收集Young区,较少收集Old区,基本不动Perm区(或元空间)...原创 2021-03-07 08:53:00 · 125 阅读 · 0 评论 -
JVM从入门到精通-String Table
String Table字符串常量池1.String的基本特性String实现了序列化(Serializable),排序(Comparable),CharSequenceString是一个对象,是final不能被继承;1.1 String存储改变JDK1.8底层是由char[]数组实现的;JDK1.9底层是由byte[]数组实现的;实现拉丁文的用一个byte保存;增加字符集标识,汉字等用2个byte保存;1.2 String的不可变特性String s1 = "a原创 2021-03-04 06:43:54 · 104 阅读 · 0 评论 -
JVM从入门到精通-执行引擎
1.执行引擎概述执行引擎:虚拟机的执行引擎则是由软件自行实现的,无需物理条件制约的指令集与体系结构;能执行不被硬件支持的指令集格式。JVM的主要任务是负责装载字节码到其内部,但字节码并不能直接运行在OS上,因为字节码指令并非等价本地机器指令,它内部包含的仅仅只是一些能被JVM所识别的字节码指令、符号表,及其他辅助信息。若想JAVA程序运行,执行引擎的任务就是将字节码指令解释/编译为对应平台上的本地机器指令才可以。即执行引擎充当了高级语言翻译为机器语言的翻译者。1....原创 2021-03-02 08:28:31 · 160 阅读 · 0 评论 -
JVM从入门到静态-对象实例化内存
对象的实例化1.创建对象的几种方式创建对象1.new 方式;单例模式:调用XXX的静态方法(构造方法私有化了)XxxBuilder/XxxFactory的静态方法;2.Class的newInstance():反射的方式,只能调用空参的构造器,权限必须是public;JDK9中已经废弃;3.Constructor的newInstance(Xxx):反射的方式,可以调用空参、带参的构造器,权限没有要求;JDK9后替代Class的newInstance()4.使原创 2021-02-12 13:36:43 · 143 阅读 · 2 评论 -
JVM从入门到精通-方法区
方法区1.栈、堆、方法区的交互关系1.1 从线程共享与否角度PC:无异常,无GC虚拟机栈:有异常,无GC栈、堆和方法区的关系2.方法区的理解堆存费的是new出来的对象;方法区中存放class文件;2.1 Hotspot方法区演进JDK8元空间使用本地内存;2.2方法区概述元空间不在虚拟机设置的内存中,而使用本地内存。3.设置方法区大小与OOM3.1处理OOM4.方法区的内部结构..原创 2021-02-11 11:45:04 · 113 阅读 · 0 评论 -
JVM从入门到精通-堆
堆1.堆的核心概述1.1堆存储内容一个进程对应一个JVM进程:只有一个方法区和堆;线程:共享方法区和堆;堆中TLAB每个线程都有一块,这块是私有的在IDEA中设置堆空间大小:运行JDK目录下的jvisualvm.exe查看对空间设置大小对象也可以在栈上分配;栈里存储的是对象的引用地址值;堆里存储的是对象;类的结构存储在方法区中;堆空间是垃圾回收时,才会清除对象;1.2 堆的内存分配JDK7 堆空间内存原创 2021-02-10 17:33:44 · 105 阅读 · 0 评论 -
JVM从入门到精通-本地方法/栈
本地方法接口1.1本地方法一个Native修饰的方法称为本地方法;本地方法标识符native可以与所有其他的JAVA标识符连用;但是abstract除外。1.2 为什么使用native方法本地方法栈(Native Method Stack)有些JVM是没有:方法区和本地方法栈的...原创 2021-02-09 22:24:56 · 72 阅读 · 0 评论 -
JVM从入门到精通-虚拟机栈
虚拟机栈概述1.1虚拟机栈出现背景程序员认为JVM内存区:堆heap和栈stack1.2内存中的栈与堆栈是运行时的单位,而堆是存储的单位。即:栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储问题,即数据怎么放、放在哪儿。1.3虚拟机栈基本内容VMS虚拟机栈:每个线程都会创建一个虚拟机栈;并且每个栈帧Stack Frame对应一个Java方法调用。是线程私有的。例子:每个框表示一个方法;每个栈帧都指向一次方法调用;1.4栈原创 2021-02-09 10:36:17 · 122 阅读 · 0 评论 -
JVM从入门到静态-运行时数据区
运行时数据区1.1 运行时数据区在JVM中位置1.2 JAVA程序运行1.3内存与JVM关系1.4运行时数据区与JVM其他模块交互红色区域:方法区(Method Area)、堆(heap)是属于进程的,所有线程共享;灰色区域:程序计数器(PR)、本地方法栈、虚拟机栈,每个线程独自有一份;1.5运行时方法区细节1.6 线程的运行数据区JAVA虚拟机定义了若干中程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁。另外原创 2021-02-08 17:16:08 · 111 阅读 · 0 评论 -
JVM从入门到精通-类加载子系统
第2章:类加载子系统class文件通过类加载器子系统加载进内存中,执行引擎根据字节码指令依次执行类加载:加载阶段--链接阶段--初始化阶段方法区:存放常量,域信息,方法信息;只有hospot有其他JVM没有;执行引擎:解释器,JIT即时编译器,分析其,垃圾回收器;类加载器和执行引擎类加载器:获取类的信息并装进内存执行引擎:逐条解释指令2.1概述类的加载器及类加载过程类加载器子系统作用类加载器子系统负责从文件系统或者网络中加载Class文件,cl..原创 2021-02-08 16:14:10 · 105 阅读 · 0 评论 -
JVM
java虚拟机(java virtual machine,JVM),一种能够运行java字节码的虚拟机。作为一种编程语言的虚拟机,实际上不只是专用于Java语言,只要生成的编译文件匹配JVM对加载编译文件格式要求,任何语言都可以由JVM编译运行。JVM的基本结构JVM由三个主要的子系统构成1.类加载子系统2.运行时数据区(内存结构)3.执行引擎堆和方法区:是公有的;虚拟机栈、本地方法栈、程序计数器:是私有的;类加载机制1.加载将.class文件从磁盘读到..原创 2021-02-07 21:21:03 · 516 阅读 · 0 评论 -
Java 在 Linux 中性能调优最佳实践
本文能帮助你把Java应用程序性能发挥到极值。在应用程序进行性能调优时,应当在优化代码的同时考虑代码运行的硬件。本文将介绍在Linux上把Java性能推到极致需要注意的方方面面。线程争用 减少关键部分的代码量。 优先考虑使用同步代码块,其次才是同步方法。 优先考虑在同步代码块上加锁。 密切注意锁定资源的顺序,你可能会遇到死锁。 隔离低并发、中等并发和高并发用例,区别对待。 对低并发和中等并发尽可能使用CAS(Compare-And-Swa.原创 2020-08-26 22:56:06 · 245 阅读 · 0 评论 -
JVM 性能调优监控工具
现实企业级Java应用开发、维护中,有时候我们会碰到下面这些问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 ...... 这些问题在日常开发、维护中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源),但能够理解并解决这些问题是Java程序员进阶的必备要求。本文将对一些常用的JVM性能调优监控工具进行介绍,希望能起抛砖原创 2020-08-26 22:52:23 · 120 阅读 · 0 评论 -
JVM简介
Java运行时数据区:Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途、创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束来建立和销毁。Java虚拟机所管理的内存包括以下几个运行时数据区域,如图:1、程序计数器:指向当前线程正在执行的字节码指令。线程私有的。2、虚拟机栈:虚拟机栈是Java执行方法的内存模型。每个方法被执行的时候,都会创建一个栈帧,把栈帧压人栈,当方法正常返回或者抛出未捕原创 2020-08-26 22:30:21 · 157 阅读 · 0 评论