
JVM
文章平均质量分 90
JVM的相关总结
hxcaifly
这个作者很懒,什么都没留下…
展开
-
【JVM第十五篇】: 从实际案例聊聊Java应用的GC优化
文章目录引言1. 优化前的准备1.1. GC优化需知1.2. JVM基础回顾1.3. 参数基本策略2. 优化步骤2.1. 确定目标2.2. 优化2.3. 验收优化结果3. GC优化案例3.1. 案例一 Major GC和Minor GC频繁3.2. 案例二 请求高峰期发生GC,导致服务可用性下降3.3. 案例三 发生Stop-The-World的GC4. 总结引言当Java程序性能达不到既定目...转载 2019-03-23 17:07:42 · 394 阅读 · 0 评论 -
【JVM第十四篇】: Java ClassLoader不再那么难以理解了
文章目录1. ClassLoader 做什么的?2. 延迟加载3. 各司其职4. ClassLoader 传递性5. 双亲委派6. Class.forName7. 自定义加载器8. Class.forName vs ClassLoader.loadClass9.钻石依赖10. 分工与合作11. Thread.contextClassLoader1. ClassLoader 做什么的?顾名思义,...转载 2019-01-18 22:14:52 · 267 阅读 · 0 评论 -
【JVM第十三篇】:JVM的类加载机制
前言我们知道,Java源代码(.java文件)需要通过编译器编译成字节码文件(.class)后由类装载子系统(ClassLoader)载入运行时数据区(<jdk1.8之前是载入方法区,>=jdk1.8以后是载入元数据区)才能被后续的Java运行程序(线程)正常使用(实例化或引用)。那么类装载的具体机制是什么样的呢?下面就让我们一起进一步来了解下吧!JVM类装载概述与C/C++那...转载 2018-12-02 13:52:36 · 286 阅读 · 0 评论 -
【JVM第十二篇】:Java垃圾回收器(GC)思维导图
原创 2018-10-16 21:15:19 · 646 阅读 · 0 评论 -
【JVM第十一篇】:深入理解volatile关键字的作用
在Java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了 同步块(synchronized) 和 volatile 关键字机制。synchronized(不做过多解释)同步块大家都比较熟悉,通过 synchronized 关键字来实现...原创 2018-09-14 20:56:06 · 404 阅读 · 0 评论 -
【JVM第十篇】:Java IO与NIO的区别
一、概念NIO即New IO,这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多。在Java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。二、NIO和IO的主要区别下表总结了Java IO和NIO之间的主要区别: IO NIO 面向流...原创 2018-09-10 00:44:31 · 543 阅读 · 0 评论 -
【JVM第九篇】:Executor框架与线程池
Executor框架简介在Java 5之后,并发编程引入了一堆新的启动、调度和管理线程的API。Executor框架便是Java 5中引入的,其内部使用了线程池机制,它在java.util.cocurrent 包下,通过该框架来控制线程的启动、执行和关闭,可以简化并发编程的操作。因此,在Java 5之后,通过Executor来启动线程比使用Thread的start方法更好,除了更易管理,效率更好...转载 2018-11-26 15:31:54 · 193 阅读 · 0 评论 -
【JVM第八篇】:Java并发编程:用AQS写一把可重入锁
前一篇博客Java并发编程:自己动手写一把可重入锁详述了如何用synchronized同步的方式来实现一把可重入锁,今天我们来效仿ReentrantLock类用AQS来改写一下这把锁。要想使用AQS为我们服务,首先得弄懂三个问题:AQS是什么?AQS已经做了什么以及我们还需要做些什么?AQS简介AQS是J.U.C包下AbstractQueuedSynchronizer抽象的队列式的同步器的简称...转载 2018-11-15 10:40:43 · 204 阅读 · 0 评论 -
【JVM第七篇】:Java并发编程:自己动手写一把可重入锁
关于线程安全的例子,简而言之就是多个线程在同时访问或修改公共资源的时候,由于不同线程抢占公共资源而导致的结果不确定性,就是在并发编程中经常要考虑的线程安全问题。前面的做法是使用同步语句synchronized来隐式加锁,现在我们尝试来用Lock显式加锁来解决线程安全的问题,先来看一下Lock接口的定义:public interface LockLock接口有几个重要的方法://获取锁,如果...转载 2018-11-15 10:29:12 · 166 阅读 · 0 评论 -
【JVM第六篇】:Java-类锁和对象锁
1.类锁和对象锁的定义对象锁的定义是针对一个对象的,它只在该对象的某个内存位置声明一个标志位标识该对象是否拥有锁,所以它只会锁住当前的对象。一般一个对象锁是对一个非静态成员变量进行syncronized修饰,或者对一个非静态方法进行syncronized修饰。对于对象锁,不同对象访问同一个被syncronized修饰的方法的时候不会阻塞住。类锁类锁是锁住整个类的,当有多个线程来声明这个类的...原创 2018-11-15 17:36:12 · 292 阅读 · 0 评论 -
【JVM第五篇】:不可不说的Java“锁”事
前言Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自JDK 8)、使用场景进行举例,为读者介绍主流锁的知识点,以及不同的锁的适用场景。Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方式进行介绍,帮助大家更快捷的理解相关知识。下面给出本文内容的总体分类目录:1. 乐观锁 V...转载 2018-11-29 11:37:39 · 277 阅读 · 0 评论 -
【JVM第四篇】:Class文件中的常量池详解(下)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/u010349169/article/details/40301985 NO9.类中引用到的field字段在常量池中是怎样描述的?(CONSTANT_Fieldref_info, CONSTANT...转载 2018-09-28 17:34:54 · 496 阅读 · 0 评论 -
【JVM第三篇】:Class文件中的常量池详解(上)
NO1.常量池在class文件的什么位置?          我的上一篇转载 2018-09-28 17:33:06 · 2899 阅读 · 0 评论 -
【JVM第二篇】:Linux与JVM的内存关系分析
引言在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约 600m,Linux自身使用大约800m。从表面上,物理内存应该是足够使用的;但实际运行的情况是,会发生大量使用SWAP(说明物理内存不够使用 了),如下图所示。同时,由于SWAP和GC同时发生会致使JVM严重卡顿,所以我们要追问:内存究竟去哪儿了? ...原创 2018-09-09 22:33:52 · 868 阅读 · 1 评论 -
【JVM第一篇】:java内存区域以及虚拟机对象探秘
1.java内存区域java虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁时间,有的区域随着虚拟机进程的启动而存在,有些区域依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范SE7版》的规定,Java虚拟机所管理的内容将会包括以下几个运行时数据区域,如果所示:1.1.程序计数器程序计数器是一块较小的空间,类似...原创 2018-09-28 09:34:23 · 336 阅读 · 0 评论