
虚拟机
文章平均质量分 81
qq_43171869
小刀爱编程,爱学习,分享一些知识给大家
展开
-
《深入理解 Java 虚拟机》笔记
第一章 Java 内存区域与内存溢出溢出程序计数器程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。每条线程都有独立的程序计数器,各条线程之间计数器互不影响,独立存储。Java 虚拟机栈Java 虚拟机栈也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是 Java 方法执行的...原创 2018-10-22 16:29:53 · 144 阅读 · 0 评论 -
JVM 的垃圾回收器,你真的搞懂这些了吗?
JVM的GC经过多年的发展,大家对 Minor GC、 major GC的理解并不完全一致,所以我不打算在本文中使用这个概念。我把GC大概分为一下4类:Young GC:只是负责回收年轻代对象的GC;Old GC:只是负责回收老年代对象的GC;Full GC:回收整个堆的对象,包括年轻代、老年代、持久带;Mixed GC: 回收年轻代和部分老年代的GC (G1);因为笔者目前使...原创 2018-11-16 17:25:51 · 214 阅读 · 0 评论 -
详解netty原理分析
Netty是一个高性能、异步事件驱动的NIO框架,它提供了对TCP、UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果。作为当前最流行的NIO框架,Netty在互联网领域、大数据分布式计算领域、游戏行业、通信行业等获得了广泛的应用,一些业界著名的开源组件也基于N...原创 2018-11-14 16:13:51 · 1008 阅读 · 0 评论 -
Redis 分布式锁进化史
按:系统架构经过多年演进,现在越来越多的系统采用微服务架构,而说到微服务架构必然牵涉到分布式,以前单体应用加锁是很简单的,但现在分布式系统下加锁就比较难了,我之前曾简单写过一篇文章,关于分布式锁的实现,但有一次发现实现的分布式锁是有问题的,因为出问题的概率很低,所以当时也没在意,前几天和朋友聊这个问题,想起来看过一篇文章,写的不错,今天特转载过来,希望能让更多的人看到,同时也加深一下记忆。原文链接...原创 2018-11-08 20:42:20 · 142 阅读 · 0 评论 -
Java并发-从同步容器到并发容器
引言容器是Java基础类库中使用频率最高的一部分,Java集合包中提供了大量的容器类来帮组我们简化开发,我前面的文章中对Java集合包中的关键容器进行过一个系列的分析,但这些集合类都是非线程安全的,即在多线程的环境下,都需要其他额外的手段来保证数据的正确性,最简单的就是通过synchronized关键字将所有使用到非线程安全的容器代码全部同步执行。这种方式虽然可以达到线程安全的目的,但存在几个...原创 2018-11-05 14:41:17 · 150 阅读 · 0 评论 -
老司机带你深入浅出Java反射
反射,它就像是一种魔法,引入运行时自省能力,赋予了 Java 语言令人意外的活力,通过运行时操作元数据或对象,Java 可以灵活地操作运行时才能确定的信息这里笔者就深入浅出总结下Java反射,若有不正确地方,感谢评论区指正交流~ 建议打开idea,写一个Java反射的demo,跟着调试,效果会更好 :)反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状...原创 2018-11-07 19:24:25 · 208 阅读 · 0 评论 -
Java并发:volatile的实现原理
synchronized 是一个重量级的锁, volatile 通常被比喻成轻量级的 synchronizedvolatile 是一个变量修饰符,只能用来修饰变量。volatile写:当写一个volatile变量时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存。volatile读:当读一个volatile变量时,JMM会把该线程对应的本地内存置为无效。线程接下来将从主内存中读...原创 2018-11-02 19:40:02 · 157 阅读 · 0 评论 -
Java核心-深入理解BIO、NIO、AIO
导读:本文你将获取到:同/异步 + 阻/非阻塞的性能区别;BIO、NIO、AIO 的区别;理解和实现 NIO 操作 Socket 时的多路复用;同时掌握 IO 最底层最核心的操作技巧。BIO、NIO、AIO 的区别是什么?同/异步、阻/非阻塞的区别是什么?文件读写最优雅的实现方式是什么?NIO 如何实现多路复用功能?带着以上这几个问题,让我们一起进入IO的世界吧。在开始之前...原创 2018-11-09 20:49:21 · 355 阅读 · 0 评论 -
如何用 redis 实现分布式幂等服务中间件
背景在编程领域,幂等性是指对同一个系统,使用同样的条件,一次请求和重复的多次请求对系统资源的影响是一致的。在分布式系统里,服务通常通过 RPC 或 HTTP 或其他形式对外提供。不管怎样,client 调用 server 服务都是将调用数据按特定协议封装好,然后通过网络发送给 server,server 将需要返回的数据同样按特定协议封装然后通过网络发送给 client。由于网络环境的复杂...原创 2018-11-06 16:49:05 · 404 阅读 · 0 评论 -
Java 多线程— 线程的生命周期及方法
这篇博客介绍线程的生命周期。线程是一个动态执行的过程,它也有从创建到死亡的过程。线程的几种状态在 Thread 类中,有一个枚举内部类:上面的信息以图片表示如下:第一张图:第二张图:把等待、计时等待、阻塞看成阻塞一个状态了1、新建状态(new):使用 new 创建一个线程,仅仅只是在堆中分配了内存空间新建状态下,线程还没有调用 start()方法启动,只...原创 2018-11-03 19:23:33 · 168 阅读 · 0 评论 -
深入浅出JVM内存模型与JVM参数详细配置
JVM内存结构由上图可以清楚的看到 JVM的内存空间分为3大部分:堆内存方法区栈内存其中 栈内存 可以再细分为 java虚拟机栈和本地方法栈,堆内存可以划分为新生代和老年代, 新生代中还可以再次划分为Eden区、From Survivor区和To Survivor区。其中一部分是线程共享的,包括 Java 堆和方法区;另一部分是线程私有的,包括虚拟机栈和本地方法栈,以及...原创 2018-11-01 19:56:23 · 148 阅读 · 0 评论 -
来一次彻底解决Java的值传递和引用传递
本文旨在用最通俗的语言讲述最枯燥的基本知识学过Java基础的人都知道:值传递和引用传递是初次接触Java时的一个难点,有时候记得了语法却记不得怎么实际运用,有时候会的了运用却解释不出原理,而且坊间讨论的话题又是充满争议:有的论坛帖子说Java只有值传递,有的博客说两者皆有;这让人有点摸不着头脑,下面我们就这个话题做一些探讨,对书籍、对论坛博客的说法,做一次考证,以得出信得过的答案。其实,对...原创 2018-10-24 19:35:20 · 1746 阅读 · 1 评论 -
Java中线程池,你真的了解会用吗
在《 深入源码分析Java线程池的实现原理 》这篇文章中,我们介绍过了Java中线程池的常见用法以及基本原理。在文中有这样一段描述:可以通过Executors静态工厂构建线程池,但一般不建议这样使用。关于这个问题,在那篇文章中并没有深入的展开。作者之所以这么说,是因为这种创建线程池的方式有很大的隐患,稍有不慎就有可能导致线上故障,如:一次Java线程池误用引发的血案和总结( zhuan...转载 2018-10-31 15:52:43 · 267 阅读 · 0 评论 -
详解SpringBoot的配置外部化
在前面的课程中,我们给大家分享过SpringBoot精妙的启动配置,主要阐述的是spring的IoC容器在SpringBoot中的加载过程,并与传统项目中Spring的IoC容器加载过程进行了一个对比.我们在开发的过程中,除了IoC容器的配置之外,当然还有许多其他的配置,诸如数据库的链接信息,端口,以及项目的内部使用的一些个性化信息等.那SpringBoot是如何管理这些配置呢?我今天呢,就从以下...原创 2018-10-26 16:43:33 · 600 阅读 · 0 评论 -
JavaScript数据结构之 - 队列
前面我们学习了 栈的实现 ,队列和栈非常类似,但是使用了不同的原则,而非后进先出。队列是遵循FIFO(First In First Out,先进先出)原则的一组有序的项。队列在尾部添加新元素,并从顶部移除元素。最新添加的元素必须排在队列的末尾。在计算机科学中,一个最常见的例子就是 打印队列 。比如说我们要打印五份文档。我们会打开每个文档,然后点击打印按钮。每个文档都会被发送至打印队列。...转载 2018-10-29 14:21:03 · 321 阅读 · 0 评论 -
简单易懂带你了解Java Agent
Java Agent这个技术,对于大多数同学来说都比较陌生,但是多多少少又接触过,实际上,我们平时用的很多工具,都是基于Java Agent实现的,例如常见的热部署JRebel,各种线上诊断工具(btrace, greys),还有阿里最近开源的arthas。其实Java Agent一点都不神秘,也是一个Jar包,只是启动方式和普通Jar包有所不同,对于普通的Jar包,通过指定类的main函数进...原创 2018-10-28 19:16:49 · 9275 阅读 · 0 评论 -
Dubbo深入分析之Transport层
Transporter类分析dubbo为通讯框架提供了统一的bind和connet接口,方便进行管理和扩展,封装在接口类:Transporter中:@SPI("netty")public interface Transporter { @Adaptive({Constants.SERVER_KEY, Constants.TRANSPORTER_KEY}) Serve...原创 2018-10-25 15:31:50 · 528 阅读 · 0 评论 -
金九银十,每天还在增删查改,怎么看透JVM本质?
前言JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器。它是一种基于下层的操作系统和硬件平台并利用软件方法来实现的抽象的计算机,可以在上面执行java的字节码程序。java编译器只需面向JVM,生成JVM能理解的代码或字节码文件。Java源文件经编译器,编译成字节码程序,通过JVM将每一条指令翻译成不同平台机器码,通过特定平台运行。这里就给大家讲一下JVM。...原创 2019-09-21 20:23:41 · 147 阅读 · 0 评论