JVM
文章平均质量分 70
风铃峰顶
个人项目经历请搜索:
http://www.haoranhaoshi.top/
展开
-
Arthas、jprofiler使用
Arthas和JDK中的JVM工具、jprofiler一样,可以分析Java进程。官方文档:https://arthas.aliyun.com/doc/jprofiler:官网:https://www.ej-technologies.com/products/jprofiler/overview.html官方教程:https://www.ej-technologies.com/products/jprofiler/docs中文简介:https://www.evget.com/product/.转载 2021-07-06 20:00:19 · 1443 阅读 · 0 评论 -
字符串相关的内存溢出-java.lang.OutOfMemoryError: Java heap space
字符串相关的java.lang.OutOfMemoryError: Java heap space: jsonString.toJSONString(); stringBuilder.toString(); Buffer.buffer(string); string.getBytes(); System.out.println(string);原创 2020-10-14 10:16:03 · 731 阅读 · 0 评论 -
Java Object的wait()、notify、notifyAll()
wait()、notify、notifyAll()必须在同步代码块中,而且是对象锁,对象锁的对象是wait()、notify、notifyAll()的对象。否则报java.lang.IllegalMonitorStateException。wait()会释放锁,阻塞当前线程,当前线程进入等待队列。notify会唤醒等待队列中的一个线程,进入同步队列。唤醒哪一个线程由操作系统的多线程管理决定。notifyAll()会唤醒等待队列中所有线程,进入同步队列。同步队列中的线程进行非公平竞争获得锁。公原创 2020-09-11 09:59:40 · 265 阅读 · 0 评论 -
HotSpot虚拟机中的垃圾收集器
7种垃圾收集器: 新生代收集器:Serial、ParNew、Parallel Scavenge;老生代收集器:Serial Old、Parallel Old、CMS;整堆收集器:G1;参考:https://blog.csdn.net/qq_41723615/article/details/104380000待续......转载 2020-09-10 19:19:29 · 87 阅读 · 0 评论 -
IDEA中查看类的字节码
在IDEA的class输出路径中,找到想查看的类,右键Open in Terminal,然后在命令窗口中输入javap -v 类名.class,即可查看这个类的字节码。解析: 1、版本号 major version: 49 //java版本 jdk1.6显示的是50, jdk1.5显示的是49,jdk1.4显示的是58 , 高版本能执行低版本的class文件 2、常量池Constant pool Method:方法 Field:字段 String:字符串 Asciz:原创 2020-09-09 09:33:52 · 442 阅读 · 1 评论 -
JVM GC所有关键知识点
堆:分年轻代(新生代,Young Generation)、年老代(老生代,Old Generation)、永久代(持久代,Permanent Generation)。永久代是方法区规范的实践。JDK1.8将永久代改为了元空间(MetaSpace)。永久代在JVM中,元空间在本地内存中。新生代分Eden、From、To区,默认大小比例8:1:1。From、To区又称为Survivor区。YGC(Young GC,新生代GC)(Minor GC)触发条件:Eden区空间不足。FGC(Full GC)原创 2020-09-01 14:42:04 · 193 阅读 · 0 评论 -
JVM模式、JIT编译
JVM模式:Client:启动快,启动后性能不如Server,适合桌面应用。Server:启动慢,启动后性能高,适合服务器后台。热点代码:被多次调用的方法被多次执行的循环体热点探测:基于采样基于计数器计数器的种类:方法调用计数器(默认阈值在Client模式下是 1500 次,在Server模式下是 10000 次)回边计数器两个计数器的协作Java代码(源代码)、字节码/中间码、机器码/本地代码/机器指令JIT(Just In Time)编译器/即时编译器:将热点代码转载 2020-09-01 14:38:57 · 141 阅读 · 0 评论 -
Java 类加载:显式加载、隐式加载,动态加载、静态加载;方法调用:显式调用、隐式调用;方法分派:动态分派、静态分派
类的加载方式:显式加载: ClassLoader.loadClass(className) :只执行装载过程。 Class.forName(className):执行类的装载、链接、初始化过程。https://www.cnblogs.com/heyjia/p/11338612.htmlClass.forName(className)是初始化类,newInstance()是实例化类。new是初始化加实例化类。(new和newInstance()的区别:https://blog.c...原创 2020-08-03 21:51:57 · 1078 阅读 · 0 评论 -
Java 类加载器、类加载的双亲委托机制
JVM预定义的三种类型类加载器,当一个 JVM启动的时候,Java缺省开始使用如下三种类型类装入器: 启动(Bootstrap)类加载器:引导类装入器是用本地代码实现的类装入器,它负责将<Java_Runtime_Home>/lib下面的核心类库或-Xbootclasspath选项指定的jar包加载到内存中。由于启动类加载器(C++写的)涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作。 扩展(Extension)类加载器:扩展类加载.转载 2020-07-24 15:19:41 · 117 阅读 · 0 评论 -
Java 类名A$类名B、类名A$12、类名A$$Lambda$1
类名A$类名B:类名A中的类名B类名A$12:类名A中的匿名内部类,种类索引为12(索引从1开始)类名A$$Lambda$12:带有Lambda型匿名内部类(种类索引为12)的类名A...原创 2020-03-31 09:33:00 · 1819 阅读 · 0 评论 -
Java 内存泄露查看
内存泄露:该释放的内存没有释放。内存溢出:无法申请内存。内存泄露到可泄露上限就会内存溢出。内存包括物理内存和虚拟内存。以产生的方式来分类,内存泄漏可以分为四类:常发性内存泄漏:发生内存泄漏的代码会被多次执行到,每次被执行时都会导致一块内存泄漏。偶发性内存泄漏:发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的...原创 2020-03-20 16:27:43 · 420 阅读 · 0 评论 -
解决jconsole和jvisualvm不显示线程具体信息
采用当前模块使用的JDK中bin的jconsole和jvisualvm。用cmd打开系统的java环境变量对应的jconsole和jvisualvm时,版本可能低于项目正在使用的JDK版本。原创 2020-03-19 14:12:09 · 1077 阅读 · 0 评论 -
解决jconsole 点击连接,无响应
在VM options中加入-Dcom.sun.management.jmxremote即可解决。扩展知识:-Dcom.sun.management.jmxremote.port=8011-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.authenticate=false...原创 2020-03-19 09:32:04 · 728 阅读 · 0 评论 -
JVM 类型、运行时结构、错误、内存泄露、内存溢出、参数、数据类型、种类
Java虚拟机的数据类型分为:原始类型和引用类型。对应存在原始值和引用值。参考:https://blog.csdn.net/haoranhaoshi/article/details/95100174Java运行时数据区;pc寄存器、Java虚拟机栈、Java堆、方法区、运行时常量池、本地方法栈。Java虚拟机错误:当虚拟机出现了内部错误,或者由于资源限制导致虚拟机无法实现Java语言...原创 2019-07-05 14:24:51 · 206 阅读 · 0 评论 -
GC:串行、并行、并发收集器
垃圾收集器(GC,garbage collector)(自动内存管理系统(automatic storage management system))分类:(1)串行(Serial)收集器:1>使用单线程处理所有垃圾回收工作,因为无需多线程交互,所以效率比较高。但是,也无法使用多处理器的优势,所以此收集器适合单处理器机器。当然,此收集器也可以用在小数据量(100M 左右)情况下的多处理器机...转载 2019-07-04 15:12:21 · 2245 阅读 · 1 评论 -
JVM 数据类型及范围
Java虚拟机的数据类型分为原始类型和引用类型(returnAddress,字节码指令地址)。对应存在原始值和引用值。原始类型包括数值类型和布尔类型。数值类型包括整数类型和浮点类型。整数类型包括byte、short、int、long、char。整数类型字节依次为1、2、4、8、2。取值范围为-2^(8n-1) 至 2^(8n-1) -1,n为字节大小。解释:最高位为符号位(0正1负),余下...原创 2019-07-08 21:18:04 · 144 阅读 · 0 评论 -
Java 命令
用法: java [options] <主类> [args...] (执行类) 或 java [options] -jar <jar 文件> [args...] (执行 jar 文件) 或 java [options] -m <模块>[/<主类>] [args...] java...转载 2019-07-03 15:59:08 · 676 阅读 · 2 评论 -
解决jvisualvm的监视器CPU显示不受本JVM支持,jconsole连接失败系列问题
结合:https://blog.csdn.net/haoranhaoshi/article/details/93739387我们知道IDE以管理员权限启动,然后运行Java程序,才能被jvm工具捕捉到当前Java进程。那么,jvisualvm的监视器CPU显示不受本JVM支持,jconsole连接失败的问题,很自然应该想到与权限有关,cmd以管理员权限启动,然后执行jvisualvm和jcon...原创 2019-06-26 16:25:09 · 2182 阅读 · 1 评论 -
解决jps不显示Java进程,jconsole、jvisualvm无法使用,hsperfdata_%UserName%下无进程文件系列问题
jps(Java Virtual Machine Process Status Tool)可以显示当前的Java进程信息。可使用的命令: jps [-q] [-mlvV] [<hostid>] <hostid>: <hostname>[:<port>]cmd下输入jps只显示当前Java进程的进程号和类名。jp...原创 2019-06-26 15:29:02 · 2136 阅读 · 0 评论