![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 67
困知勉行1985
学而时习之,不亦说乎
展开
-
JVM调优总结--压力测试
1.查看JVM进程:C:\Users\ThinkPad>jps33360 Launcher453218696 MainClientBootStrap21864 Launcher18380 MainServerBootStrap19212 Jps2.Linux查看进程的线程信息参考文章:Linux查看进程的线程信息_慕城南风的博客-CSDN博客_linux查看线程(1)ps指令:在ps命令中,“-T”选项可以查看线程信息。下面的命令列出了由进程号为<pid>.原创 2022-05-05 15:26:36 · 1645 阅读 · 0 评论 -
Java 8: 元空间(Metaspace)
前言很多开发者都在其系统中见过“java.lang.OutOfMemoryError: PermGen space”这一问题。这往往是由类加载器相关的内存泄漏以及新类加载器的创建导致的,通常出现于代码热部署时。相对于正式产品,该问题在开发机上出现的 频率更高,在产品中最常见的“问题”是默认值太低了。常用的解决方法是将其设置为256MB或更高。JDK8 HotSpot JVM 将移除永久区,使用本地内存来存储类元数据信息并称之为:元空间(Metaspace)。这意味着不会再有java.lang.Out转载 2021-11-09 20:54:33 · 14643 阅读 · 1 评论 -
JAVA直接内存
上述对直接内存的描述来自《深入理解Java虚拟机》,写明了直接内存不在java堆内,并且java堆内存往外写需要拷贝到native堆。然后咱们先写个代码看看直接内存分配在哪个区域import java.nio.ByteBuffer;import java.util.ArrayList;import java.util.List;/** * @author congzhou * @description: * @date: Created in 2019/2/19 21:57 *..转载 2021-08-03 16:30:53 · 693 阅读 · 0 评论 -
Java 内存模型JMM 多线程问题总结
JMM(Java内存模型)中, 多线程下访问共享资源(例如共享变量)时,会遇到的三个问题的解决:1.原子性(线程安全):(1).对于基本数据类型的读写操作,本身就是原子性的,不存在线程安全的问题(2).除了JVM自身提供的对基本数据类型读写操作的原子性外,对于方法级别或者代码块级别的原子性操作,可以使用synchronized关键字或者重入锁(ReentrantLock),以及其它各种锁,保证程序执行的原子性2.可见性:JMM把内存工作内存与主内存同步延迟现象导致的可见性问题,可以使用synch原创 2021-04-01 17:09:51 · 871 阅读 · 1 评论 -
JVM 面试点: 新生代的内存大小参数设置
我们设置堆大小为600M, -Xms600m -Xmx600m, 默认的-XX:NewRation=2, 即新生代占200M, 老年代占400M我们设置新生代中Eden区与Survivor区的默认大小为8:1:1,当然也可以通过参数 -XX:SurvivorRation=8 去设置,我们这里使用默认设置。这样的话Eden区的大小应该为160M, 两个Survivor的大小应该都是20M。启动JVM,然后用JvisualVM进行监控,我们看到实际的比例是6:1:1, 而不是8:1:1,这是为什么呢?.原创 2021-03-26 22:40:47 · 7414 阅读 · 0 评论 -
JVM性能监控与调优 - 怎样添加JVM参数,GC垃圾收集器参数介绍
在各种各样的执行环境下,应该怎样添加JVM参数呢?参考尚硅谷 宋红康老师教程原创 2021-03-26 07:11:56 · 1534 阅读 · 2 评论 -
JVM性能监控 - 获取堆dump文件的四种方式
当系统出现OOM的时候,我们需要知道是由于内存设置太小,还是内存泄露等等原因造成的,这时候需要通过分析内存堆dump文件来找到原因。获取JVM堆的dump文件,有以下四种方式:原创 2021-03-22 15:18:35 · 1221 阅读 · 0 评论 -
JVM性能监控 - 可视化工具jvisualVM
JVM性能监控工具包括命令行工具和可视化工具,命令行工具当然要掌握,但是可视化工具更加强大,比如jconsole,jvisualVM(功能更加强大,可以替代jconsole)。jvisualVM可是视作命令行工具的一个集成,包含了几乎所有命令行工具的功能。现在来简单介绍一下jvisualVM, 它可以监控线程信息,堆内存使用(使用率,所有对象信息),方法区使用(metaspace, 代码缓存,压缩类数据),GC,类加载信息等等写一个简单的死锁程序:package com.jvm.perform原创 2021-03-21 21:00:29 · 1999 阅读 · 0 评论 -
JVM性能监控 - jinfo查看和设置JVM配置参数
可以使用jinfo查看和设置JVM配置参数:1.查看JVM参数配置2.修改JVM配置参数只能修改被标记为manageable的参数原创 2021-03-20 16:25:59 · 1276 阅读 · 0 评论 -
JVM性能监控 - Eclipse中解决jinfo JDK与JRE版本不一致
最近学习JVM性能监控与调优,比如使用jinfo(Configuration Info for Java)查看或者设置(修改)JVM配置参数结果报了以下错误这是为什么呢? 因为单独升级了JRE。java的命令行工具,比如基本的编译工具javac,反编译工具javap(字节码内容查看),以及jps,jinfo等性能监控工具都是在JDK里面的。而JVM是在JRE里面的。怎么解决这个 问题?直接在Eclipse里面将JRE改为JDK自带的JRE,不去使用那个版本不同的JRE,问题解决。原创 2021-03-20 15:57:26 · 902 阅读 · 0 评论 -
JVM 类加载器 基础知识
1.引导类加载器:原创 2021-03-14 17:58:47 · 1012 阅读 · 4 评论 -
JVM-- 自定义类加载器,及执行结果分析
写一个简单的类加载器练练手。User, 做为一个例子,被自定义类加载器加载的类package com.classloader.userClassLoader;public class User { public static int num = 1; public static final int NUM1 = 2; public static final String STR = new String("hello, world!"); public void printStr(原创 2021-03-14 11:45:30 · 1288 阅读 · 0 评论 -
JVM中类与类加载器,Class对象,对象之间的关系 - Full GC 类的卸载
类与其加载器对象,Class对象,对象之间的关系是什么样的呢?原创 2021-03-13 09:02:32 · 1225 阅读 · 2 评论 -
JVM字节码 -- 区别先加 i++ 与 后加 ++i 的区别
1. 不进行赋值的情况,单纯只是自增首先看一段代码public void method1(){ int i = 10; i++; // ++i; // i += 1; // for(int i=1; i<10; i++)}i++,++i,i += 1,这三者的字节码指令是一样的,所以三者没有任何区别。Note: 上面这三种自增操作,用到的字节码指令是一样的,都是在局部变量表中直接自增,而不是先入操作数栈,+1之后,再出栈,赋值给局部变量表中的变量。2.自原创 2021-03-11 22:57:00 · 972 阅读 · 2 评论 -
JVM类加载--初始化阶段赋值与准备阶段赋值对比
JVM类加载过程:加载阶段:将字节码以流的形式加载进内存,在元空间(方法区)生成类模板,并且在堆中生成其Class对象,做为访问元空间中类模板信息的接口。 链接阶段:1->验证,验证字节码格式是否正确,语法分析等,2->准备,静态变量默认初始化,静态常量显式初始化(仅仅针对使用字面量的初始化),3->解析,符号引用转为直接引用,因为此时所有需要的类已经被加载到内存,有了具体的地址,这时就可以把符号引用变成直接引用。 初始化阶段,静态变量初始化(类中的字段),编译器生成clinit(原创 2021-03-11 22:08:44 · 1730 阅读 · 0 评论 -
JVM 字节码指令之 -- 加载与存储指令
加载与存储指令是JVM字节码中最重要的,所以一定要有所了解。JVM字节码指令用一个字节来表示,也就是说目前的字节码指令集中不超过256个指令。原创 2021-03-09 10:15:25 · 942 阅读 · 0 评论 -
JVM七种垃圾回收器的总结
这是对HotSpot虚拟机的7种经典垃圾回收器进行了一个 简单的梳理,详细的在这里就不做介绍了,因为篇幅太大。原创 2021-03-06 10:54:45 · 779 阅读 · 0 评论 -
Eclipse中配置使用javap 反编译工具
什么是javap?javap是jdk自带的反解析工具,在研究JVM原理的时候,经常需要对.class文件进行发编译操作,以查看.class文件中的内容,这时候就需要用到javap了,其实它不是严格意义上的反编译工具(反编译后能够得到源代码),它只是帮我们解析一下.class文件的结构,根据class字节码文件,反解析出当前类对应的code区(汇编指令)、本地变量表、异常表和代码行偏移量映射表、常量池等等信息。并不能够得到源代码。Eclipse中配置javapRun -> External原创 2021-02-09 10:40:25 · 1009 阅读 · 0 评论 -
在Eclipse中添加sun.misc.Launcher类
研究类加载器,用到sun.misc.Launcher类,如何在Eclipse中添加呢?//启动类加载器的加载路径URL[] ruls = sun.misc.Launcher.getBootstrapClassPath().getURLs();删除默认的JRE,选中JRE System Library[JavaSE-1.8] --> 点击Remove接下来重新添加JRE System Library[JavaSE-1.8] ,点击 Add Libiaries...默认选择原创 2021-01-31 16:27:36 · 1098 阅读 · 0 评论 -
Java 虚拟机系列三:垃圾收集器一网打尽
前言上篇文章已经为大家详细介绍了 JVM 的垃圾收集机制,那么这次就一起来看看这些机制究竟是怎样应用到具体的垃圾收集器上的吧。Java 语言和 JVM 在不断迭代发展的同时,垃圾收集器也在不断地进化,从最初的的单线程收集器 Serial,到后来的并行收集器 Parallel 和并发收集器 CMS、G1,再到垃圾收集器最前沿成果——超低延迟的 Shenandoah 和 ZGC,还有不做垃圾收集的垃圾收集器 Epsilon (是的你没有看错),正是有了这些垃圾收集器的存在,Java 开发者才得以从繁琐的手动转载 2021-01-17 21:04:26 · 156 阅读 · 0 评论 -
Java 虚拟机系列二:垃圾收集机制详解,动图帮你理解
前言上篇文章已经给大家介绍了 JVM 的架构和运行时数据区 (内存区域),本篇文章将给大家介绍 JVM 的重点内容——垃圾收集。众所周知,相比 C / C++ 等语言,Java 可以省去手动管理内存的繁琐操作,很大程度上解放了 Java 程序员的生产力,而这正是得益于 JVM 的垃圾收集机制和内存分配策略。我们平时写程序时并感知不到这一点,但是如果是在生产环境中,JVM 的不同配置对于服务器性能的影响是非常大的,所以掌握 JVM 调优是高级 Java 工程师的必备技能。正所谓“基础不牢,地动山摇”,在这转载 2021-01-15 23:19:04 · 133 阅读 · 0 评论 -
Java 虚拟机系列一:一文搞懂 JVM 架构和运行时数据区 (内存区域)
前言了解 JVM 是对 Java 开发人员的基本要求,JVM 的相关内容自然也成了现在 Java 程序员面试的重要考点。不过估计很多小伙伴和我一样,长时间醉心于 CRUD,却忘了去了解一下更底层、更基础的东西,殊不知这些才是决定你能在这条路上走多远的关键因素,那接下来我们就一起来深入学习一下看似神秘的 JVM 吧。JVM 总体来看内容还是很多的,我会把最重要的内容介绍给大家,不过如果你有时间和精力的话,还是推荐你去看一下《深入理解Java虚拟机》这本书,确实是有口皆碑。本系列文章也会引用很多此书的内容并转载 2021-01-13 16:25:09 · 273 阅读 · 0 评论 -
JVM类加载器-双亲委派机制,以及破坏方式
JVM的类加载器分为两类:类文件被类加载器(类加载器子系统)加载到JVM运行时数据区的方法区,并生成对应的Class对象原创 2021-02-03 12:59:21 · 844 阅读 · 2 评论