`
文章列表
  今天在学习郑雨迪老师的《深入拆解 Java 虚拟机》课程,了解Java编译器在一些特殊情况下,会自动创建桥接方法,特在此实践记录一下。   bridge方法是由Java编译器自动生成的,所以在源代码中无法找到bridge关键字。那么在什么情况下,Java编译器会生成bridge方法呢?   1、防止编译出错:以具体类型继承自一个泛型类,同时被继承的泛型类包含了泛型方法   abstract class A<T> { public abstract T method1(T arg); public abstract T method2(); ...
操作系统:CentOS 7   防火墙(firewalld)相关 启动防火墙: systemctl start firewalld 关闭防火墙:systemctl stop firewalld 查看状态:systemctl status firewalld 开机启用:systemctl enable firewalld 禁止开机启用:systemctl disable firewalld 开放端口:firewall-cmd --zone=public --add-port=80/tcp --permanent (permanent 表示永久生效) 重新载入:firewal ...
在程序运行时出现这个错误,为了避免以后再次遇到,在此记录一下。   Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration prop ...
环境:Windows10 Java版本:1.8   栈上分配是Java虚拟机提供的一种优化技术,基本思想是对于那些线程私有的对象(指的是不可能被其他线程访问的对象),可以将它们直接分配在栈上,而不是分配在堆上。分配在栈上的好处:可以在函数调用结束后自行销毁,而不需要垃圾回收器的介入,减轻GC压力,从而提升系统的性能。   使用场景:对于大量的零散小对象,栈上分配提供了一种很好的对象分配策略,栈上分配的速度快,并且可以有效地避免垃圾回收带来的负面的影响,但由于和堆空间相比,栈空间比较小,因此对于大对象无法也不适合在栈上进行分配。   /** * @author: Chaser ...

JVM垃圾回收算法

    博客分类:
  • Java
1. 概述 GC最基础的算法有三种:标记-清除、复制算法、标记-压缩。由于堆分为新生代和老年代,所以我们常用的垃圾回收器一般都采用分代收集算法。   标记-清除:如它的名字一样,算法分为“标记”和“清除”两个阶段,首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。 复制算法:将可用内存按容量划分为大小相等的两块,每次只使用其中一块内存。当这一块内存用完时,就将还存活的对象复制到另外一块内存中,然后再把已使用过的内存空间一次清理掉。 标记-压缩:标记过程与“标记-清除”一样,但后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,然后直接清理掉 ...

JVM基本结构

    博客分类:
  • Java
Java在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途、创建和销毁的时间,有一些是随虚拟机的启动而创建,随虚拟机的退出而销毁,有些则是与线程一一对应,随线程的开始和结束而创建和销毁。   Java虚拟机运行时包含以下几个运行时数据区:   程序计数器 程序计数器是线程私有的,在线程创建时创建。可以看作是当前线程所执行的字节码的行号指示器(指向下一条需要执行的字节码指令)。   Java虚拟机栈 Java虚拟机栈是线程私有的,随线程的开始和结束而创建和销毁。Java虚拟机栈描述的是 Java方法执行的内存模型:每个方法在执行的同时 ...

常用JVM配置参数

    博客分类:
  • Java
详细信息参考:Oracle官方文档 环境信息:Windows10 JDK:1.8   Trace跟踪参数   public class Test { public static void main(String[] args) { byte[] bytes = null; for (int i = 0; i < 10; i++) { bytes = new byte[1 * 1024 * 1024]; } } }      以上述代码为例,展示各个参数结果。   ...
1. 背景介绍 实际开发中,存在着下面这些场景: 滴滴打车订单完成后,如果用户一直不评价,48小时后自动五星好评 在电商系统中,一个用户下单之后通常有30分钟的时间进行支付,如果30分钟之内没有支付成功,则这个订 ...
需要依赖的jar包   /* RabbitMQ of Gradle */ compile("com.rabbitmq:amqp-client:5.1.2") compile("org.springframework.amqp:spring-rabbit:2.0.1.RELEASE") /* RabbitMQ of Maven*/ <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</art ...

IDEA常用插件

Alibaba Java Coding Guidelines 阿里编码规约插件,下载地址:http://plugins.jetbrains.com/plugin/10046-alibaba-java-coding-guidelines CodeGlance 它的作用是把代码小地图嵌入到编辑窗口,下载地址:http://plugins.jetbrains.com/plugin/7275-codeglance FindBugs-IDEA 静态代码检查工具,下载地址:http://plugins.jetbrains.com/plugin/3847-findbugs-idea ...
ThreadLocal实现原理  ThreadLocal的实现是这样的:每个Thread 维护一个 ThreadLocalMap 映射表,这个映射表的 key 是 ThreadLocal 实例本身,value 是真正需要存储的 Object。也就是说 ThreadLocal 本身并不存储值,它只是作为一个 key 来让线程从 ThreadLocalMap 获取 value。值得注意的是图中的虚线,表示 ThreadLocalMap 是使用 ThreadLocal 的弱引用作为 Key 的,弱引用的对象在 GC 时会被回收。   ThreadLocal为什么会内存泄漏 ThreadLoc ...

ThreadLocal工作原理

    博客分类:
  • Java
概述    翻译过来的大概意思是:ThreadLocal类用来提供线程内部的局部变量。这些变量在多线程环境下访问 (通过get或set方法访问)时能保证各个线程里的变量相对独立于其他线程内的变量。   总结:ThreadLocal不是为了解决 ...
乐观锁 vs 悲观锁 乐观锁  总是认为不会产生并发问题,因此并不会上锁,但是在更新时会判断其他线程在这之前有没有对数据进行修改,一般会使用版本号机制或CAS操作实现。 悲观锁 总是假设最坏的情况,每次取数据时都认为其他线程会修改,所以都会加锁(读锁、写锁等),当其他线程想要访问数据时,都需要阻塞挂起。   Java线程阻塞的代价 Java的线程是映射到操作系统原生线程之上的,如果要阻塞或唤醒一个线程就需要操作系统的接入,需要在用户态与内核态之间切换。这种切换会消耗大量的系统资源,因为用户态与内核态都有各自专用的内存空间、寄存器等,用户态切换至内核态需要传递需要变量、参数给内核 ...

Java类加载机制

    博客分类:
  • Java
  类加载过程 类加载过程包含了加载、验证、准备、解析、初始化五个阶段。其中加载、验证、准备、初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持Java语言的运行时绑定(也称为动态绑定或晚期绑定)。需要注意的是,这几个阶段是按顺序开始,而不是按顺序进行或完成,因为这些阶段通常都是互相交叉地混合进行的,通常在一个阶段执行的过程中调用或激活另一个阶段。   1. 加载  加载是类加载过程的第一个阶段,JVM需要完成以下几件事情:   通过一个类的全限定名来获取二进制字节流 将二进制字节流所代表的的静态存储结构转化为方法区 ...
转自:不停机分库分表迁移,作者:阿飞Javaer   需求说明 类似订单表这种规模上亿,未来甚至上十亿百亿的海量数据表,在项目初期为了快速上线,一般只是单表设计,不需要考虑分库分表。随着业务的发展,单表容量超过千万甚至达到亿级别以上,这时候就需要考虑分库分表这个问题了,而不停机分库分表迁移,这应该是分库分表最基本的需求,毕竟互联网项目不可能挂个广告牌"今晚10:00~次日10:00系统停机维护",这得多low呀,以后跳槽面试,你跟面试官说这个迁移方案,面试官怎么想呀? 借鉴codis 笔者正好曾经碰到过这个问题,并借鉴了codis一些思想实现了不 ...
Global site tag (gtag.js) - Google Analytics