自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

mg0324的专栏

个人博客

  • 博客(140)
  • 资源 (2)
  • 收藏
  • 关注

原创 垃圾收集算法

部分收集(Partial GC): 不是完整收集Java堆的收集。新生代收集(Minor GC/Young GC):只是新生代的收集。老年代收集(Major GC/Old GC):只是老年代的收集。目前只有CMS收集器会有单独收集老年代的行为。混合收集(Mixed GC):收集整个新生代以及部分老年代的垃圾收集。目前只有G1收集器会有这种行为。整堆收集(Full GC):收集整个Java堆和方法区的垃圾收集。

2022-08-20 10:29:39 177

原创 Java虚拟机相关工具

本文主要是为了介绍虚拟机相关的工具,包括故障处理、性能监控和一些其他工具。

2022-08-20 10:07:25 1204

原创 IDEA的启动速度优化

如果发现自己的IDE很慢,或者卡顿,那么就对它来一次调优吧。本人使用的是IDEA,如果是Eclipse的同学,可查找对应相关资料,本文仅供参考。

2022-08-19 10:37:04 855

原创 熟悉Java内存模型JMM

要搞懂指令重排,首先要知道一条指令在CPU内是如何执行的,如下图约5个步骤。为了加快指令并行速度,CPU硬件支持了流水线技术。不同的指令步骤执行在不同的硬件局部,从而可以支持同时并发执行。知道了CPU流水线之后,我们来看一个A=B+C的流水线执行过程例子:如果按串行排列,则耗时4 * 5 = 20个时钟周期;使用CPU流水线并行技术后,可以只消耗9个时钟周期,节省了11个时钟周期的时间。所以流水线技术的引入,大大提高了CPU并行执行速度。...

2022-08-12 10:36:13 198

原创 如何计算Java对象的大小

对象大小 = 对象头字节 + 实例数据字节 + 填充字节。

2022-08-10 11:21:11 1426

原创 熟悉HotSpot中的对象

使用句柄方式访问,优点是对象变化时栈中的reference的值不用改变,存储的是稳定的句柄地址;类型指针Klass存储该对象的类对象的内存地址,可以通过该指针知道对象是属于哪个类。对象引用中存储的是对象实例数据指针,再通过对象头里的klass指针找到对象类型数据。对象的存储空间是在堆中分配的,但是这个对象的引用(存的是地址)却是在栈中分配的。对象引用内存储的是指向句柄地址,句柄对象中包含对象实例数据指针和类型数据指针。目前对象的访问方式有句柄访问和直接指针访问方式。至此,一个可用的对象才算是完全创建出来。.

2022-08-09 18:03:39 291

原创 并发模式之异步回调Future模式

在JDK1.5中提供了Future模式,获取数据时阻塞的,所以其他框架(guava和netty)对Future模式做了扩展,支持了回调函数。在JDK1.8中提供了,支持了更加强大的异步回调、流式处理、多个Future组合处理的能力。...

2022-07-28 10:52:08 839

原创 Java关键字synchronized

是同步块,实现了多线程间的互斥同步。它修饰的代码,确保任一时刻只有一个线程进入访问。

2022-07-24 10:26:05 85

原创 深入类加载机制

文件格式验证,元数据验证(语义校验),字节码验证(逻辑校验),符号引用校验为类变量(static的)分配内存并赋初始值。主要针对:测试:卸载类卸载需要满足如下条件:(自定义类加载器加载的类才会被卸载)...

2022-07-08 12:24:51 129

原创 Java关键字volatile

语义上,volatile是表示易变的、不确定的。功能上,是Java提供的最轻量级的同步机制。要弄懂如何保证可见性的,先要知道CPU的缓冲架构,如下图:因为CPU的执行速度和内存的读写速度,相差太大。CPU完成操作后,如果要等到内存也执行完成再继续下一个操作的话,对CPU算力就是极大的浪费。所以为了匹配2者的速度差,引入了高速缓存。现在CPU一般都有3级缓存,其中一级缓存离CPU核最近,速度也最快,可分为指令缓存和数据缓存2部分;下面是二级缓存,一个CPU核心就配备一个一级缓存和二级缓存的,是私有的。而三级

2022-07-05 11:03:27 280

原创 千呼万唤始出来的IDEA笔记插件mdNote

前言最近工作上在做IDEA插件开发的东西,所以需要深入学习。在网上看到一个比较好的例子,实现一个笔记插件,故实现后发布这篇博客,分享给同样在学习的你。(mdNote插件下载地址:https://mangomei.lanzouy.com/iWLPb00tn8vc)更多细节及实现欢迎下载源码学习:https://gitee.com/mgang/idea-demo/tree/master/md-note其实也可以按第一个IDEA插件hello ide开发里提到的发布插件的方式,发布到官网插件仓库。环境信

2022-03-01 18:40:47 4172

原创 开发第一个IDE插件

前言问:为什么要开发idea插件呢?答:你一定用过很多idea插件,比如ideaVim,Maven,lombok,markdown等。这些都是插件,安装后你的idea就能获得对应的能力。现在想象你是一个插件开发者,通过开发插件来增强idea的能力,并发布到idea的插件仓库,分享给其他人。这样是不是很有意思呢!环境信息操作系统: macOs catalina 10.15.7idea版本:2021.3.1 社区版jdk版本:jdk-11.0.14.jdk开发

2022-01-22 22:56:36 2477 3

原创 浅析内网穿透可行方案

缘起最近在做一个微信网站,需要和微信对接。发现开发的时候需要将自己电脑上的服务映射到公网上,才能接收到微信公众平台的回调。因此,百度搜寻整理各种可行的内网穿透方案。内网穿透原理 以下纯属个人理解,不保证完全正确。想要自己机器或者自己机器上的web服务暴露在internet上,就需要有一个公网ip访问点,然后和自己的机器建立socket 长连接关联。这样就可以访问公网ip某个路径,代理到自己

2017-07-03 11:57:09 7735 2

原创 Maven私服nexus的安装与使用

1.Nexus的介绍Nexus 是Maven仓库管理器,如果你使用Maven,你可以从Maven中央仓库 下载所需要的构件(artifact),但这通常不是一个好的做法,你应该在本地架设一个Maven仓库服务器,在代理远程仓库的同时维护本地仓库,以节省带宽和时间,Nexus就可以满足这样的需要。此外,他还提供了强大的仓库管理功能,构件搜索功能,它基于REST,友好的UI是一个extjs的RES

2015-05-26 19:07:23 811

原创 Java关键字synchronized

提纲定义synchronized是同步块,实现了多线程间的互斥同步。它修饰的代码,确保任一时刻只有一个线程进入访问。特性因为在synchronized同步块内,只有一个线程能访问,因此确保了同步块内的原子性、可见性和有序性。使用方式总结:Class tClass = T.class; // T.class其实就是该类的类对象synchronized不管是修饰代码块还是修饰方法,本质都是作用于对象上。进入代码块时需要获取对象锁,退出同步块是

2023-01-11 15:36:03 388 1

原创 frp穿透你的远程桌面

如此Windows的远程桌面就成功在线了,且在电脑重启后会自动启动上线。如果电脑断电,也只需要联系同事帮忙打开电脑电源,就能成功远程。下载windows版本的fprc到本地,版本地址为https://github.com/fatedier/frp/releases。作为一个程序员,经常会遇到需要使用远程桌面的述求(居家办公、加班,你懂的)。最后可以用远程桌面连接工具,远程到您的电脑,如此就能愉快的玩耍了。安装成功后,继续设置服务frpc自启动。,安装fprc为服务,并设置开机自启。启动成功后访问监控界面,

2022-11-24 17:14:46 2497

原创 java8新特性使用

【代码】java8新特性使用。

2022-11-24 14:00:21 257

原创 SQL增强

左连接查询,以左边为主表。右连接查询,以右边为主表。内连接查询,以左右表交集。

2022-11-24 11:12:31 126

原创 熟悉JVM内存区域

本地方法栈和虚拟机栈作用类似,只不过一个服务于本地方法(native的c实现的),一个是Java方法(字节码方法)。Java是以方法做为最基本的执行单元,而栈帧则是虚拟机进行方法调用和执行的数据结构,也是虚拟机栈中的元素。每一个栈帧都包含局部变量表、操作数栈、动态连接、返回地址和一些其他附加信息。在HotSpot虚拟机中,直接将虚拟机栈和本地方法栈合二为一。取代,而且不再在在虚拟机内存中,而是使用的本地内存。而JDK1.8和JDK1.7比,主要是将。

2022-09-27 23:34:14 302

原创 HotSpot垃圾算法实现之并发可达性分析

想要破坏的是第二个条件,当灰色对象要删除指向白色对象的引用关系时,就将这个要删除的引用记录下来,等并发扫描完成后,再将这些记录的引用以灰色对象为根,重新扫描一次。想要破坏的是第一个条件,当插入了黑色对象到白色对象的引用时,就将这个新插入的引用记录下来,等并发扫描完成后,再将这些记录的引用以黑色对象为根,重新扫描一次。根可达算法在理论上,需要冻结全部的用户线程运行。在根节点枚举步骤中,由于GC Roots相比整个Java堆中全部对象毕竟是极少数,且在OopMap优化下,带来的停顿时间非常短暂且相等固定。

2022-09-26 23:10:02 258

原创 HotSpot垃圾算法实现之记忆集与卡表和写屏障

一个卡页的内存中通用有多个对象,但是只有卡页中有一个对象的字段存在着跨代指针,则将该卡页对应的卡表索引元素值标识为1(称为变脏),没有则标识为0。当部分区域进行垃圾收集时,如果非收集区域的对象跨区引用了收集区域的对象(收集区域的对象A可能被非收集区域的对象静态字段B引用,这样对象A应加入GC Roots集合,防止被错误清理),虽然可以笼统的将其他所有区域都加入到GC Roots的扫描范围,可如此势必会有额外的性能消耗。赋值前的写屏障叫写前屏障,赋值后的写屏障叫写后屏障。(这里的写屏障和内存屏障无关)

2022-09-01 18:56:58 292

原创 HotSpot垃圾算法实现之枚举根节点和安全点安全区域

在根可达性分析算法中,从GC Roots集合中找引用链是虚拟机高效实现的第一个例子。

2022-09-01 18:45:10 267 1

原创 Java类加载器

Java虚拟机通过一个类的全限定名来获取类的二进制字节流的这个动作,放到虚拟机外部实现,让应用程序自己决定如何获取所需的类。实现这个动作的代码叫做类加载器。

2022-09-01 18:27:51 409

原创 熟悉Java类文件class结构

Java基于Class文件作为存储格式,不同平台对应虚拟机实现的方式让Java具备跨平台的特性。因此我们有必要更深入学习Class字节码文件的结构。

2022-09-01 00:41:05 200

原创 熟悉JVM字节码指令

Java虚拟机的指令由一个字节长度(256个操作码)的、代表着特定操作含义的数字(操作码,Opcode)和跟随其后的零至多个代表其操作需要的参数(操作数,Operand)构成。由于Java虚拟机采用面向操作数栈的架构,所以大部分指令都只有一个操作码,操作数都是放到操作数栈中。如果不考虑异常,则简单的指令执行模型的伪代码如下:do {自动计算PC寄存器的值加1;根据PC寄存器指示的位置,从字节码流中取出操作码;if (字节码存在操作数) {从字节码流中取出操作数;}...

2022-09-01 00:26:56 180

原创 Mac10.15.7上编译OpenJDK8u

进入到目录(因机器而已):/Users/mango/git/openjdk8u/build/macosx-x86_64-normal-server-release/images/j2sdk-image/bin,后执行。在编译过程中,可能会遇到各种各样的问题,这里就不标出来了。(因为不太懂C,要怎么解决也都是查资料尝试解决的。执行make images命令,编译过程耗时比较久,请耐心等待。如果有代理请设置代理,不然可能会超时或者慢。下,在IDEA中配置使用。该过程很慢,请耐心等待。下的软件包copy到。

2022-08-22 22:54:47 3512

原创 Java发展历史

Java发展历史及组成部分

2022-08-12 10:50:46 816

原创 垃圾判断算法与4大引用

在熟悉Java内存区域[1]文中,指出了JVM运行时数据区有堆、方法区、虚拟机栈、本地方法栈和程序计数器5个部分,后3个部分都是线程私有的,其中的数据会跟随线程死亡自动回收,所以不需要垃圾收集。而堆和方法区是线程共享的,故垃圾收集主要关注这2个部分。给对象添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;任何时刻计数器值为0的对象就是不可能再被使用的,也就是垃圾。的对象作为起始点,从这些节点向下搜索,搜索所走过的路径称为引用链。没有任何引用链相连,则证明此对象时不可用的。RC Roots对象。..

2022-08-10 22:26:54 105

原创 读书笔记 如何阅读一本书

阅读时间:2022-08月这是一本教人如何阅读的工具书,旨在让人们做一个有自我要求的读者,增加自己的理解力。书中讲阅读分为如下4个层次,此上4种阅读层次,可以根据不同类型的书和自己的理解,采用不同的层次去阅读(当然你自己具备主题阅读的能力的话)总结及建议:小说类:检视阅读加分析阅读。技术或者实用论文类:主题阅读,可分析不同的资料,对比书中的结果是否准确。书中提供了阅读不同类型的书的方法:好的阅读,也就是主动的阅读,不只是对阅读本身有用,也不只是对我们的工作或事业有帮助,更能帮助我们的心智保持活力与成

2022-08-05 18:53:01 88

原创 读书笔记 笨办法学python3

类名驼峰法,属性和函数名下划线。用def(define)来定义函数或者方法,self用来代替类对象当前指针,区分变量是局部还是对象属性。在类中x属性默认是public的,_x(一个下划线开头)的表示是protect的,__x(两个下划线开头)的表示是private的。列表可通过数字索引快速访问元素,字典可通过非数字索引查询对应元素。模块module是包含函数和变量的python文件,引入后使用.来访问对应的函数或变量。类和模块差不多,都是组织函数和变量的容器,引入后用..........

2022-08-05 11:57:54 338

原创 并发模式之生产者消费者模式

可以通过将存储的数据使用填充对齐到缓存行(64字节)大小,使得每个缓存行只存一个数据。阻塞队列来做内存缓冲区,但是由于使用了锁和阻塞等待来实现线程间的同步,所以新能不高。类型64位即8字节,补7个加上自己的一个工8个,合计64字节,刚好占一个缓存行大小))就是典型的生产者消费者模式(其中任务是线程),其中内存缓冲区的实现使用的是。而LMAX公司开发了一套无锁实现的高性能生产者消费者模式的框架,叫做。生产者消费者模式是一个经典的多线程设计模式。例子(生产者生成数据,消费者计算数据平方)...

2022-07-28 10:40:05 226

原创 并发模式之单例和不变模式

在并发场景中,不变对象是不需要同步操作的。(因为对象不会改变,所以多个线程访问不会出现不一致问题)在多种写法中,推荐使用静态内部类方式,利用类加载一次特性确保只有一个实例(线程安全),JDK中所有的元数据类、包装类都是使用不变模式实现的。单例模式是为了确保系统中某个类只存在一个实例。同时具备无锁和懒创建优点。...

2022-07-28 10:37:46 62

原创 Java的线程实现

当我们追踪Java线程的实现时,可以发现Thread类的start方法最后会运行一个start0方法,而这个方法是native的,也就是交由JDK来实现的(JDK会屏蔽调底层操作系统的差异,提供给Java开发者一套通用的线程接口)线程的主要实现方式有3种(线程模型),分别是使用内核线程实现、使用用户线程实现和使用用户线程加轻量级进程混合实现。用户线程的创建、同步、销毁及调度完全是在用户态中完成,不需要切换到内核态,因此操作是快速且低消耗的。而要搞清楚这个问题的答案,首页我们得对线程的实现有一定的了解。...

2022-07-20 22:22:40 252

原创 Java多线程同步控制

重入锁可以允许一个线程连续2次获取同一把锁,当然解锁也需要解锁2次。(关键字synchronized也是重入锁)

2022-07-17 17:11:19 177

原创 并行程序基础

了解并行基础如程序、进程和线程定义及关系线程生命周期Java内线程的常用API

2022-07-11 11:56:15 191

原创 线程池入门到精通

复用创建好的线程,节约创建和销毁的时间。需要使用线程时,就从池子里拿一个空闲的线程,完成工作后,归还线程给线程池。

2022-07-11 11:46:50 100

原创 走入并行的世界

带你进入并行的世界

2022-07-01 11:16:49 95

原创 Java本地方法调用

引子Class.forName("com.msql.jdbc.Driver");我们在加载mysql的jdbc驱动时,会主动加载对应的驱动类,然后使用DriverManager来获取连接操作数据库。跟进forName的实现会发现是调用的native方法来实现的,也就是JNI(java native interface)Java本地接口。/** Called after security check for system loader access checks have been made. */

2022-05-24 23:23:07 851

原创 Spring Cloud的链路监控之Zipkin

zipkin简介Zipkin是Twitter开源的分布式跟踪系统,基于Dapper的论文设计而来。它的主要功能是收集系统的时序数据,从而追踪微服务架构的系统延时等问题。官网:http://zipkin.io/ZipKin Server搭建使用https://search.maven.org/remote_content?g=io.zipkin.java&a=zipkin-server&v=LATEST&c=exec下载最新版本的Zipkin Server,例如zipkin

2022-01-22 14:07:05 368

原创 Spring Cloud的链路监控之Sleuth

前言如果微服务调用出错了,如果快速定位问题呢?Spring Cloud提供Sleuth来实现调用链监控。Sleuth基础概念(1) Span(跨度):基本工作单元。span用一个64位的id唯一标识。除ID外,span还包含其他数据,例如描述、时间戳事件、键值对的注解(标签),span ID、span父ID等。span被启动和停止时,记录了时间信息。初始化span被称为“root span”,该span的id和trace的id相等。(2) Trace(跟踪):一组共享“root span”的

2022-01-22 14:03:43 307

hyperic-sigar-1.6.4

https://crmepham.github.io/download-and-install-sigar/

2022-12-18

ibm-semeru-open-jdk_x64_mac_11.0.16_8_openj9-0.33.0.tar.gz

ibm open j9的虚拟机包(mac os x64)

2022-08-19

html5俄罗斯方块网页版

可以直接玩的html5版的网页版俄罗斯方块小游戏

2013-04-04

java项目多合一

用java写的小项目 坦克大战 满汉楼餐饮管理系统 用户管理系统 三寨版QQ

2012-10-31

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除