JVM
文章平均质量分 85
阿昌喜欢吃黄桃
这个作者很懒,什么都没留下…
展开
-
Day822.Happens-Before 规则 -Java 并发编程实战
Hi,我是,今天学习记录的是关于的内容。可见性、原子性、有序性这三者在编程领域属于,所有的编程语言都会遇到,Java 在诞生之初就支持多线程,自然也有针对这三者的技术方案,而且在编程语言领域处于领先地位。理解 Java 解决并发问题的解决方案,对于理解其他语言的解决方案有触类旁通的效果。,在职场的很多面试中都会考核到,是一个热门的考点,也是一个人并发水平的具体体现。原因是当并发程序出问题时,需要一行一行地检查代码,这个时候,只有掌握 Java 内存模型,才能慧眼如炬地发现问题。导致可见性的原因是,导致有序性原创 2022-12-06 22:15:54 · 501 阅读 · 0 评论 -
Day802.JVM热点问题 -Java 性能调优实战
JVM部分热点问题的内容。原创 2022-11-16 21:21:17 · 581 阅读 · 0 评论 -
Day801.内存问题排查方案 -Java 性能调优实战
在一些比较简单的业务场景下,排查系统性能问题相对来说简单,且容易找到具体原因。但在一些复杂的业务场景下,或是一些开源框架下的源码问题,相对来说就很难排查了,有时候通过工具只能猜测到可能是某些地方出现了问题,而实际排查则要结合源码做具体分析。可以说没有捷径,排查线上的性能问题本身就不是一件很简单的事情,除了将今天介绍的这些工具融会贯通,还需要不断地去累积经验,真正做到性能调优。是否可以讲下如何避免threadLocal内存泄漏呢。原创 2022-11-15 22:21:30 · 561 阅读 · 0 评论 -
Day800.JVM内存分配优化 -Java 性能调优实战
JVM 内存调优通常和 GC 调优是互补的,基于以上调优,可以继续对年轻代和堆内存的垃圾回收算法进行调优。但还是建议在进行性能压测后如果没有发现突出的性能瓶颈,就继续使用 JVM 默认参数,起码在大部分的场景下,默认配置已经可以满足的需求了。以上都是基于堆内存分配来优化系统性能的,但在 NIO 的 Socket 通信中,其实还使用到了堆外内存来减少内存拷贝,实现 Socket 通信优化。还知道堆外内存是如何创建和回收的吗?JVM–Java堆外内存–使用/作用使用得到一个。原创 2022-11-14 22:24:04 · 871 阅读 · 0 评论 -
Day799.优化垃圾回收机制 -Java 性能调优实战
垃圾收集器的种类很多,我们可以将其分成两种类型一种是响应速度快一种是吞吐量高通常情况下,CMS 和 G1 回收器的响应速度快,Parallel Scavenge 回收器的吞吐量高。在JDK1.8 环境下,默认使用的是Parallel Scavenge(年轻代)+Serial Old(老年代)垃圾收集器,可以通过文中介绍的查询 JVM 的 GC 默认配置方法进行查看。通常情况,JVM 是默认垃圾回收优化的,在没有性能衡量标准的前提下,尽量避免修改 GC 的一些性能配置参数。原创 2022-11-13 13:04:25 · 442 阅读 · 0 评论 -
Day798.Java编译 -Java 性能调优实战
Java 源程序是通过 Javac 编译器编译成 .class 文件,其中文件中包含的代码格式我们称之为Java 字节码(bytecode)。这种代码格式无法直接运行,但可以被不同平台 JVM 中的 Interpreter 解释执行。由于 Interpreter 的效率低下,JVM 中的 JIT 会在运行时有选择性地将运行次数较多的方法编译成二进制代码,直接运行在底层硬件上。在 Java8 之前,HotSpot 集成了两个 JIT,用 C1 和 C2 来完成 JVM 中的即时编译。原创 2022-11-12 12:24:54 · 469 阅读 · 0 评论 -
Day797.JVM内存模型 -Java 性能调优实战
JVM 在很大程度上减轻了 Java 开发人员投入到对象生命周期的管理精力。在使用对象的时候,JVM 会自动分配内存给对象,在不使用的时候,垃圾回收器会自动回收对象,释放占用的内存。但在某些情况下,正常的生命周期不是最优的选择,有些对象按照 JVM 默认的方式,创建成本会很高。比如,我在特定的场景使用 String.intern 可以很大程度地节约内存成本。可以使用不同的引用类型,改变一个对象的正常生命周期,从而提高 JVM 的回收效率,这也是 JVM 性能调优的一种方式。原创 2022-11-11 20:55:49 · 262 阅读 · 0 评论 -
Day796.什么是线程数据的强、弱一致性 -Java 性能调优实战
Hi,我是阿昌,今天学习记录的是关于。,其实在系统的很多地方都存在数据一致性的相关问题。除了在并发编程中保证共享变量数据的一致性之外,还有数据库的ACID中的 C(Consistency 一致性)、分布式系统的CAP理论中的 C(Consistency 一致性)。下面主要讨论的就是“”。在并发编程中,Java 是通过共享内存来实现共享变量操作的,所以在多线程编程中就会涉及到数据一致性的问题。原创 2022-11-10 21:26:41 · 619 阅读 · 0 评论 -
Day777.字符串性能优化 -Java 性能调优实战
做好 String 字符串性能优化,可以提高系统的整体性能。在这个理论基础上,Java 版本在迭代中通过不断地更改成员变量,节约内存空间,对 String 对象进行优化。还特别提到了String 对象的不可变性,正是这个特性实现了字符串常量池,通过减少同一个值的字符串对象的重复创建,进一步节约内存。但也是因为这个特性,在做长字符串拼接时,需要显示使用 StringBuilder,以提高字符串的拼接性能。最后,在优化方面,还可以使用intern 方法。原创 2022-10-22 15:09:30 · 339 阅读 · 0 评论 -
Day776.如何制定性能调优策略 -Java 性能调优实战
通过一张图来回顾下的内容。将性能测试分为微基准性能测试和宏基准性能测试,前者可以精准地调优小单元的业务功能,后者可以结合内外因素,综合模拟线上环境来测试系统性能。两种方法结合,可以更立体地测试系统性能。测试结果可以帮助制定性能调优策略,调优方法很多,这里就不一一赘述了。但有一个共同点就是,调优策略千变万化,但思路和核心都是一样的,都是从业务调优到编程调优,再到系统调优。最后,提个醒,任何调优都需要结合场景明确已知问题和性能目标,不能为了调优而调优,以免引入新的 Bug,带来风险和弊端。原创 2022-10-21 22:36:45 · 252 阅读 · 0 评论 -
Day775.如何制定性能调优标准 -Java 性能调优实战
性能调优可以使系统稳定,用户体验更佳,甚至在比较大的系统中,还能帮公司节约资源。但是在项目的开始阶段,没有必要过早地介入性能优化,只需在编码的时候保证其优秀、高效,以及良好的程序设计。在完成项目后,就可以进行系统测试了,可以将以下性能指标,作为性能调优的标准,响应时间、吞吐量、计算机资源分配使用率、负载承受能力。除了通过观察以上指标来确定系统性能的好坏,还需要在更新迭代中,充分保障系统的稳定性。原创 2022-10-20 22:28:34 · 261 阅读 · 0 评论 -
Day707.Jetty性能调优的思路 -深入拆解 Tomcat & Jetty
学习了 Jetty 调优的基本思路,主要分为·操作系统级别·的调优和 ·Jetty 本身·的调优,其中操作系统级别也适用于 Tomcat。通过一个实例来寻找 Jetty 的最佳线程数,在测试中我们发现,对于 ·CPU 密集型·应用,将·最大线程数设置 CPU 核数的 1.5 倍是最佳的·。因此,在我们的实际工作中,切勿将线程池直接设置得很大,因为程序所需要的线程数可能会比我们想象的要小。上面说到,Jetty 的最大线程数应该在 50 到 500 之间。...原创 2022-08-13 15:53:53 · 1571 阅读 · 0 评论 -
Day706.Tomcat进程占用CPU过高怎么办 -深入拆解 Tomcat & Jetty
当我们遇到 CPU 过高的问题时,首先要定位是哪个进程的导致的,之后可以通过top -H -p pid命令定位到具体的线程。其次还要通 jstack 查看线程的状态,看看线程的个数或者线程的状态,如果线程数过多,可以怀疑是线程上下文切换的开销,我们可以通过 vmstat 和 pidstat 这两个工具进行确认。哪些情况可能导致程序中的线程数失控,产生大量线程呢?1.使用了Java的newCachedThreadPool,因为最大线程数是int最大值2.自定义线程池最大线程数设置不合理。...原创 2022-08-12 22:52:19 · 456 阅读 · 0 评论 -
Day705.Tomcat拒绝连接原因分析及网络优化 -深入拆解 Tomcat & Jetty
在 Socket 网络通信过程中,不可避免地会碰到各种 Java 异常,了解这些异常产生的原因非常关键,通过这些信息我们大概知道问题出在哪里,如果一时找不到问题代码,我们还可以通过网络抓包工具来分析数据包。和。acceptCount 用来控制内核的 TCP 连接队列长度,maxConnections 用于控制 Tomcat 层面的最大连接数。通过调整和相关的内核参数somaxconn,增加了系统的并发度。......原创 2022-08-11 22:22:19 · 3103 阅读 · 0 评论 -
Day704.Tomcat内存溢出的原因分析及调优 -深入拆解 Tomcat & Jetty
Hi,我是阿昌。今天学习记录的是关于。作为 Java 程序员,我们几乎都会碰到 java.lang.OutOfMemoryError 异常,但是你知道有哪些原因可能导致 JVM 抛出异常吗?JVM 在抛出 java.lang.OutOfMemoryError 时,除了会打印出一行描述信息,还会打印堆栈跟踪,因此我们可以通过这些信息来找到导致异常的原因。在寻找原因前,我们先来看看有哪些因素会导致 OutOfMemoryError,其中内存泄漏。...原创 2022-08-10 21:38:33 · 2181 阅读 · 0 评论 -
Day703.Tomcat I/O和线程池的并发调优 -深入拆解 Tomcat & Jetty
理论上可通过利特尔法则或者 CPU 时间与 I/O 时间的比率,计算出一个理想值,这个值只具有指导意义,因为它受到各种资源的限制,实际场景中,我们需要在理想值的基础上进行压测,来获得最佳线程数。其实调优很多时候都是在找系统瓶颈,假如有个状况:系统响应比较慢,但 CPU 的用率不高,内存有所增加,通过分析 Heap Dump 发现大量请求堆积在线程池的队列中,请问这种情况下应该怎么办呢?这种情况应该怀疑大量线程被阻塞了,应该看看web应用是不是在访问外部数据库或者外部服务遇到了延迟。...原创 2022-08-09 21:29:41 · 403 阅读 · 0 评论 -
Day702.监控Tomcat的性能 -深入拆解 Tomcat & Jetty
Tomcat 中的关键的性能指标以及如何监控这些指标:主要有吞吐量、响应时间、错误数、线程池、CPU 以及 JVM 内存。在实际工作中,我们需要通过观察这些指标来诊断系统遇到的性能问题,找到性能瓶颈。如果我们监控到 CPU 上升,这时我们可以看看吞吐量是不是也上升了,如果是那说明正常;如果不是的话,可以看看 GC 的活动,如果 GC 活动频繁,并且内存居高不下,基本可以断定是内存泄漏。请问工作中你如何监控 Web 应用的健康状态?遇到性能问题的时候是如何做问题定位的呢?...原创 2022-08-08 21:28:44 · 843 阅读 · 0 评论 -
Day701.JVM GC原理及调优的基本思路 -深入拆解 Tomcat & Jetty
对于 CMS 来说,我们要合理设置年轻代和年老代的大小。你可能会问该如何确定它们的大小呢?这是一个迭代的过程,可以先采用 JVM 的默认值,然后通过压测分析 GC 日志。如果我们看年轻代的内存使用率处在高位,导致频繁的 Minor GC,而频繁 GC 的效率又不高,说明对象没那么快能被回收,这时年轻代可以适当调大一点。如果我们看年老代的内存使用率处在高位,导致频繁的 Full GC,这样分两种情况:如果每次 Full GC 后年老代的内存占用率没有下来,可以怀疑是内存泄漏;...原创 2022-08-07 15:25:00 · 331 阅读 · 0 评论 -
Day666.Java程序从虚拟机迁移到k8s的问题 -Java业务开发常见错误
Hello,这里是阿昌,今天学习记录的是关于的记录。使用 大规模部署应用程序,可以提升整体资源利用率,提高集群稳定性,还能提供快速的扩容能力,甚至还可以实现集群根据压力自动扩容。因此,现在越来越多的公司开始把程序从虚拟机(VM)迁移到 Kubernetes 了。在大多数的公司中,Kubernetes 集群由运维来搭建,而程序的发布一般也是由 平台完成。从虚拟机到 Kubernetes 的整个迁移过程,基本不需要修改任何代码,可能只是重新发布一次而已。所以,我们 Java 开发人员可能对迁移这个事情本身感原创 2022-07-03 15:09:06 · 1266 阅读 · 0 评论 -
Day662.分析定位Java问题工具② -Java业务开发常见错误
Hi,我是阿昌,今天记录学习的关于使用 和 来定位分析问题。使用 等工具虽然可以观察堆内存使用情况的变化,但是对程序内到底有多少对象、哪些是大对象还一无所知,也就是说只能看到问题但无法定位问题。而堆转储似得到了病人在某个瞬间的全景核磁影像,可以拿着慢慢分析。Java 的 是比较严重的问题,需要分析出根因,所以对生产应用一般都会这样设置 JVM 参数,方便发生 OOM 时进行堆转储:使用 Eclipse 的 Memory Analyzer(也叫做 MAT)做堆转储的分析。你可以点击这个链接,下载 M.原创 2022-06-29 22:47:57 · 456 阅读 · 0 评论 -
Day661.分析定位Java问题工具① -Java业务开发常见错误
Hello,我是阿昌,今天记录学习的是关于分析定位Java问题的一系列工具&指令。JDK 自带了很多命令行甚至是图形界面工具,帮助我们查看 JVM 的一些信息。比如,在我的机器上运行,可以看到 JDK 8常多的工具或程序:了解下各种工具的基本作用:先来写一段代码:启动 10 个死循环的线程,每个线程分配一个 10MB 左右的字符串,然后休眠 10 秒。可以想象到,这个程序会对 GC 造成压力。修改 ,配置 插件打包的 Java 程序的 main 方法类:然后使用 java -jar 启动进程...原创 2022-06-28 22:59:30 · 606 阅读 · 0 评论 -
Day642.反射、注解和泛型问题 -Java业务开发常见错误
Hi,我是,今天记录学习分享的是一些问题如果你从来没用过反射、注解和泛型,可以先通过官网有一个大概了解:的功能包括,。也就是说,针对类动态调用方法,不管类中字段和方法怎么变动,我们都可以用相同的规则来读取信息和执行方法。因此,几乎所有的 ORM(对象关系映射)、对象映射、MVC 框架都使用了反射。反射的起点是 Class 类,Class 类提供了各种方法帮我们查询它的信息。你可以通过这个文档,了解每一个方法的作用。举例:有两个叫 age 的方法,入参分别是基本类型 int 和包装类型 Integer。如果原创 2022-06-09 22:33:50 · 515 阅读 · 1 评论 -
Day641.JavaOOM问题 -Java业务开发常见错误
Hi,来也,今天学习记录的是JavaOOM问题的学习Java 是 ,针对Java,经过这么多年的发展,Java 的垃圾收集器已经非常成熟了。有了自动垃圾收集器,绝大多数情况下我们写程序时可以专注于业务逻辑,无需过多考虑对象的分配和释放,一般也不会出现 OOM。但,内存空间始终是有限的,Java 的几大内存区域始终都有 OOM 的可能。相应地,Java 程序的常见 OOM 类型,可以分为堆内存的 OOM、栈 OOM、元空间 OOM、直接内存 OOM 等。几乎每一种 OOM 都可以使用几行代码模拟,市面上也有很原创 2022-06-08 22:05:51 · 1010 阅读 · 2 评论 -
Day361.分析GC日志 -JVM
分析GC日志一、GC日志参数二、GC日志格式1、复习:GC分类1、新生代收集:当Eden区满的时候就会进行新生代收集,所以新生代收集和S0区域和S1区域无关2、老年代收集和新生代收集的关系:进行老年代收集之前会先进行一次年轻代的垃圾收集,原因如下:一个比较大的对象无法放入新生代,那它自然会往老年代去放,如果老年代也放不下,那会先进行一次新生代的垃圾收集,之后尝试往新生代放,如果还是放不下,才会进行老年代的垃圾收集,之后在往老年代去放,这是一个过程,我来说明一下为什么需要往老年代放,但是放不下原创 2021-08-16 22:15:33 · 395 阅读 · 0 评论 -
Day360.JVM运行时参数项 -JVM
JVM运行时参数项一、JVM参数选项参数来源:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html1、类型一:标准参数选项特点各种选项直接在DOS窗口中运行java或者java -help可以看到所有的标准选项-d32 使用 32 位数据模型 (如果可用)-d64 使用 64 位数据模型 (如果可用)-server 选择 "server" VM原创 2021-08-15 22:16:19 · 449 阅读 · 0 评论 -
Day357&358&359&360.JVM监控及诊断工具-GUI -JVM
JVM监控及诊断工具-GUI实际中,你下面有1-2款会用即可一、工具概述二、JConsole了解1、基本概述2、启动在jdk安装目录中找到jconsole.exe,双击该可执行文件就可以打开DOS窗口,直接输入jconsole就可以了3、三种连接方式①Local使用JConsole连接一个正在本地系统运行的JVM,并且执行程序的和运行JConsole的需要是同一个用户。JConsole使用文件系统的授权通过RMI连接起链接到平台的MBean的服务器上。这种从本地原创 2021-08-12 23:10:53 · 1602 阅读 · 0 评论 -
Day356.JVM监控及诊断工具-命令行 -JVM
JVM监控及诊断工具-命令行篇一、概述简单命令行工具:以上.jar的程序源码在tools.jar中二、jps:查看正在运行的Java进程ps -ef|grep java1、基本情况2、测试根据基本语法进行测试即可3、基本语法可以通过jps -help来查看对应的参数信息①options参数综合使用:jps -l -m等价于jps -lm如何将信息输出到同级文件中:语法:命令 > 文件名称例如:jps -l > a.txt②host原创 2021-08-11 22:42:09 · 303 阅读 · 0 评论 -
Day355.性能监控与调优概述 -JVM
概述篇一、大厂面试题二、背景说明1、生产环境中的问题生产环境发生了内存溢出该如何处理生产环境应该给服务器分配多少内存合适?如何对垃圾回收器的性能进行调优?生产环境CPU负载飙高该如何处理?生产环境应该给应用分配多少线程合适?不加log,如何确定请求是否执行了某一行代码?不加log,如何实时查看某个方法的入参与返回值?2、为什么要调优防止出现OOM解决OOM减少Full GC出现的频率3、不同阶段的考虑上线前项目运行阶段线上出原创 2021-08-10 21:18:21 · 268 阅读 · 0 评论 -
Day354.再谈类的加载器 -JVM
再谈类的加载器一、概述1、大厂面试题2、类加载器的分类3、类加载器的必要性4、命名空间代码解释:结果:解释:rootDir后面的地址是我们使用javac User.class指令生成的class文件地址,然后loader1和loader2是两个用户自定义类加载器(如果自定义的不必理解),之后使用这两个用户自定义类加载器加载同一类型的User类,获得的Class对象不是同一个,可以通过Class对象调用getClassLoader()方法获取对应的类加载器了,最原创 2021-08-09 23:40:08 · 311 阅读 · 1 评论 -
Day353.类的加载过程(类的生命周期) -JVM
类的加载过程(类的生命周期)一、概述注意:我们所说的加载完毕包括:加载、链接、初始化三个阶段都完成之后类进入方法区中大厂面试题二、过程一:Loading(加载)阶段1、加载完成的操作2、二进制流的获取方式3、类模型与Class实例的位置堆空间中的大的Class对象,对应他的方法区内容;4、数组类的加载基本类型JVM虚拟机会已经加载;对应引用类型就会去加载引用数据类型元素的类,String[],就是加载String类型三、过程二:Linking(原创 2021-08-08 17:35:20 · 339 阅读 · 0 评论 -
Day350&351&352.字节码指令集与解析举例 -JVM
字节码指令集与解析举例一、概述1、执行模型jvm虚拟机的执行模型流程,根据pc寄存器在记录接下来要执行的位置,来自旋的执行判断操作码与操作数2、字节码与数据类型操作码指令会携带操作的数据类型3、指令分析二、加载与存储指令使用频率最高,加载:往操作数栈中操作,存储:存储在局部变量表中1、复习:再谈操作数栈与局部变量表i/s是槽位共用,因为int i = 0出了代码块,就失效了,所以下面的String s变量就不开辟新的槽位,直接复用上面的i2、局部变量压栈指原创 2021-08-05 23:11:47 · 324 阅读 · 0 评论 -
Day346&347&348&349.class文件结构 -JVM
class文件结构一、概述1、字节码文件的跨平台性2、Java的前端编译器前端编译器 VS 后端编译器:↓3、透过字节码指令看代码细节二、Class文件1、字节码文件里是什么?2、什么是字节码指令如何查看字节码文件:↓NotePad++中的HEX-Editor插件jdk自带的javap指令javap -v xxxx.classIdea中,jclasslib三、Class文件结构0、概述1、魔数:Class文件标志0xC原创 2021-08-01 20:33:08 · 302 阅读 · 0 评论 -
Day341&342&343&344&345.垃圾回收器 -JVM
垃圾回收器一、GC分类&性能指标1、垃圾回收器概述2、垃圾回收器分类3、评论GC的性能指标①吞吐量吞吐量越大,则暂停时间就越长注重较高的吞吐量但不注重STW,那么可以减少GC的次数②暂停时间STW时间暂停时间越小,就回收的频率就高了4、吞吐量VS暂停时间矛盾体先要满足暂停时间,在这个基础上最大化吞吐量二、不同的垃圾回收器概述1、发展史2、7种经典垃圾回收器3、收集器与垃圾分代关系新生代使用复制算法,老年代使用标记清除,压缩算法4、垃圾收集器组原创 2021-07-27 22:40:07 · 363 阅读 · 0 评论 -
Day340.垃圾回收相关概念 -JVM
垃圾回收相关概念一、System.gc()的理解System.gc()提醒Java虚拟机,希望进行一次GC垃圾回收,但不能马上保证能够执行垃圾回收案例:↓二、内存溢出&内存泄露1、内存溢出(OOM)内存溢出好比用水杯装满水后装不下了先是内存空间不足了,进行gc后内存还不足,就发生内存溢出*原因:↓在报OOM之前,一定会触发一次GC2、内存泄露(Memory Leak)对象我不用了,但内存回收不了对象活的太久也叫内存泄漏内存泄露可能会导致内存溢出原创 2021-07-26 22:55:23 · 248 阅读 · 0 评论 -
Day339.垃圾回收相关算法 -JVM
垃圾回收相关算法GC主要针对的是:堆空间频繁收集新生代,较少收集养老带,几乎不动元空间(JDK8为例)在堆空间中主要存放的是对象,那接下来,如何判断这个对象是否存活??????一、对象存活判断阶段二、引用计数算法1、概述什么是引用计数算法,简单来说:就一引用计数器,有引用指向他,他就加1,没有就减1,为0就被回收2、循环引用也就是互相引用,导致计数器永远无法变为0图示代码总结三、可达性分析算法(根搜索算法、追执性垃圾收集)1、概述2、图示3、原创 2021-07-25 17:14:43 · 258 阅读 · 0 评论 -
Day338.垃圾回收概述 -JVM
垃圾回收概述JAVA = (C++)–一、什么是垃圾基本类型不考虑回收,只有引用类型考虑垃圾回收大厂的面试题磁盘碎片整理二、为什么需要GC为什么需要空气???为什么要攒钱???三、早期垃圾回收[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1AlqRvdE-1627128349819)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-2021072419原创 2021-07-24 20:10:44 · 283 阅读 · 0 评论 -
Day337&338.StringTable -JVM
StringTable一、String基本特性字符串常量池不放重复字符串1、基本特性2、String在jdk9中存储结构变更为什么在jdk9中将String的底层value存放的形式变为byte[]字节数组3、String存储结构变更二、String内存分配存放流程:↓图示:↓三、String基本操作常量池不放重复字符串下面代码执行流程左侧栈帧,右侧堆空间四、字符串拼接操作明天继续!!!...原创 2021-07-23 22:11:29 · 210 阅读 · 0 评论 -
Day336.执行引擎 -JVM
执行引擎一、执行引擎概述1、概述2、类比图示3、工作过程二、Java代码编译和执行过程绿色对应解释的过程蓝色对应编译的过程javac前端编译器执行过程后端编译,通过JVM执行引擎解释器,解释过程【解释器】,翻译执行编译器,编译过程【JIT编译器】,编译但未执行在编译器编译后,会做JIT编译缓存在方法区中;如果下次有再调用就可以直接使用缓存三、机器码、指令、汇编语言1、机器码2、指令3、指令集4、汇编语言5、高级原创 2021-07-22 22:57:18 · 244 阅读 · 1 评论 -
Day335.对象的实例化、内存布局与访问定位、直接内存 -JVM
对象的实例化、内存布局与访问定位一、对象的实例化1、创建对象的方式2、创建对象的步骤字节码角度public class test(){ pulbic static void main(String[] agrs){ Object obj = new Object(); }}1、根据类元信息,加载对应的类信息2、为对象分配堆中空间3、处理并发问题,Cas原子操作,每个线程独立对应堆的TLAB空间4、为对象属性进行零值初始化赋值,布尔型为false,int为原创 2021-07-21 21:54:36 · 250 阅读 · 0 评论 -
Day332&333&334.方法区 -JVM
方法区一、堆&栈&方法区的交互关系交互关系二、方法区的理解1、官方文档2、方法区在哪里?3、方法区基本理解方法区主要存储的是系统中类的信息4、Hotspot方法区演进Java7之前方法区叫:永久代Java8开始方法区叫:元空间三、设置方法区大小与OOM1、设置方法区内存大小方法区的大小不必是固定的,JVM可以根据应用需要动态调整JDK7及以前:↓-XX:PermSize #设置永久代初始分配空间,默认20.75M-原创 2021-07-18 17:58:56 · 314 阅读 · 1 评论