![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 59
喻神
随心而动
展开
-
JVM之监控与运维
1、JDK自带命令工具--jstat查看JVM中各种信息包括内存情况,GC次数等2、JDK自带命令工具--jmap生成java堆信息3、JDK自带命令工具--jstack生成虚拟机当前时刻线程快照,也就是每一条线程正在执行的方法对栈集合,生成快照的目的是为了定位线程出现长时间停顿或无相应的原因4、JDK可视化工具--JConsole可以对内存、线程等信息进行监控,但分析能力较弱5、JDK可视化工具--Visual VM除了拥有更强大的监控以外,还具备较强的分析能力,其中B原创 2021-09-21 13:45:55 · 217 阅读 · 0 评论 -
JVM之垃圾回收
1、 回收算法1.1、Java堆对象回收判断(1)引用计数法给对象添加一引用计数器,被引用一次计数器值就加 1,实现简单,但是无法解决循环依赖(2)可达性分析法(默认)从GC Roots 到这个对象是否可达,在Java语言中,可作为 GC Roots 的对象包括下面几种:a. 虚拟机栈(栈帧中的局部变量表)中引用的对象。b. 方法区中常量或类静态属性引用的对象。c. 本地方法栈中 JNI(Native方法)引用的对象1.2、永久代(方法区)回收判断永久代的垃圾收集主要原创 2021-09-21 13:44:47 · 123 阅读 · 0 评论 -
JVM之类加载机制
1、类加载流程加载:指的就是将class文件加载到内存中,并将这些静态数据转换成方法区中的运行时数据结构,在堆中生成一个java.lang.Class对象。验证:要确保加载的信息符合jvm的规范,没有安全问题。准备:给类变量(静态变量)分配内存,并设置初始值。解析:虚拟机常量池的符号引用替换为直接引用的过程。初始化:初始化是执行clinit方法(类构造方法)的过程,也就是执行静态变量赋值或者静态代码块卸载:一个已经加载的类型被卸载的几率很小,一般来说用户自定义类加载器加载的类是可原创 2021-09-21 13:43:51 · 97 阅读 · 0 评论 -
JVM之内存模型
1、 CPU和内存的交互在计算机中,cpu和内存的交互最为频繁,相比内存,磁盘读写太慢,内存相当于高速的缓冲区。但是随着cpu的发展,内存的读写速度也远远赶不上cpu。因此cpu厂商在每颗cpu上加上高速缓存,用于缓解这种情况。现在cpu和内存的交互大致如下。在多核cpu中,每个处理器都有各自的高速缓存(L1,L2,L3),而主内存确只有一个 。虽然加入高速缓存解决了处理器和内存的矛盾(一快一慢),但是引来了新的问题 -缓存一致性1.1、缓存一致性如何保证多个处理器运算涉及到同一个.原创 2021-09-21 13:42:07 · 229 阅读 · 0 评论 -
ubuntu14.04编译openjdk7
一、编译环境准备首先我们打开终端输入指令:java -version,来查看是否已安装jdk,以及安装的版本。若果已经安装了jdk,则请先卸载!(当然可以不用卸载,只是想尽量避免一些干扰)1、ANT等编译工具下载首先打开终端输入指令:sudo apt-get install build-essential gawk m4 libasound2-dev libcups2-dev libx原创 2017-09-26 17:51:12 · 715 阅读 · 0 评论 -
详谈String的intern()方法
Java中String的intern()方法,其设计的初衷就是重用String对象,以节省内存消耗。但是在JDK1.6和JDK1.7中intern()方法的功能有点点不同,具体怎么个不同法,且看看下面代码,这个例子是网上流传较广的一个例子:String s1 = new String("1"); s1.intern(); String s2 = "1"; System.out.pr原创 2017-10-20 10:10:14 · 703 阅读 · 0 评论