
【JVM】
文章平均质量分 80
程序猿微刊
立志当风华正茂,奋斗趁青春未老
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java 中 引用拷贝、浅拷贝、深拷贝
Java 中 引用拷贝、浅拷贝、深拷贝原创 2023-02-13 16:14:05 · 1893 阅读 · 0 评论 -
Java内存模型中happen-before原则
前言熟悉 Java 并发编程的都知道,JMM(Java 内存模型) 中的 happen-before(简称 hb)规则,该规则定义了 Java 多线程操作的有序性和可见性,防止了编译器重排序对程序结果的影响。按照官方的说法:当一个变量被多个线程读取并且至少被一个线程写入时,如果读操作和写操作没有 HB 关系,则会产生数据竞争问题。 要想保证操作 B 的线程看到操作 A 的结果(无论 A 和 B 是否在一个线程),那么在 A 和 B 之间必须满足 HB 原则,如果没有,将有可能导致重排序。 当缺少 HB原创 2022-03-07 16:11:58 · 770 阅读 · 0 评论 -
Linux服务器jstat命令查看JVM的GC情况
jstat命令可以查看堆内存各部分的使用量,以及加载类的数量,今天简单介绍一下jstat如何使用,借公司测试服务器练习一下,哈哈哈哈~~注意!!!公司服务器使用的jdk版本是jdk8首先使用jps -m命令查看服务器都有哪些java进行运行,随便找一个 31666进程号作为范例 1、类加载统计: Loaded:加载class的数量 Bytes:所占用空间大小 Unloaded:未加载数量 Bytes:未加载占用空间 Time:时间2、编译统计Compiled:...原创 2021-04-23 10:32:12 · 1224 阅读 · 0 评论 -
Java 关于强引用,软引用,弱引用和虚引用的区别与用法
一、概述:众所周知,Java中是JVM负责内存的分配和回收,这是它的优点(使用方便,程序不用再像使用c那样操心内存),但同时也是它的缺点(不够灵活)。为了解决内存操作不灵活这个问题,可以采用软引用等方法。在JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及状态,程序才能使用它。这 就像在日常生活中,从商店购买了某样物品后,如果有用...转载 2020-01-19 13:39:41 · 355 阅读 · 0 评论 -
idea maven java.lang.outofmemoryerror gc overhead limit exceeded
1、问题描述idea 初次编译下载的代码在pom 文件中出现, java.lang.outofmemoryerror gc overhead limit exceeded。2、解决方案:需要三步解决下面的问题:1)在pom 中添加依赖插件<build> <plugins> <plugin> ...原创 2019-12-30 16:54:54 · 1052 阅读 · 0 评论 -
intellij idea中tomcat的VM options配置
点击Intellij IDEA 界面窗口Run,打开Edit Configuration,出现Run/Debug Configurations界面。Application server 选择安装Tomcat所在的文件夹,点击Configuration一般自动配置好了,其他的就按照图上的填写。VM options这项需要我们自己填写,我填的是VM options : -Xms768m ...原创 2019-12-30 16:51:41 · 1719 阅读 · 0 评论 -
JVM入门——JVM内存结构
一、java代码编译执行过程 1.源码编译:通过Java源码编译器将Java代码编译成JVM字节码(.class文件) 2.类加载:通过ClassLoader及其子类来完成JVM的类加载 3.类执行:字节码被装入内存,进入JVM虚拟机,被解释器解释执行 注:Java平台由Java虚拟机和Java应用程序接口搭建,Java语言则是进入这个平台的通道, 用J...原创 2019-09-29 17:12:10 · 353 阅读 · 0 评论 -
一文学会Java死锁和CPU 100% 问题的排查技巧
00 本文简介作为一名搞技术的程序猿或者是攻城狮,想必你应该是对下面这两个问题有所了解,说不定你在实际的工作或者面试就有遇到过:第一个问题:Java死锁如何排查和解决?第二个问题:服务器CPU占用率高达到100%排查和解决?第三个问题:有哪些工具能够快速查看线程使用情况?本文对这三个问题进行总结整理,通过实例演示讲解,精彩干货,不容错过啊!前戏就这么多,高潮会很多,做好了,...转载 2019-07-14 17:22:27 · 380 阅读 · 0 评论 -
类加载器
类与类加载器判断类是否“相等”任意一个类,都由加载它的类加载器和这个类本身一同确立其在 Java 虚拟机中的唯一性,每一个类加载器,都有一个独立的类名称空间。因此,比较两个类是否“相等”,只有在这两个类是由同一个类加载器加载的前提下才有意义,否则,即使这两个类来源于同一个 Class 文件,被同一个虚拟机加载,只要加载它们的类加载器不同,那么这两个类就必定不相等。这里的“相等”,包...原创 2019-05-15 10:17:03 · 308 阅读 · 0 评论 -
类加载的过程
类加载过程包括 5 个阶段:加载、验证、准备、解析和初始化。加载加载的过程“加载”是“类加载”过程的一个阶段,不能混淆这两个名词。在加载阶段,虚拟机需要完成 3 件事:通过类的全限定名获取该类的二进制字节流。 将二进制字节流所代表的静态结构转化为方法区的运行时数据结构。 在内存中创建一个代表该类的 java.lang.Class 对象,作为方法区这个类的各种数据的访问入口。获...原创 2019-05-14 16:03:12 · 288 阅读 · 0 评论 -
类加载的时机
类的生命周期类从被加载到虚拟机内存开始,到卸载出内存为止,它的整个生命周期包括以下 7 个阶段:加载 验证 准备 解析 初始化 使用 卸载验证、准备、解析 3 个阶段统称为连接。加载、验证、准备、初始化和卸载这 5 个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班地开始(注意是“开始”,而不是“进行”或“完成”),而解析阶段则不一定:它在某些情况下可以在初始...原创 2019-05-14 16:01:46 · 271 阅读 · 0 评论 -
类文件结构
JVM 的“无关性”谈论 JVM 的无关性,主要有以下两个:平台无关性:任何操作系统都能运行 Java 代码 语言无关性: JVM 能运行除 Java 以外的其他代码Java 源代码首先需要使用 Javac 编译器编译成 .class 文件,然后由 JVM 执行 .class 文件,从而程序开始运行。JVM 只认识 .class 文件,它不关心是何种语言生成了 .class 文件,...原创 2019-05-14 15:59:40 · 254 阅读 · 0 评论 -
JVM 性能调优
在高性能硬件上部署程序,目前主要有两种方式:通过 64 位 JDK 来使用大内存; 使用若干个 32 位虚拟机建立逻辑集群来利用硬件资源。使用 64 位 JDK 管理大内存堆内存变大后,虽然垃圾收集的频率减少了,但每次垃圾回收的时间变长。 如果堆内存为14 G,那么每次 Full GC 将长达数十秒。如果 Full GC 频繁发生,那么对于一个网站来说是无法忍受的。对于用户交互性强...原创 2019-05-14 15:58:21 · 389 阅读 · 0 评论 -
内存分配与回收策略
对象的内存分配,就是在堆上分配(也可能经过 JIT 编译后被拆散为标量类型并间接在栈上分配),对象主要分配在新生代的 Eden 区上,少数情况下可能直接分配在老年代,分配规则不固定,取决于当前使用的垃圾收集器组合以及相关的参数配置。以下列举几条最普遍的内存分配规则,供大家学习。对象优先在 Eden 分配大多数情况下,对象在新生代 Eden 区中分配。当 Eden 区没有足够空间进行分配...原创 2019-05-14 15:57:08 · 258 阅读 · 0 评论 -
HotSpot 垃圾收集器
HotSpot 虚拟机提供了多种垃圾收集器,每种收集器都有各自的特点,虽然我们要对各个收集器进行比较,但并非为了挑选出一个最好的收集器。我们选择的只是对具体应用最合适的收集器。新生代垃圾收集器Serial 垃圾收集器(单线程)只开启一条GC 线程进行垃圾回收,并且在垃圾收集过程中停止一切用户线程(Stop The World)。一般客户端应用所需内存较小,不会创建太多对象,而且堆...原创 2019-05-14 15:55:53 · 285 阅读 · 0 评论 -
垃圾收集策略与算法
程序计数器、虚拟机栈、本地方法栈随线程而生,也随线程而灭;栈帧随着方法的开始而入栈,随着方法的结束而出栈。这几个区域的内存分配和回收都具有确定性,在这几个区域内不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随着回收了。而对于 Java 堆和方法区,我们只有在程序运行期间才能知道会创建哪些对象,这部分内存的分配和回收都是动态的,垃圾收集器所关注的正是这部分...原创 2019-05-14 15:54:54 · 294 阅读 · 0 评论 -
HotSpot 虚拟机对象探秘
对象的内存布局在 HotSpot 虚拟机中,对象的内存布局分为以下 3 块区域:对象头(Header) 实例数据(Instance Data) 对齐填充(Padding)对象头对象头记录了对象在运行过程中所需要使用的一些数据:哈希码 GC 分代年龄 锁状态标志 线程持有的锁 偏向线程 ID 偏向时间戳对象头可能包含类型指针,通过该指针能确定对象属于哪个类。如果...原创 2019-05-14 15:53:30 · 275 阅读 · 0 评论 -
JVM 内存结构
Java 虚拟机的内存空间分为 5 个部分:程序计数器 Java 虚拟机栈 本地方法栈 堆 方法区JDK 1.8 同 JDK 1.7 比,最大的差别就是:元数据区取代了永久代。元空间的本质和永久代类似,都是对 JVM 规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元数据空间并不在虚拟机中,而是使用本地内存。程序计数器(PC 寄存器)程序计数器的定义程序计数...原创 2019-05-14 15:52:34 · 301 阅读 · 0 评论 -
深入了解JVM:Java思维脑图
原创 2019-04-15 08:58:13 · 396 阅读 · 1 评论