JAVA相关技术
致力于JAVA相关技术的攥写
朱小厮
你知道的越多 你不知道的也就越多
展开
-
多线程小抄集(新编四)
ConcurrentHashMapConcurrentHashMap是线程安全的HashMap,键值都不能为null。JDK7的实现:内部采用分段锁来实现,默认初始容量为16(所以理论上这个时候最多可以同时支持 16 个线程并发写,只要它们的操作分别分布在不同的 Segment 上。这个值可以在初始化的时候设置为其他值,但是一旦初始化以后,它是不可以扩容的),装载因子为0.75f,分段16,每...原创 2019-01-03 15:16:29 · 1228 阅读 · 1 评论 -
多线程小抄集(新编三)
终止正在运行的线程的三种方法使用退出标志,是线程正常退出,也就是当run方法完成后线程终止;使用stop方法强行终止线程,但是不推荐使用这个方法,因为stop和suspend及resume一样都是作废过期的方法,使用它们可能产生不可预料的结果;使用interrupt()方法中断线程;线程中断interrupted()方法:返回对应线程的中断标志位是否为true,但它还有一个重要的副作用,...原创 2019-01-03 15:11:58 · 899 阅读 · 0 评论 -
多线程小抄集(新编二)
ThreadLocalThreadLocal可以实现每个线程绑定自己的值,即每个线程有各自独立的副本而互相不受影响。一共有四个方法:get, set, remove, initialValue。可以重写initialValue()方法来为ThreadLocal赋初值。SimpleDateFormat不是线程安全的,可以通过如下的方式让每个线程单独拥有这个对象:private static fi...原创 2019-01-03 15:06:48 · 926 阅读 · 0 评论 -
多线程小抄集(新编一)
Java中线程的状态NEW、RUNNABLE(RUNNING or READY)、BLOCKED、WAITING、TIME_WAITING、TERMINATEDJava将操作系统中的运行和就绪两个状态合并称为运行状态。阻塞状态是线程阻塞在进入synchronized关键字修饰的方法或代码块(获取锁)时的状态,但是阻塞在JUC包中Lock接口的线程状态却是等待状态,因为JUC中Lock接口对于...原创 2018-12-29 16:43:00 · 1610 阅读 · 0 评论 -
不止JDK7的HashMap,JDK8的ConcurrentHashMap也会造成CPU 100%
大家可能都听过JDK7中的HashMap在多线程环境下可能造成CPU 100%的现象,这个由于在扩容的时候put时产生了死链,由此会在get时造成了CPU 100%。这个问题在JDK8中的HashMap获得了解决。其实JDK7中的HashMap在多线程环境下不止只有CPU 100%这一共怪异现象,它还可能造成插入的数据丢失,有兴趣的读者可以自行了解下。对于HashMap多线程的问题,我们通常会这...原创 2018-12-09 09:36:16 · 2058 阅读 · 2 评论 -
sun.misc.Unsafe操作手册
Java是一个安全的开发工具,它阻止开发人员犯很多低级的错误,而大部份的错误都是基于内存管理方面的。如果你想搞破坏,可以使用Unsafe这个类。这个类是属于sun.* API中的类,并且它不是J2SE中真正的一部份,因此你可能找不到任何的官方文档,更可悲的是,它也没有比较好的代码文档。实例化sun.misc.Unsafe如果你尝试创建Unsafe类的实例,基于以下两种原因是不被允许的:Un...原创 2018-11-15 23:58:12 · 4426 阅读 · 1 评论 -
关注公众号+加微信群,和大家一起畅聊技术
加微信公众号,进入群聊。原创 2018-09-15 09:31:07 · 6773 阅读 · 19 评论 -
Scala与Java集合互转摘要
在上一篇文章《再看Kafka Lag》中笔者提及了Scala与Java集合互转的内容,但是并未有详述,本文对此做一个补充说明,方便在使用的时候可以随时翻阅。对于集合而言,Scala从2.8.1开始引入scala.collection.JavaConverters用于Scala与Java集合的互转。在scala代码中如果需要集合转换,首先引入scala.collection.JavaConver...原创 2018-04-23 22:24:08 · 2702 阅读 · 0 评论 -
提升你的代码——Lambda!
前言上个月(2018年2月)看过一份调研报告,对于Java版本而言,生产环境中用的最多的是JDk6和JDK7,虽然JDK8在自2014年3月发布至今使用占比仍然很小,想想月底JDK10都要出来了呀。JDk8引入了很多新的特性,比如接口默认值、方法引用、Lambda表达式、函数式接口、Optional、Stream等等,这些在其他语言中并不少见的玩意儿,现今在Java中却还很少使用,很多时候我们...原创 2018-03-11 11:21:05 · 2402 阅读 · 3 评论 -
浅析ProcessBuilder
概述ProcessBuilder类是J2SE 1.5在java.lang中新添加的一个新类,此类用于创建操作系统进程,它提供一种启动和管理进程(也就是应用程序)的方法。在J2SE 1.5之前,都是由Process类处理实现进程的控制管理。每个 ProcessBuilder 实例管理一个进程属性集。它的start() 方法利用这些属性创建一个新的 Process 实例。start() 方法可以从...原创 2017-01-18 19:14:05 · 56014 阅读 · 5 评论 -
从零开始玩转JMX(四)——Apache Commons Modeler & Dynamic MBean
Apache Commons Modeler前面的Model MBean的创建方式看上去特别复杂,一个简单功能的类ModelMBeanUtils 写了很多代码,那有木有简单点的方式呢,答案是肯定的,这里就引出了Apache Commons Modeler(使用这个需要在classpath中导入commons-modeler-2.0.1.jar以及modeler的依赖项目commons-logg...原创 2016-10-17 17:06:12 · 6323 阅读 · 1 评论 -
从零开始玩转JMX(三)——Model MBean
Model MBean相对于Standard MBean,Model MBean更加灵活。如果我们不能修改已有的Java类,那么使用Model MBean是不错的选择。Model MBean也是一种专门化的动态管理构件。它是预制的、通用的和动态的 MBean 类,已经包含了所有必要缺省行为的实现,并允许在运行时添加或覆盖需要定制的那些实现。JMX规范规定该类必须实现为javax.manag...原创 2016-10-14 16:53:12 · 4972 阅读 · 0 评论 -
从零开始玩转JMX(二)——Condition
Notification一个MBean提供的管理接口允许代理对其管理资源进行控制和配置。然而,对管理复杂的分布式系统来说,这些接口知识提供了一部分功能。通常,管理应用程序需要对状态变化或者当特别情况发生变化时作出反映。Notification起到了MBean之间的沟通桥梁的作用。JMX Notification模型和Java Event模型类似,将一些重要的信息,状态的转变,数据的变更传递给N...原创 2016-10-13 17:09:11 · 4415 阅读 · 3 评论 -
从零开始玩转JMX(一)——简介和Standard MBean
JMX的全称为Java Management Extensions. 顾名思义,是管理Java的一种扩展。这种机制可以方便的管理、监控正在运行中的Java程序。常用于管理线程,内存,日志Level,服务重启,系统环境等。简介基本术语MBean:是Managed Bean的简称,可以翻译为“管理构件”。在JMX中MBean代表一个被管理的资源实例,通过MBean中暴露的方法和属...原创 2016-10-12 21:13:10 · 65908 阅读 · 12 评论 -
从零开始玩转logback
概述LogBack是一个日志框架,它与Log4j可以说是同出一源,都出自Ceki Gülcü之手。(log4j的原型是早前由Ceki Gülcü贡献给Apache基金会的)下载地址:http://logback.qos.ch/download.htmlLogBack、Slf4j和Log4j之间的关系Slf4j是The Simple Logging Facade for Java的简...原创 2016-10-08 11:49:02 · 4926 阅读 · 2 评论 -
JSch基本使用
JSch 是SSH2的一个纯Java实现。它允许你连接到一个sshd 服务器,使用端口转发,X11转发,文件传输等等。你可以将它的功能集成到你自己的 程序中。同时该项目也提供一个J2ME版本用来在手机上直连SSHD服务器。官网:http://www.jcraft.com/jsch/中有很多例子http://www.jcraft.com/jsch/examples/,这里先采用(已做修改)其中2...原创 2016-09-29 14:23:00 · 44347 阅读 · 13 评论 -
聊一聊ThreadLocal
对于ThreadLocal感兴趣是从一个问题开始的:ThreadLocal在何种情况下会发生内存泄露?对于这个问题的思考不得不去了解ThreadLocal本身的实现以及一些细节问题等。接下去依次介绍ThreadLocal的功能,实现细节,使用场景以及一些使用建议。概述ThreadLocal不是用来解决对象共享访问问题的,而主要提供了线程保持对象的方法和避免参数传递的方便的对象访问方式。一般情况下,通原创 2016-06-28 16:19:07 · 7101 阅读 · 9 评论 -
Java多线程知识小抄集(四)——完结
本文主要整理博主遇到的Java多线程的相关知识点,适合速记,故命名为“小抄集”。本文没有特别重点,每一项针对一个多线程知识做一个概要性总结,也有一些会带一点例子,习题方便理解和记忆。更多内容可以查阅: Java多线程知识小抄集(一) Java多线程知识小抄集(二) Java多线程知识小抄集(三)68. 如何避免死锁死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,原创 2016-05-28 14:39:38 · 3559 阅读 · 3 评论 -
Java内存模型
Question:在并发编程中,多个线程之间采取什么机制进行通信(信息交换),什么机制进行数据的同步? Answer:在Java语言中,采用的是共享内存模型来实现多线程之间的信息交换和数据同步的。 线程之间通过共享程序公共的状态,通过读-写内存中公共状态的方式来进行隐式的通信。同步指的是程序在控制多个线程之间执行程序的相对顺序的机制,在共享内存模型中,同步是显式的,程序员必须显式指定某个方法/代原创 2016-05-26 21:40:03 · 7792 阅读 · 1 评论 -
Java虚拟机结构分析
本博文主要介绍了JVM(Java Virtual Machine)的组成部分以及它们内部的工作机制和原理。之前整理过一篇《浅析Java虚拟机和Java内存模型》,写的比较乱,现在重新整理一下。需要注意的是,虽然平时我们用的大多是Sun(现已被Oracle收购)JDK提供的JVM,但是JVM本身是一个规范,所以可以有多种实现,除了Hotspot外,还有诸如Oracle的JRockit、IBM的J9也都原创 2016-05-23 19:12:12 · 14781 阅读 · 3 评论 -
攻破JAVA NIO技术壁垒
现在使用NIO的场景越来越多,很多网上的技术框架或多或少的使用NIO技术,譬如Tomcat,Jetty。学习和掌握NIO技术已经不是一个JAVA攻城狮的加分技能,而是一个必备技能。再者,现在互联网的面试中上点level的都会涉及一下NIO或者AIO的问题(AIO下次再讲述,本篇主要讲述NIO),掌握好NIO也能帮助你获得一份较好的offer。 驱使博主写这篇文章的关键是网上关于NIO的文章并不是很...原创 2016-05-19 21:25:57 · 32976 阅读 · 25 评论 -
JAVA拾遗录
本系列博文主要收录Java中一些常见的但是平常又容易忘记、记错或者记混的知识点的集合。各个知识点之间没有必然的联系,可以随意跳着看,希望能够对各位同学有所帮助。 本博文持续更新、修改,转载请保留原文链接。1. JAVA堆和栈的区别堆和栈都是内存的一部分,有着不同的作用,而且一个程序需要在这片区域上分配内存。众所周知,所有的JAVA程序都运行在JVM上,这里所说的自然是JVM中的堆和栈。最主要的区别原创 2016-05-17 16:38:41 · 7681 阅读 · 1 评论 -
Spring知识点提炼
1. Spring框架的作用轻量:Spring是轻量级的,基本的版本大小为2MB控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。面向切面的编程AOP:Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。容器:Spring包含并管理应用中对象的生命周期和配置MVC框架: Spring-MVC事务管理:Spring提供原创 2016-05-12 17:52:22 · 25182 阅读 · 6 评论 -
Java多线程知识小抄集(三)
本文主要整理博主遇到的Java多线程的相关知识点,适合速记,故命名为“小抄集”。本文没有特别重点,每一项针对一个多线程知识做一个概要性总结,也有一些会带一点例子,习题方便理解和记忆。51. SimpleDateFormat非线程安全当多个线程共享一个SimpleDateFormat实例的时候,就会出现难以预料的异常。 主要原因是parse()方法使用calendar来生成返回的Date实例,而每次p原创 2016-05-10 15:30:07 · 6886 阅读 · 0 评论 -
Java多线程知识小抄集(二)
本文主要整理博主遇到的Java多线程的相关知识点,适合速记,故命名为“小抄集”。本文没有特别重点,每一项针对一个多线程知识做一个概要性总结,也有一些会带一点例子,习题方便理解和记忆。27. ConcurrentHashMapConcurrentHashMap是线程安全的HashMap,内部采用分段锁来实现,默认初始容量为16,装载因子为0.75f,分段16,每个段的HashEntry&...原创 2016-05-05 18:32:49 · 13606 阅读 · 0 评论 -
Java多线程知识小抄集(一)
本文主要整理博主遇到的Java多线程的相关知识点,适合速记,故命名为“小抄集”。本文没有特别重点,每一项针对一个多线程知识做一个概要性总结,也有一些会带一点例子,习题方便理解和记忆。1. interrupted与isInterrupted的区别interrupted():测试当前线程是否已经是中断状态,执行后具有状态标志清除为false的功能。 isInterrupted():测试线原创 2016-05-05 18:23:03 · 18422 阅读 · 9 评论 -
Java中的锁
在学习或者使用Java的过程中进程会遇到各种各样的锁的概念:公平锁、非公平锁、自旋锁、可重入锁、偏向锁、轻量级锁、重量级锁、读写锁、互斥锁等待。这里整理了Java中的各种锁,若有不足之处希望大家在下方留言探讨。WARNING:本文适合有一定JAVA基础的同学阅读。公平锁和非公平锁公平锁是指多个线程在等待同一个锁时,必须按照申请锁的先后顺序来一次获得锁。公平锁的好处是等待锁的线程...原创 2016-04-20 21:38:47 · 36888 阅读 · 14 评论 -
Sping+ActiveMQ整合
通过前一篇《ActiveMQ简述》大概对ActiveMQ有了一个大概的认识,本篇所阐述的是如何通过Spring继承ActiveMQ进而更有效、更灵活的运用ActiveMQ.Spring和ActiveMQ整合需要在项目中包含以下这几个jar包(缺一不可):activeio-core-3.1.4.jar,activemq-all-5.13.2.jar,activemq-pool-5.13.2.jar,c原创 2016-04-18 16:19:35 · 12809 阅读 · 8 评论 -
Java对象大小内幕浅析
最近突发奇想,忽然对Java对象的内存大小感兴趣,去网上搜集了一些资料,并且做一下整理,希望能够各位帮助。 如果:你能算出new String(“abc”)这个对象在JVM中占用内存大小(64位JDK7中压缩大小48B,未压缩大小64B), 那么看到这里就可以结束了~ Java对象的内存布局:对象头(Header),实例数据(Instance Data)和对齐填充(Padding)。 虚拟机原创 2016-03-29 18:59:00 · 15532 阅读 · 10 评论 -
Java类加载器(二)——自定义类加载器
用户定制自己的ClassLoader可以实现以下的一些应用:自定义路径下查找自定义的class类文件,也许我们需要的class文件并不总是在已经设置好的Classpath下面,那么我们必须向办法来找到这个类,在这种清理下我们需要自己实现一个ClassLoader。确保安全性:Java自己吗很容易被反编译,对我们自己的要加载的类做特殊处理,如保证通过网络传输的类的安全性,可以将类经过加密后再传输,原创 2016-03-08 19:09:57 · 4897 阅读 · 3 评论 -
Java类加载器(一)——类加载器层次与模型
类加载器虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。类加载器层次(等级)从JVM的角度来讲,只存在两种不同的类加载器。 第一类是启动类加载器(Bootstrap ClassLoader):这个类加载器主要加载JVM自身工作需要的类。这个类加原创 2016-03-08 19:03:05 · 4941 阅读 · 5 评论 -
Java虚拟机类加载机制
看到这个题目,很多人会觉得我写我的java代码,至于类,JVM爱怎么加载就怎么加载,博主有很长一段时间也是这么认为的。随着编程经验的日积月累,越来越感觉到了解虚拟机相关要领的重要性。闲话不多说,老规矩,先来一段代码吊吊胃口。public class SSClass{ static { System.out.println("SSClass"); }原创 2016-03-08 18:52:08 · 20098 阅读 · 33 评论 -
Javac编译过程
Javac编译过程大致分为4个过程,分别是:词法分析语法分析语义分析代码生成词法分析 词法分析是将源代码的字符流转变为标记(Token)集合,单个字符是程序编写过程的最小元素,而标记则是编译过程的最小元素,关键字、变量名、字面量、运算符都可以成为编辑,如“int a+b=2”这句代码中包含了6个标记,分别是int、a、=、b、+、2,虽然关键字int由三个字符构成,但是原创 2016-03-04 17:50:02 · 7885 阅读 · 1 评论 -
Java自动装箱与拆箱
自动装箱与拆箱机制在实际使用中非常常见,不过也特别容易出错,博主在面对下面一道题的时候自信满满,可还是没有能够全对,所以写下这篇博文,给自己对自动装箱与拆箱机制做一下知识巩固,也给各位朋友做一下参考。 首先有这样一道题,给出下面代码的输出结果:public class AutoBoxing{ public static void main(String[] args) {原创 2016-03-04 13:47:48 · 2452 阅读 · 2 评论 -
通过Java反编译揭开一些问题的真相
博主在上一篇《 Java语法糖之foreach》中采用反编译的形式进行探讨进而揭开foreach语法糖的真相。进来又遇到几个问题,通过反编译之后才了解了事实的真相,觉得有必要做一下总结,也可以给各位做一下参考。 相信很多朋友刚开始见到反编译后的内容的时候,肯定会吐槽:WTF!其实只要静下心来认真了解下,反编译也不过如此,java字节码的长度为一个字节,顶多256条指令,目前,Java虚拟机规原创 2016-03-02 12:24:47 · 13067 阅读 · 1 评论 -
垃圾收集器与内存分配策略
虚拟机如何判断对象是否存活?1.引用计数算法 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。 考虑一种情形:对象objA和objB都有字段instance,赋值令objA.instance=objB和objB.instance=objA;除此之外,这两个对象再无任何引用,实际上这两个对象以及不原创 2016-02-29 19:01:53 · 2571 阅读 · 0 评论 -
Java堆内存
Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象。 在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。 这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及回收。原创 2016-02-29 12:05:10 · 16416 阅读 · 15 评论 -
Java语法糖之foreach
语法糖是一种几乎每种语言或多或少都提供过的一些方便程序员开发代码的语法,它只是编译器实现的一些小把戏罢了,编译期间以特定的字节码或者特定的方式对这些语法做一些处理,开发者就可以直接方便地使用了。这些语法糖虽然不会提供实质性的功能改进,但是它们或能提高性能、或能提升语法的严谨性、或能减少编码出错的机会。Java提供给了用户大量的语法糖,比如泛型、自动装箱、自动拆箱、foreach循环、变长参数、内部类原创 2016-02-25 11:39:38 · 15366 阅读 · 4 评论 -
浅析若干Java序列化工具
在java中socket传输数据时,数据类型往往比较难选择。可能要考虑带宽、跨语言、版本的兼容等问题。比较常见的做法有:采用java对象的序列化和反序列化把对象包装成JSON字符串传输Google工具protoBuf的开源 本文章所需要的序列化jar包都可以下载:http://download.csdn.net/detail/u013256816/9439971。 为了便于说明各个做法的原创 2016-02-23 10:48:40 · 11068 阅读 · 5 评论 -
Java判断类和实例的关系
通常我们使用instanceOf关键字来判断一个对象是否是类的实例,最近博主看到isInstance关键字,不解与instanceOf的区别,故度娘了一下,顺便涨了一下姿势。 Java中判断类和实例的关系有3个关键字:instanceof, isInstance以及isAssignableFrom. instanceof:用来判断对象是否是类的实例 isInstance:用...原创 2016-02-17 18:33:17 · 8561 阅读 · 5 评论