12 天前 / 平头哥的技术博文
点击上方“平头哥的技术博文”,选择“关注公众号” 技术文章第一时间送达! 最近在看《 JAVA并发编程实践 》这本书,里面涉及到了 Java 内存模型,通过 Java 内存模型顺理成章的了解到 JVM 内存结构,关于 JVM 内存结构也许大学的课堂上老师给我们讲过,也许没有,反正我对这一块有一点点的了解,但是从来没有系统的学习过,所以这一次我把《 深入理解Java虚拟机JVM高级特性与最佳实践 》、《 Java虚拟机规范 Java SE 8版 》这两本书中关于 JVM 内存结构的部分都看了一遍,算是对 JVM 内存结构有了新的认识。JVM 内存结构是指:Java ......
14 天前 / kafeidou
(给ImportNew加星标,提高Java技能) 作者:Josh Snyder,Joseph Lynch 编译:ImportNew/唐尤华 medium.com/@NetflixTechBlog/introducing-jvmquake-ec944c60ba70 Netflix的云数据工程团队运行着各种JVM应用,包括Cassandra、Elasticsearch等等。尽管大多数情况下集群用分配给它们的内存都能稳定运行,但有时“死亡查询”或者数据存储本身的错误会导致内存使用失控,可能触发垃圾回收(GC)循环甚至JVM内存耗尽。 对这种情况我们用jvmkill进行了补救:jvmkill是一种使用JVMTI API的代理,在JVM进程中运行。当JVM内存不足或无法生成线......
26 天前 / Joinncat
从JDK1.6开始,JVM对锁进行了各种优化,目的就是为了在线程间更高效的共享数据和解决互斥同步的问题。从锁优化的话题开始,可以引申出很多考点面试题,比如锁优化的技术、各优化技术的细节、CAS实现原理、CAS的ABA问题及如何解决等,持续发散还会引发更多问题,例如逃逸分析等,可以看出技术点都是相关联的,需要不断积累和梳理。 面试官:JVM实现了哪些锁优化技术? 小白:自旋锁、自适应自旋锁、锁粗化、锁消除、偏向锁、轻量级锁。 面试官:介绍一下自旋锁?为什么引入自旋锁? 小白:自旋锁就是在请求获取锁,又不能马上获取到时,......
48 天前 / 涤生YQ
点击上方蓝色字体,选择“设为星标” 优质文章,及时送达有没有想过 Shallow 和 Retained heap 之间的区别? Eclipse MAT(内存分析器工具)是分析 JVM 堆 Dump 文件的强大工具。当尝试分析内存相关的问题时,它非常方便。在 Eclipse MAT 内存分析的报告中会显示对象两种类型的 Heap 信息: Shallow Heap Retained Heap 在本文中,我们主要讨论它们之间的区别,并探讨它们的计算方式。通过示例理解知识会更容易,咱们来看看这样一个例子。例如,假设你的应用程序具有这样的对象模型,如图 1 所示: 图1:内存中的对象 对象 A 持有对象 B ......
49 天前 / 涤生YQ
点击上方蓝色字体,选择“设为星标” 优质文章,及时送达了解 Eclipse MAT 中 incoming and outgoing 引用之间的区别。 Eclipse MAT(内存分析器工具)是分析 JVM 堆 Dump 文件的强大工具。它具有几个非常有效分析内存问题的强大功能。“Incoming references”和“Outgoing references”就是其中一种功能。在本文中,我们来探讨 Incoming references 和 Outgoing references 以及它们之间的区别。在 Eclipse MAT 中,当右键单击任何对象时,将看到下拉菜单。如果选择“ListObjects”菜单项,则会注意到两个选项: with outgoing referenceswith ......
68 天前 / DuQi_NKU
本文阅读时间大约4分钟。 JVM加载类的时候,需要记录类的元数据,这些数据会保存在一个单独的内存区域内,在Java 7里,这个空间被称为永久代(Permgen),在Java 8里,使用元空间(Metaspace)代替了永久代。永久代和元空间保存的数据并不完全一样,永久代中还保存另一些与类的元数据无关的杂项。 如我们之前的一篇文章016:字符串对象在JVM中是如何存放的中说的,在Java 7里将字符串常量从永久代移动到了堆区域,但是永久代并没有完全改造完成。直到Java 8,永久代的改造才算完全搞定,在元空间中保存的数据比永久代中纯粹很多,就是类的元......
79 天前 / 猿人谷
前面介绍了垃圾回收算法,接下来我们介绍垃圾收集器和内存分配的策略。有没有一种牛逼的收集器像银弹一样适配所有场景?很明显,不可能有,不然我也没必要单独搞一篇文章来介绍垃圾收集器了。熟悉不同收集器的优缺点,在实际的场景中灵活运用,才是王道。 在开始介绍垃圾收集器前,我们可以剧透几点: 根据不同分代的特点,收集器可能不同。有些收集器可以同时用于新生代和老年代,而有些时候,则需要分别为新生代或老年代选用合适的收集器。一般来说,新生代收集器的收集频率较高,应选用性能高效的收集器;而老年代收集器收集次数相对......
96 天前 / 古时的风筝
我们平时写 Java Agent 的机会确实不多,也可以说几乎用不着。但其实我们一直在用它,而且接触的机会非常多。下面这些技术都使用了 Java Agent 技术,看一下你就知道为什么了。 -各个 Java IDE 的调试功能,例如 eclipse、IntelliJ ; -热部署功能,例如 JRebel、XRebel、 spring-loaded; -各种线上诊断工具,例如 Btrace、Greys,还有阿里的 Arthas; -各种性能分析工具,例如 Visual VM、JConsole 等; Java Agent 直译过来叫做 Java 代理,还有另一种称呼叫做 Java 探针。首先说 Java Agent 是一个 jar 包,只不过这个 jar 包不能独立运......
108 天前 / u128287
作者简介 杨俊明,携程云客服平台研发部软件技术专家。从事IT行业10余年,腾讯云+社区、阿里云栖社区、华为云社区认证专家。近年来主要研究分布式架构、微服务、java技术等方向。 “java的内存布局以及GC原理”是java开发人员绕不开的话题,也是面试中常见的高频问题之一。 java发展历史上出现过很多垃圾回收器,各有各的适应场景,很多网上的旧文章已经跟不上最新的变化。本文详细介绍了java的内存布局以及各种垃圾回收器的原理(包括最新的ZGC),希望阅读完后,大家对这方面的知识不再陌生,有所收获,同时也欢迎大家留言讨论。 ......
108 天前 / spidercoco
本文将要介绍的内容在GraalVM 19.0.0(可以从https://www.graalvm.org/downloads上下载到)上验证通过。这里我用的是MacOS平台的企业版,可以免费使用,里面的命令也可用于Linux平台。下面介绍的大部分功能在社区版上也是支持的。 环境配置先从graalvm.org/downloads下载GraalVM 19.0.0,然后将它添加到$PATH中。默认情况下GraalVM可以支持Java和JavaScript。 $ git clone https://github.com/chrisseaton/graalvm-ten-things.git$ cd foo$ tar -zxf graalvm-ee-darwin-amd64-19.0.0.tar.gz.tar.gz# or graalvm-ee-darwin-linux-19.0.0.tar.gz on ......
130 天前 / spidercoco
JVM之动态方法调用:invokedynamicPublished:19 Jul 2019Category:JVM在本文的前面的姊妹篇中,介绍了Java方法调用的5种操作码中的4种。它们是Java 8和Java 9中方法调用的标准字节码形式。 于是第五个操作码invokedynamic便进入了我们的视线。简单来说,Java 7中在语言层面上对invokedynamic是没有直接支持的。事实上,当Java 7的运行时首次引入invokedynamic指令时,javac编译器是不会生成这个字节码的。 而到了Java 8中,invokedynamic则成为了实现高级平台特性的一个首要机制。使用这个操作码的最明确、简单的例子便是lambda表达式。读这篇文......
132 天前 / JimmySun
类加载的过程加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持Java语言的运行时绑定(也称为动态绑定或晚期绑定)。注意,这里的几个阶段是按顺序开始,而不是按顺序进行或完成的,因为这些阶段通常都是互相交叉地混合进行的,通常在一个阶段执行的过程中调用、激活另外一个阶段。 1. 加载
145 天前 / 陈一乐
随着微服务的普及,许多企业踏上微服务之旅。 微服务化后,应用数量可能高一个数量级。一般企业,以前三五个应用能支撑业务,微服务化之后应用数量可能多达几十个。每个微服务往往独立部署,内存的消耗自然也高居不下,以前两台8核16G机器指不定就能跑起来,现两台16核64G还不一定够用,同时由于多套环境的存在加上容器编排工具(如K8s)所需的资源,硬件资源的投入自然是成倍增加。 在 Web 应用开发中,为了降低内存消耗,你是否尝试过: 去除不必要的组件,减少代码体积 更换 Web 容器,如将 Tomcat 更换为Undertow 优化Docker基础镜像,减少......
148 天前 / 开发者头条
点击链接或图片即可阅读 喜欢请分享到朋友圈哦 项目介绍 线上有个用户请求一直不成功,我想在测试环境 Debug 一下,能帮我复现一下吗? 压测流量不知道怎么构造,数据结构太复杂,压测模型也难以评估,有什么好的办法吗? 不想写接口测试脚本了,我想做一个流量录制系统,把线上用户场景做业务回归,可能会接入很多服务系统,不想让每个系统都进行改造,有好的框架选择吗? 我想做一个业务监控系统,对线上核心接口采样之后做一些业务校验,实时监控业务正确性。 如果你有以上的想法或需求,jvm-sandbox-repeater 都将是你的不二选......