![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java虚拟机
文章平均质量分 93
JVM
起个名字都这么男
Stay hungry,Stay foolish!
展开
-
浅谈垃圾回收
JVM内存区域要想搞懂啊垃圾回收机制,首先就要知道垃圾回收主要回收的是哪些数据,这些数据主要在哪一块区域。Java8和Java8之前的相同点有很多。都有虚拟机栈,本地方法栈,程序计数器,这三个是线程隔离的也称是线程独有的;本地内存和堆是线程共享的。Java8和之前JVM内存区域不同的是,Java8中增加了元空间,取消了永久代,Java8之前永久代是在堆中的,而之后方法区搬到了元空间中,元空间存在于本地内存中。下面详细说一下各个内存区域的特点。虚拟机栈:描述的是方法执行时的内存模型,是线程私有原创 2021-01-15 15:26:23 · 141 阅读 · 0 评论 -
JVM-Class文件的结构
Class类文件的结构Class文件是一株以8个字节为单位的二进制流。各个数据项目严格按照顺序紧凑的排列在文件之中,中间没有任何的分隔符,当遇到占用的空间大于8个字节时,会按照高位在前的方式进行分割,分割单位还是8个字节。Class文件格式采用一种类似于C语言结构体的伪结构体来存储数据,这种伪结构中只有两种数据类型:无符号数和表。无符号数:属于基本的数据类型,以u1,u2,u4,u8分别代表1个字节,2个字节,4个字节,8个字节的无符号数,他可以用来描述索引,数字,数量值或者按照utf8彪马构成字符原创 2020-08-26 15:35:39 · 120 阅读 · 0 评论 -
Java虚拟机常用的性能监控工具
基础故障处理工具jps: 虚拟机进程状况工具功能:来处正在运行的虚拟机进程,并显示虚拟机执行主类名称,以及本地虚拟机唯一ID。它是使用频率最高的命令行工具,因为其他JDK工具大多需要输入他查询到的LVMID来确定要监控的是哪一个虚拟机进程。对于本地虚拟机进程,LVMID就是操作系统的进程ID,但是如果启动了多个虚拟机进程,无法根据进程名称来定位时3,就必须依赖jps命令显示主类的功能才能区分了。格式:jps [ options ] [ hostid ]参数对应的作用。jstat:虚拟机统计原创 2020-08-23 21:48:13 · 721 阅读 · 0 评论 -
Java线程安全与锁优化,锁消除,锁粗化,锁升级
线程安全的定义来自《Java高并发实战》“当多个线程访问一个对象的时候,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方法的时候进行任何的协调工作,调用的对象的行为都能获得正确的结果,那这个对象就是线程安全的。”这句话要求线程安全的代码都必须具备一个特征:代码本身封装了所有的正确的手段(同步或者互斥等),令调用者无需再做任何措施来保证线程的安全。Java中的线程安全的理解首先线程安全就限定于多个线程访问共享资源的情况,这是前提。并且线程安全不是一个非真既假原创 2020-07-16 21:35:27 · 345 阅读 · 0 评论 -
Java内存模型与线程(二)线程的实现和线程的调度
先行先发生原则?线程的实现方式有哪几种?Java又是怎么去做线程调度的原创 2020-06-25 10:52:44 · 141 阅读 · 1 评论 -
Java内存模型与线程(一)
Java内存模型与线程TPS:衡量一个服务性能的标准,每秒事务处理的总数,表示一秒内服务端平均能够响应的总数,TPS又和并发能力密切相关。在聊JMM(Java内存模型)之前,先说一下Java为什么要定义出JMM,那就要从Java内存模型的作用谈起,Java内存模型是用来屏蔽各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。在此之前,C++/C直接使用物理硬件和操作系统的内存模型,因此,会由于平台或者操作系统的不同,有可能导致在一个平台上内存访问正常但是在另原创 2020-06-21 22:26:51 · 110 阅读 · 0 评论 -
Java类的加载过程-重点!!
java类的加载过程有以下几步共同完成:加载->连接->初始化。连接又分为验证、准备、解析一个非数组类的加载阶段(加载阶段获取类的二进制字节流的动作)是可控性最强的阶段,这一步我们可以去完成还可以自定义类加载器去控制字节流的获取方式(重写一个类加载器的 loadClass() 方法)。数组类型不通过类加载器创建,它由 Java 虚拟机直接创建。所有的类都由类加载器加载,...原创 2019-12-11 21:40:58 · 104 阅读 · 0 评论