
JVM
文章平均质量分 86
jvm
进朱者赤
阿里非典型程序员一枚:微信公众号同名,记录平平无奇程序员在大厂的打怪升级之路。
Java、大数据、数据结构算法
展开
-
Java性能优化(九)-多线程调优-垃圾回收机制优化
今天的内容比较多,最后再强调几个重点。垃圾收集器的种类很多,我们可以将其分成两种类型,一种是响应速度快,一种是吞吐量高。通常情况下,CMS和G1回收器的响应速度快,Parallel Scavenge回收器的吞吐量高。在JDK1.8环境下,默认使用的是Parallel Scavenge(年轻代)+Serial Old(老年代)垃圾收集器,你可以通过文中介绍的查询JVM的GC默认配置方法进行查看。通常情况,JVM是默认垃圾回收优化的,在没有性能衡量标准的前提下,尽量避免修改GC的一些性能配置参数。原创 2024-05-11 11:26:41 · 845 阅读 · 2 评论 -
Java 内存模型& JVM 内存结构
这两个概念估计有不少人会混淆,它们都可以说是 JVM 规范的一部分,但真不是一回事!它们描述和解决的是不同问题,简单来说,Java 内存模型,描述的是多线程允许的行为 JVM 内存结构,描述的是线程运行所设计的内存空间JVM 是什么呢?它屏蔽了底层架构的差异性,是 Java 跨平台的依据,也是每个 Java 程序员必须了解的一部分。JVM 体系结构Java Virtual Mach...原创 2019-10-22 16:45:36 · 201 阅读 · 1 评论 -
可作为GC root的对象
可以作为GC Root的对象:虚拟机栈中的引用对象 方法区中类静态属性引用的对象 方法区中常量引用对象 本地方法栈中JNI引用对象原创 2019-12-11 17:07:52 · 306 阅读 · 0 评论 -
【JVM系列】6、Jvm垃圾回收器(终结篇)
Jvm垃圾回收目前就准备了这三篇博文进行整理,在写博文的过程中我也是边看边记载的,我觉得这种学习方式更容易让人记住,不会轻易忘记。以前的学习模式都是看PDF文档、看书等,但是有个缺点就是当时记住了过段时间就会忘记,因此想把学习过程中重要的部分做个笔记总结,以便于后期复习回顾(学习技巧仅个人观点)同时也希望lz的博客能帮助到广大园友一丢丢。在此立个Flag!以后我会坚持写博客的。哈哈--好了 接下来...转载 2019-09-03 13:08:06 · 134 阅读 · 0 评论 -
【JVM系列】7、JVM调优
堆大小设置 JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。典型设置: java-Xmx3550m -Xms3550...转载 2019-09-03 14:21:53 · 228 阅读 · 0 评论 -
JVM:可达性分析算法
在堆里存放着几乎多有的java对象实例,垃圾搜集器在对堆进行回收之前,第一件事情就是确定这些对象之中哪些还“存活”着(即通过任何途径都无法使用的对象)。原创 2019-09-04 00:23:24 · 3672 阅读 · 1 评论 -
【JVM系列】5、Jvm垃圾回收器(算法篇)
在《【JVM系列】4、Jvm垃圾回收器(基础篇)》中我们主要学习了判断对象是否存活还是死亡?两种基础的垃圾回收算法:引用计数法、可达性分析算法。以及Java引用的4种分类:强引用、软引用、弱引用、虚引用。和方法区的回收介绍。那么接下来我们重点研究下虚拟机的几种常见的垃圾回收算法:标记-清除算法、复制算法、标记-整理算法、分代收集算法。一:标记-清除算法 最基础的收集算法,总共分为‘ ...转载 2019-09-03 13:04:30 · 173 阅读 · 0 评论 -
【JVM系列】4、Jvm垃圾回收器(基础篇)
一:概述 在这篇文章中《【JVM系列】1、运行时数据区》介绍了Java内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈,3个区域随着线程的生存而生存的。内存分配和回收都是确定的。随着线程的结束内存自然就被回收了,因此不需要考虑垃圾回收的问题。而Java堆和方法区则不一样,各线程共享,内存的分配和回收都是动态的。因此垃圾收集器所关注的都是这部分内存。 接下来我们就讨论Jvm...转载 2019-09-03 12:59:17 · 144 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记
《深入理解Java虚拟机:JVM高级特性与最佳实践》读书笔记第一部分 走进Java一、走进Java1、概述 java广泛应用于嵌入式系统、移动终端、企业服务器、大型机等各种场合,摆脱了硬件平台的束缚,实现了“一次编写,到处运行”的理想2、java技术体系结构 按照功能来划分包括以下几个组成部分:Java程序设计语言,各种硬件平台的java虚拟机,Java API类...转载 2019-08-19 20:35:38 · 201 阅读 · 0 评论 -
JVM内存结构
jvm内存结构:《Java虚拟机原理图解》3、JVM运行时数据区程序计数器:1,是执行的字节码的行号指示器,记录的是正在执行的虚拟机字节码指令的地址。2,每个线程都有独立计数器,互不干扰。3,唯一不会发生内存泄漏的一块区域。Java虚拟机栈:1,这是我们通常所说的“堆和栈”中存放局部变量的栈(和存放对象的堆),但是却不仅仅存放局部变量,存放局部变量的只是里面的变...转载 2019-08-19 20:50:27 · 134 阅读 · 0 评论 -
常见垃圾收集算法(4种)
几种常见的垃圾收集算法的核心思想。 1.Mark-Sweep(标记-清除)算法 这是最基础的垃圾回收算法,之所以说它是最基础的是因为它最容易实现,思想也是最简单的。标记-清除算法分为两个阶段:标记阶段和清除阶段。标记阶段的任务是标记出所有需要被回收的对象,清除阶段就是回收被标记的对象所占用的空间。具体过程如下图所示: 从图中可以很容易看出标记-清除算法实现起来比较容易,但是有...原创 2019-08-20 22:26:59 · 5211 阅读 · 1 评论 -
JVM核心参数用法详解
JVM核心参数对于Java应用程序的性能、内存管理和调优等方面非常重要。通过了解和合理配置这些参数,我们可以优化应用程序的运行性能,并提高系统的稳定性和可靠性。本文介绍了一些常用的JVM核心参数,希望能够帮助开发人员更好地理解和配置JVM。原创 2019-09-02 00:08:47 · 481 阅读 · 1 评论 -
【JVM系列】1、运行时数据区
一:运行时数据区 Java虚拟机在执行Java程序的过程中会把它管理的内存分为若干个不同的数据区域。这些区域有着各自的用途,一级创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范》中规定,jvm所管理的内存大致包括以下几个运行时数据区域,如图所示:图解:其中置灰部分是跟随虚拟机启动而存在的,线程共享白...转载 2019-09-03 11:09:28 · 124 阅读 · 0 评论 -
【JVM系列】2、类的加载机制
1.概述虚拟机加载Class文件(二进制字节流)到内存,并对数据进行校验、转换解析和初始化,最终形成可被虚拟机直接使用的Java类型,这一系列过程就是类的加载机制。2.类的加载时机类从被虚拟机加载到内存开始,直到卸载出内存为止,整个生命周期包括:加载——验证——准备——解析——初始化——使用——卸载 这7个阶段。其中验证、准备、解析3个部分统称为连接。生命周期图如下: 其...转载 2019-09-03 11:31:53 · 123 阅读 · 0 评论 -
【JVM系列】3、Java内存模型(JMM)
1.Java内存模型概述 Java内存模型是一种抽象概念,不是真实存在的。主要定义了程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存取出变量这样的底层细节。注意:这里的变量仅包括实例字段、静态字段、构成数组对象的元素,但不包括局部变量与方法参数。因为后者是线程私有的,不会被共享,自然就不存在竞争问题。2.主内存与工作内存 Java内存模型规定了所有的变量都存储在主存中...转载 2019-09-03 11:37:36 · 157 阅读 · 0 评论 -
Java虚拟机(JVM)大全
1. Java 内存区域与内存溢出异常1.1 运行时数据区域根据《Java 虚拟机规范(Java SE 7 版)》规定,Java 虚拟机所管理的内存如下图所示。1.1.1 程序计数器内存空间小,线程私有。字节码解释器工作是就是通过改变这个计数器的值来选取下一条需要执行指令的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖计数器完成如果线程正在执行一个...转载 2019-08-13 16:08:00 · 710 阅读 · 0 评论