
java
zkp_java
这个作者很懒,什么都没留下…
展开
-
Java中通过DOM方式提取出XML文档中的内容
package com.my.xml.dom;import java.io.File;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.Element;impo原创 2014-04-15 21:12:53 · 651 阅读 · 0 评论 -
[JVM] 类的加载一:Java类的生命周期及类的主动使用和被动使用
Java中类的生命周期Java虚拟机通过加载、连接和初始化三个过程来使得一个Java类型可以被Java程序所使用,使用完后可以卸载掉该类。因此一个Java类的生命周期中包含如下几个阶段:加载类的加载是指将类的class文件中的二进制数据读入到内存中,并将其放在运行时数据区的方法区内,然后在内存中创建一个与之对应的java.lang.Class对象(规范并未说明Class对象位于哪里...原创 2018-04-21 15:40:08 · 231 阅读 · 0 评论 -
[java8] Stream流
基本概念Java8中流是指一个支持串行或并行聚合操作的元素序列。一个流由三部分组成:数据源:可能是一个数组、集合、生成器函数或者IO通道0个或者多个中间操作:将一个stream转换为另一个stream1个终止操作:用于产生最终结果(Stream.count())或副作用(Stream.forEach(Consumer))流是lazy的,只有遇到终止操作的时候中间操作才会执行,数...原创 2018-05-03 23:35:33 · 146 阅读 · 0 评论 -
[JVM] class字节码文件结构分析
参考文档Chapter 4. The class File Formatclass字节码文件结构组成总体结构java源文件经java编译器编译后生成的class文件整体结构如下图所示: magic: 魔数,4个字节,为固定值0xCAFEBABE。jvm在加载class文件时,首先检查该class文件的前四个字节是否为0xCAFEBABE,若不是则jvm认为该文件不是java...原创 2018-08-12 14:07:19 · 699 阅读 · 0 评论 -
[NIO和Netty] NIO和Netty系列(二): Java Reference详解
在分析DirectByteBuffer源码时发现使用到了java.lang.ref.Cleaner类,该类就是一个Reference,因此这里对Java中的Reference做个小结。Reference系列的类定义在java.lang.ref包下:...原创 2018-12-25 00:14:08 · 494 阅读 · 0 评论 -
NIO和Netty系列(三): 堆外内存与零拷贝详解
在之前的文章中我们了解到NIO中堆外内存的实现类是java.nio.DirectByteBuffer和java.nio.MappedByteBuffer。本文中我们也通过这两个类来分析NIO中堆外内存的实现。如何从Java code获取堆外内存我们都知道Java code是运行在JVM进程所管理的内存上的,而堆外内存是JVM进程所管控的内存之外的,那么如何从Java代码中获取对外内存呢?在Ja...原创 2018-12-31 19:22:30 · 630 阅读 · 0 评论 -
[NIO与Netty] ThreadLocal详解
目录ThreadLocal的基本使用ThreadLocal实现原理ThreadLocal实现了Java中线程局部变量。所谓线程局部变量就是保存在每个线程中独有的一些数据,我们知道一个进程中的所有线程是共享该进程的资源的,线程对进程中的资源进行修改会反应到该进程中的其他线程上,如果我们希望一个线程对资源的修改不会影响到其他线程,那么就需要将该资源设为线程局部变量的形式。ThreadLocal的基...原创 2019-01-20 19:32:48 · 1216 阅读 · 0 评论 -
[JUC] AQS共享模式详解
在[JUC] AQS独占模式详解中我们已经结合ReentrantLock分析了AQS独占模式的实现,本文将结合CountDownLatch分析共享模式的实现。场景说明如下图所示,有一个初始值为3的CountDownLatch,线程t1和t2在时间线1调用await等待latch的值变为0,线程t3在时间线2调用countDown()将latch值减1,线程t4在时间线3调用countDown(...原创 2019-02-15 14:50:53 · 782 阅读 · 1 评论 -
[JUC] LockSupport浅析
这里写自定义目录标题wait/notifyLockSupportwait/notify和LockSupport对比LockSupport注意事项参考文献LockSupport是Java6引入的一个工具类,它简单灵活,应用广泛。在没有LockSupport之前,线程的挂起和唤醒咱们都是通过Object的wait和notify/notifyAll方法实现。我们以例子来说明两者之间的区别wait/...原创 2019-02-12 14:37:48 · 399 阅读 · 0 评论 -
[JVM]类加载器(一)
类加载器概述在Java中类加载器是用来把类加载到Java虚拟机中的。从JDK 1.2 版本开始,类的加载过程使用双亲委托机制,这种机制能够更好的保证Java平台的安全。在此委托机制中,除了Java虚拟机自带的2类加载器外,其余加载器都有且只有一个父加载器。当Java程序员请求加载器loader1加载Sample类时,loader1会首先委托自己的父加载器去加载Sample类,若父加载器能加载,...原创 2018-04-22 19:57:43 · 1702 阅读 · 2 评论 -
[JVM] 类的加载二:类加载应用示例分析
示例一代码清单如下所示代码和对应的输出结果public class MyTest6 { public static void main(String[] args) { Singleton instance = Singleton.getInstance(); System.out.println("counter1: " + Sing...原创 2018-04-21 23:53:42 · 168 阅读 · 0 评论 -
schema中声明元素的几种方法
1、单独定义类型原创 2014-04-15 11:36:09 · 948 阅读 · 0 评论 -
schema中simpleType元素和complexType元素的区别
1、simpleType类型的元素中不能包含子元素和属性原创 2014-04-13 23:18:22 · 3500 阅读 · 0 评论 -
java中多线程的状态图
上图所示为java中具有wait原创 2014-04-09 14:52:40 · 880 阅读 · 0 评论 -
[java8] lambda表达式、函数式接口和方法引用
lambda表达式基本语法 ([参数类型] [参数名称], [参数类型] [参数名称], …) -> {lambda表达式主体}例如 (int a, int b) -> {return a + b;} () -> System.out.println(“Hello World”); (String s) -> {System.ou...原创 2018-03-07 02:46:17 · 384 阅读 · 0 评论 -
[并发] ForkJoin子任务中报异常
submit方式向ForkJoin线程池提交任务,主线程调用get方法等待子线程执行Task,一旦在某一个ForkJoin子线程中抛了异常,并且该子线程没有扑获该异常,主线程会发生什么情况?以前大多数关注的是get方法会抛出TimeOutException,事实上get方法还可能抛出InterruptedException和ExecutionException,那么什么情况下会抛出这两个异常呢...原创 2018-03-10 11:27:50 · 1332 阅读 · 0 评论 -
[leetcode] 535:短域名编码和解码
Description: TinyURL is a URL shortening service where you enter a URL such as https://leetcode.com/problems/design-tinyurl and it returns a short URL such as http://tinyurl.com/4e9iAk. Desig...原创 2018-03-03 10:36:34 · 803 阅读 · 0 评论 -
[leetcode] 654: 构造最大二叉树
DescriptionGiven an integer array with no duplicates. A maximum tree building on this array is defined as follow: The root is the maximum number in the array. The left subtree is the maximu...原创 2018-03-04 14:45:12 · 938 阅读 · 0 评论 -
[JVM] Ubuntu下手动编译调试Openjdk
环境编译环境:Ubuntu 17.10 64位 openjdk版本:openjdk9编译步骤安装下载openjdk源码的工具sudo apt install mercurial下载源码$ hg clone http://hg.openjdk.java.net/jdk9/dev 9dev$ cd 9dev$ sh ./get_source.sh由于国内网...原创 2018-04-15 19:38:06 · 1748 阅读 · 0 评论 -
[JUC] AQS独占模式详解
前言AQS是指java.util.concurrent.locks.AbstractQueuedSynchronizer类,AQS并没有使用类似synchronized这样特殊的关键字,而是通过维护一个先进先出(FIFO)的等待队列和状态变量来实现锁和同步器功能。在JDK11中AbstractQueuedSynchronizer具有如下实现类:可以看到常用的ReentrantLock、Cou...原创 2019-02-13 14:45:15 · 1297 阅读 · 1 评论