JVM垃圾回收

2022-4-12 diaba JVM

怎么定义垃圾 引用计数法 循环引用问题(循环依赖问题) 可达性分析法 GC Roots 虚拟机栈(栈帧中的本地变量表)中应用的对象 方法区中类静态引用的对象 方法区中常量引用的对象 本地方发展中JNI引用的对象 怎么回收垃圾 标记-清除算法 步骤 ...

阅读全文>>

评论(0) 浏览(673)

JUC-Semaphore

2022-3-13 diaba 多线程

package com.jiucaiyuan.net.juc.lock; import java.util.Random; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; /** * 信号灯(许可数量) * 6辆车,3个车位 * @Author jiucaiyuan 2022/3/13 22:57 * @mail services@jiucaiyuan.net */ public class SemaphoreDemo { publ...

阅读全文>>

评论(0) 浏览(660)

JUC-CyclicBarrier

2022-3-13 diaba 多线程

package com.jiucaiyuan.net.juc.lock; import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; /** * 循环栅栏 * 集齐7龙珠召唤神龙 * * @Author jiucaiyuan 2022/3/13 22:48 * @mail services@jiucaiyuan.net */ public class CyclicBarrierDemo { public sta...

阅读全文>>

评论(0) 浏览(636)

JUC-CountDownLatch

2022-3-13 diaba 多线程

package com.jiucaiyuan.net.juc.lock; import java.util.concurrent.CountDownLatch; /** * 演示CountDownLatch * 6个同学陆续离开教室之后,班长才能锁门 * * @Author jiucaiyuan 2022/3/13 22:40 * @mail services@jiucaiyuan.net */ public class CountDownLatchDemo { public static void main(String[] args) ...

阅读全文>>

评论(0) 浏览(604)

java-nio-client聊天室客户端

2022-3-13 diaba IO

package com.jiucaiyuan.net.nio; import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SocketChannel; import java.util.Scanner; /** * @Author jiucaiyuan 2022/3/13 11:04 * @mail services@jiucaiyuan.net */ public class Cl...

阅读全文>>

评论(0) 浏览(664)

java-nio-server聊天室服务端

2022-3-13 diaba IO

package com.jiucaiyuan.net.nio; import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; import ...

阅读全文>>

评论(0) 浏览(694)

开启三个线程打印ABC-synchronized锁和wait,notifyAll

2022-3-8 diaba 多线程

package com.jiucaiyuan.net.thread; /** * * 题目: * 编写程序,开启三个线程,这三个线程的ID分别是A,B,C,每个线程将自己的ID在屏幕上打印十次, * 要求输出结果必须按照ABC的顺序显示,如:ABCABCACB… * * 非指定线程唤醒。采用synchronized锁和wait,notifyAll配合使用。 * 这个方法有一个缺点,那就是notifyAll是唤醒其它两个线程, * 其它两个竞争获取锁会引起上下文切换,从而引起不必要的开销,因此,建议使用方法一。 * * */ class Pri...

阅读全文>>

评论(0) 浏览(645)

【推荐】开启三个线程打印ABC-ReentrantLock+Condition

2022-3-8 diaba 多线程

package com.jiucaiyuan.net.thread; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock; /** * <p> * 题目: * 编写程序,开启三个线程,这三个线程的ID分别是A,B,C,每个线程将自己的ID在屏幕上打印十次, * 要求输出结果必须按照ABC的顺序显示,如:ABCABCABC... * * 指定线程唤醒轮循打印,使用ReentrantLock和Condition。 本...

阅读全文>>

评论(0) 浏览(647)

Java位运算符

2022-3-3 diaba 基础

Java位运算符有: 左移( << ) 右移( >> ) 无符号右移( >>> ) 位与( & ) 位或( | ) 位非( ~ ) 位异或( ^ ) 除了位非( ~ )是一元操作符外,其它的都是二元操作符 交换两个不等的数方法: //交换两个不相等的数,可以使用「位异或」 a=5; b=6; 通过如下代码: a=a^b; b=a^b; a=a^b; 变为: a==6; b==5; 【注意】如果两个数相等,经过如下代码会得到0 由位运算操作符衍生而来的有: ...

阅读全文>>

评论(0) 浏览(610)

常用工具

2022-3-2 diaba 调优命令

demesg可以用来查看开机之后的系统日志,其中可以捕捉到一些系统资源与进程的变化信息。 dmesg dmesg | grep -E 'kill|oom|out of memory' --col top top -Hp pid jps -l 类似linux的 ps -ef 查看进程状态 jstack 进程号 //查看堆栈信息 jstat -gccause 18356 1000 1000 jstat -class 18356 jstat -compiler 18356 jstat -gc 18356 ...

阅读全文>>

评论(0) 浏览(556)

Base64编码与解码

2018-8-28 diaba 基础

final BASE64Encoder encoder = new BASE64Encoder(); final BASE64Decoder decoder = new BASE64Decoder(); final String text = "字串文字"; final byte[] textByte = text.getBytes("UTF-8"); //编码 final String encodedText = encoder.encode(textByte); System.out.println(encodedText); //解码 System.out.println...

阅读全文>>

评论(0) 浏览(2242)

【转】深度解析Java 8:AbstractQueuedSynchronizer的实现分析(下)

2017-3-10 diaba 多线程

前言 经过本系列的上半部分JDK1.8 AbstractQueuedSynchronizer的实现分析(上)的解读,相信很多读者已经对AbstractQueuedSynchronizer(下文简称AQS)的独占功能了然于胸,那么这次我们通过对另一个工具类:CountDownLatch的分析来解读AQS的另外一个功能:共享功能。 AQS共享功能的实现 在开始解读AQS的共享功能前,我们再重温一下CountDownLatch,CountDownLatch为java.util.concurrent包下的计数器工具类,常被用在多线程环境下,它在初始时需要指定一个计数...

阅读全文>>

评论(0) 浏览(2604)

【转】深度解析Java 8:JDK1.8 AbstractQueuedSynchronizer的实现分析(上)

2017-2-21 diaba 多线程

前言 Java中的FutureTask作为可异步执行任务并可获取执行结果而被大家所熟知。通常可以使用future.get()来获取线程的执行结果,在线程执行结束之前,get方法会一直阻塞状态,直到call()返回,其优点是使用线程异步执行任务的情况下还可以获取到线程的执行结果,但是FutureTask的以上功能却是依靠通过一个叫AbstractQueuedSynchronizer的类来实现,至少在JDK 1.5、JDK1.6版本是这样的(从1.7开始FutureTask已经被其作者Doug Lea修改为不再依赖AbstractQueuedSynchronizer实现了,这是...

阅读全文>>

评论(0) 浏览(2265)

【转】从根源上解析 Java volatile 关键字的实现

2017-2-21 diaba 多线程

1、解析概览 内存模型的相关概念 并发编程中的三个概念 Java内存模型 深入剖析Volatile关键字 使用volatile关键字的场景 2、内存模型的相关概念 缓存一致性问题。通常称这种被多个线程访问的变量为共享变量。 也就是说,如果一个变量在多个CPU中都存在缓存(一般在多线程编程时才会出现),那么就可能存在缓存不一致的问题。 为了解决缓存不一致性问题,通...

阅读全文>>

评论(0) 浏览(2230)

【转】JVM原理讲解和调优

2017-2-15 diaba JVM

一、什么是JVM     JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。     Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言...

阅读全文>>

评论(0) 浏览(2748)

Javassist分析、编辑和创建java字节码类库

2016-9-8 diaba Java

Javassist是一个开源的分析、编辑和创建Java字节码的类库。是由东京工业大学的数学和计算机科学系的 Shigeru Chiba (千叶 滋)所创建的。它已加入了开放源代码JBoss 应用服务器项目,通过使用Javassist对字节码操作为JBoss实现动态"AOP"框架。 关于java字节码的处理,目前有很多工具,如bcel,asm。不过这些都需要直接跟虚拟机指令打交道。如果你不想了解虚拟机指令,可以采用javassist。javassist是jboss的一个子项目,其主要的优点,在于简单,而且快速。直接使用java编码的形式,而不需要了解虚拟机指令,就能动态改变类的结构,或者动态生...

阅读全文>>

标签: Javassist

评论(1) 浏览(3149)

Java-监听文件系统增删改

2016-6-28 diaba 基础

JNotify库支持Windows,Linux和MacOS,允许我们监视一个文件夹,当这个文件夹下的文件被增删改时,发起回调通知。 public void addWatcher(String hangqingFolder, String hangqingFile) throws Exception { // watch mask, specify events you care about, // or JNotify.FILE_ANY for all events. int mask = /...

阅读全文>>

标签: 文件监听

评论(0) 浏览(2582)

按位操作的使用场景

2016-4-22 diaba 基础

    此次开发系统过程遇到一个问题,开始用一个字段用来标识是否做某件事儿,系统已经上线,发现需要记录是否的需求增加了2个,那么没有额外的字段,怎么办?     针对此问题,设计了一个方案,利用按位操作符来满足此需求:         该字段原来取值0/1,表示没做/已做         现在设计该字段取值为三位二进制对应的十进制: 二进制(想象...

阅读全文>>

标签: 按位操作

评论(0) 浏览(2157)

AES加密算法在linux下相同输入每次加密结果都不同的问题

2016-3-15 diaba 基础

现象描述: 在 windows 操作系统下加解密正常,但部署到 linux 环境中相同的输入加密结果不正确,并且每次运行返回的结果都不同。 修改后的代码:            KeyGenerator kgen = KeyGenerator.getInstance("AES");            //需手动指定 ...

阅读全文>>

标签: aes

评论(0) 浏览(4349)

JVM内存区域的划分

2016-1-20 diaba Java

    java程序通过JVM(java虚拟机)来执行的,JVM包含:加载字节码的Class Loader、执行java程序的执行引擎、存储程序执行过程中用到的数据和相关信息的运行时数据区。     平时说的java内存管理就是对运行时数据区的管理,包含分配和回收内存空间。下面详细说明运行时数据区的区域划分。     运行时数据区包含:程序计数器、方法区、java堆、java栈、本地方法栈。     1.程序计数器 程序计数器(Pr...

阅读全文>>

标签: jvm结构

评论(0) 浏览(2055)

Powered by emlog 京ICP备15045175号-1 Copyright © 2022