JVM
文章平均质量分 92
吒哇
这个作者很懒,什么都没留下…
展开
-
Java内存模型(Java Memory Model,JMM)
一、导言多线程、高并发问题相信是每一位从事Java研发工作的程序员都不可回避的一个重要话题。从启动一个线程,到使用volatile,synchronized,final关键字,到使用wait(),notify(),notifyAll(),join()方法,再到编写复杂的多线程程序,不知道大家有没有思考过这样一个问题,为什么要使用这些API,或者说这些API到底给编程人员提供了什么样的保证,才使得在多线程环境下程序的运行结果能够符合预期。它就是Java Memory Model(后续简称JMM)。本文原创 2021-12-02 13:44:44 · 233 阅读 · 0 评论 -
垃圾回收器-ZGC的设计思路
1 ZGC介绍ZGC收集器(Z Garbage Collector)是由Oracle公司研发的。2018年创建了JEP 333将ZGC提交给OpenJDK,推动其进入OpenJDK11的发布清单中,zgc是一款可拓展的低时延,为实现以下几个目标而诞生的垃回收器:- 停顿时间不超过10ms- 停顿时间不会导致堆大小增长- 堆大小范围可支持几G到几Tzgc的标签:- 与Shenandoah和G1一样,ZGC也采用基于Region的堆内存布局。- ZGC的Region具有动态性...原创 2021-09-15 14:31:30 · 317 阅读 · 0 评论 -
jvm-性能调优(如何计算对象大小)
java对象在jvm中分配是按:a:对象头 Mark Word 32位 4个字节 64位 8个字节 类型指针:这个对象是基于那个kclass生成的 数组长度:如果对象是数组则在这里存储,占4个字节,如果不是数组则不再这里存储,就不占字节数b:实例数据:指定是对象的成员属性所占的大小c:数据填充:是不满8位就填充0,按8位计算:比如4位那就补0,按8位,如果是12位,则补0,16位,至于为啥这样是因为jvm 底层用...原创 2020-09-15 22:23:31 · 336 阅读 · 0 评论 -
是不是所有的对象和数组都会在堆内存分配空间
熟看了java编译原理等多本大神级别书籍后,小明信心满满的去面试字节跳动了,跳动的面试官说:小伙,来给我讲一下是不是所有的对象和数组都会在堆内存分配空间?小明不由一喜,昨天正好我看了相关jvm的书籍,堆中主要存放对象,即通过new关键字创建的对象。当场哈哈大笑:没错,面试官你太威武了,所有的对象和数组都存在堆中。当场从jvm原理:方法区、虚拟机栈、本地方法栈、堆、程序计数器讲起,说到堆内主要存放对象,栈中存放一些基本类型的变量数据(int/short/long/byte/float/double/.原创 2020-07-17 14:35:06 · 1311 阅读 · 3 评论 -
JAVA类加载器
参考链接:https://blog.csdn.net/weixin_37195606/article/details/82805300重点:准备为类变量(即static修饰的字段变量)分配内存并且设置该类变量的初始值即0(如static int i=5;这里只将i初始化为0,至于5的值将在初始化时赋值),这里不包含用final修饰的static,因为final在编译的时候就会分配了,注意这里不会为实例变量分配初始化,类变量会分配在方法区中,而实例变量是会随着对象一起分配到Java堆中。分原创 2020-07-17 10:18:23 · 111 阅读 · 0 评论 -
JVM运行流程
原创 2020-06-30 11:18:49 · 177 阅读 · 0 评论 -
java对象在内存中的结构(HotSpot虚拟机)
参考链接:https://www.cnblogs.com/duanxz/p/4967042.html原创 2020-06-25 10:46:51 · 169 阅读 · 0 评论 -
Java探针-Java Agent技术-阿里面试题
原链接:https://www.cnblogs.com/aspirant/p/8796974.html最近面试阿里,面试官先是问我类加载的流程,然后问了个问题,能否在加载类的时候,对字节码进行修改我懵逼了,答曰不知道,面试官说可以的,使用Java探针技术,能够实现我查了一下关于探针技术的知识:2. 基于javaAgent和Java字节码注入技术的java探针工具技术原理图0-0:动态代理功能实现说明我们利用javaAgent和ASM字节码技术开发java探针工具,实现原理如下:原创 2020-06-04 14:00:39 · 486 阅读 · 0 评论 -
【深入理解JVM】方法区 永久代 元空间
一、JVM 内存模型 根据 JVM 规范,JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。 1、虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建。栈里面存着的是一种叫“栈帧”的东西,每个方法会创建一个栈帧,栈帧中存放了局部变量表(基本数据类型和对象引用)、操作数栈、方法出口等信息。栈的大小可以固定也可以动态扩展。当栈调用深度大于JVM所允许的范围,会抛...原创 2020-03-16 17:56:57 · 360 阅读 · 0 评论 -
线上服务器oom排查总结
1.oom情况出现java.lang.OutOfMemoryError: GC overhead limit exceeded 一般是(某个循环里可能性最大)在不停的分配对象,但是分配的太多,把堆撑爆了。出现java.lang.OutOfMemoryError: Java heap space一般是分配了巨型对象下面就是出现GC overhead limit exceeded 的实际情...原创 2019-12-20 14:48:25 · 1868 阅读 · 0 评论 -
后端服务故障排查 -- dubbo服务超时、线程池耗尽 CPU高负载
文章目录问题现象 dubbo线程池耗尽的异常日志 cpu占用情况 问题排查 dubbo线程池耗尽排查 cpu 高负载排查 排查相关命令 排查 初步定位问题场景 验证,确认问题点 原因分析 调整后验证 其他执行的一些优化点 参考资料 问题现象5-6 到 5-7,某测试环境我们的服务时常收到调用方反馈,d...原创 2019-12-20 14:23:08 · 2702 阅读 · 0 评论 -
从头到尾说一次 Java 垃圾回收
行为例来解读下日志信息:[GC (Allocation Failure) [ParNew: 367523K->1293K(410432K), 0.0023988 secs] 522739K->156516K(1322496K), 0.0025301 secs] [Times: user=0.04 sys=0.00, real=0.01 secs]GC:表明进行了一次垃圾回收...原创 2019-09-03 10:19:40 · 1580 阅读 · 0 评论 -
jdk1.8 metaspace介绍
你注意到了吗?JDK 8早期可访问版本已经提供下载了,java 开发人员可以使用java 8 提供的新的语言和运行特性来做一些实验。其中一个特性就是完全的移除永久代(Permanent Generation (PermGen)),这从JDK 7开始Oracle就开始行动了,比如:本地化的String从JDK 7开始就被移除了永久代(Permanent Generation )。JDK 8让它最终退...原创 2019-08-22 18:14:25 · 1185 阅读 · 0 评论 -
JVM性能优化
jvm性能优化只要是优化堆区(heap),堆区主要分为: 新生区:伊甸园区(Eden space),幸存0区(Survivor 0),幸存1区(Survivor 1) 养老区: 永久区(元空间,1.8以后)JVM在垃圾回收时先进行伊甸园区(Minor GC),然后幸存这会转移到 幸存0区,1区,如果1区满了会转移到养老取,这个时候会进行养老取(Major GC- ...原创 2019-03-14 16:57:06 · 440 阅读 · 0 评论 -
JVM调优的常见命令行
1)jps命令用于查询正在运行的JVM进程2)jstat可以实时显示本地或远程JVM进程中类装载、内存、垃圾收集、JIT编译等数据/home/tools/jdk1.8.0_181/bin/jstat -gcutil 30386(java进程号) 20003)jinfo用于查询当前运行这的JVM属性和参数的值[java@xftest0 ~]$ jinfo 43934At...原创 2019-03-18 11:01:01 · 18753 阅读 · 0 评论 -
JVM实操经验总结
背景记得前段时间,同事说他们测试环境的服务器cpu使用率一直处于100%,本地又没有什么接口调用,为什么会这样?cpu使用率居高不下,自然是有某些线程一直占用着cpu资源,那又如何查看占用cpu较高的线程?当然一个正常的程序员不会写出上述代码,这里只是为了让一个线程占用较高的cpu资源。top命令在linux环境下,可以通过top命令查看各个进程的cpu使用情况,默认按c...原创 2019-03-18 11:01:07 · 3633 阅读 · 0 评论 -
从几个sample来学习Java堆,方法区,Java栈和本地方法栈
最近在看《深入理解Java虚拟机》,书中给了几个例子,比较好的说明了几种OOM(OutOfMemory)产生的过程,大部分的程序员在写程序时不会太关注Java运行时数据区域的结构:感觉有必要通过几个实在的例子来加深对这几个区域的了解1)Java堆所有对象的实例分配都在Java堆上分配内存,堆大小由-Xmx和-Xms来调节,sample如下所示:public class Heap...原创 2019-07-04 17:59:50 · 3039 阅读 · 0 评论 -
JDK为我们提供查看jvm的工具
内存溢出:实实在在的内存空间不足导致;内存泄漏:该释放的对象没有释放,多见于自己使用容器保存元素的情况下JDK为我们提供的工具:名称 作用 jps 虚拟机进程状况工具 jstat 虚拟机统计信息监视工具 jinfo Java配置信息工具 jmap Java内存映像工具 jhat 虚拟机堆转储快照分析工具 jstack ...原创 2019-07-15 13:34:51 · 4618 阅读 · 0 评论 -
JVM内存区域和常用参数简介
一:直接上干货,一下参数可以直接用:jmap -heap 进程号来查看 -Xss:栈大小 -Xms:堆的最小值; -Xmx:堆的最大值; -Xmn:新生代的大小; -XX:NewRatio老年代(不包括永久区)与新生代(Eden + from+to)的比值; 要求比较的搞得吞吐量...原创 2019-07-11 10:32:00 · 5766 阅读 · 0 评论 -
垃圾收集器与内存分配策略
jvm垃圾收集器种类很多,1.8默认的收集器是Parallel GC,一般选择垃圾收集器时主要参看是吞吐量还是最短相应时间,比如ParallelGC就是高吞吐量收集器,但是Concurrent Mark Sweep (CMS)收集器是一种以获取最短回收停顿时间为目标的收集器一般互联网站或者B/S系统的服务端上,这类应用尤其重视服务的响应速度,希望系统停顿时间最短,以给用户带来较好的体验。C...原创 2019-07-12 11:15:56 · 6483 阅读 · 0 评论 -
JMM和底层实现原理
...原创 2019-07-31 16:34:18 · 898 阅读 · 0 评论 -
7JVM种垃圾收集器
申明:转载地址:https://crowhawk.github.io/2017/08/15/jvm_3/?nsukey=QTV3vXqJkIwApXNqKDEXf5ivDLNMpzO6A7q2PUI%2BXqgpbMxXcZJdluUQO%2B4ugowJbwUbDvaNJIbvxSAubRpKyrYlMnqs45Lsct%2FHTK78jJ5EHdDpRkmyY05LvbDbCQJJGH0VED...原创 2019-08-14 11:12:37 · 597 阅读 · 0 评论 -
JVM浅谈
先来看看JVM运行时候的内存区域,参考链接:https://www.cnblogs.com/wangjzh/p/5258254.html jvm运行原理、大多数 JVM 将内存区域划分为Method Area(Non-Heap)(方法区),Heap(堆),Program Counter Register(程序计数器),VM Stack(虚拟机栈,也有翻译成JAVA 方法栈的),Na...原创 2019-03-14 16:25:12 · 293 阅读 · 0 评论