![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 80
HoiDev
这个作者很懒,什么都没留下…
展开
-
Java线程同步方法
Java线程同步方法java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),数据可能不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前(被释放),被其他线程的调用,从而保证了该变量的唯一性和准确性。同步方法: synchronized关键字修饰java的每个对象都有一个内置锁,用该关键字修饰方法时,内置锁会保护整个方法。调用该方法前,需要获得内置转载 2016-03-18 16:24:09 · 351 阅读 · 0 评论 -
JVM之Java类的加载
JVM和類調用java命令運行某個java程序時,該命令會啟動一個java虛擬機進程,這個JVM進程可以有多個綫程。同一個JVM的所有綫程、所有變量都處於同一個進程裏,它們都使用該JVM進程的內存區。以下狀況,JVM進程被終止: - 1. 程序運行到最後,正常結束 - 2. 程序運行到使用System.exit()或Runtime.getRuntime().exit()代碼處,結束程序 - 3原创 2016-08-07 16:08:57 · 291 阅读 · 0 评论 -
JVM之GC收集器
垃圾收集器Serial收集器Serial Old收集器ParNew收集器Parallel Scanvenge收集器Parallel Old收集器CMSConcurrent Mark SweepG1收集器GC收集器的选择吞吐量优先的并行收集器响应时间优先的并发收集器垃圾收集器串行收集器 Serial开头的 SerialSerial Old(MSC)并行收集器 Paralle原创 2016-09-11 10:02:22 · 2085 阅读 · 0 评论 -
JVM之类文件结构
Class类文件的结构魔数Magic Number与Class文件的版本Version常量池Constant Pool访问标志Access Flags类索引父类索引与接口索引集合This ClassSuper Class Interfaces字段表集合Fields方法表集合Methods属性表集合Attributes字节码指令加载和存储指令运算指令对象创建与访问指令操作数栈管原创 2016-09-17 11:42:51 · 316 阅读 · 0 评论 -
JVM之执行引擎
运行时栈帧结构方法调用动态语言支持字节码解释执行引擎虚拟机是如何执行方法里面的字节码指令的基于栈的指令集和基于寄存器的指令集编译优化技术Javac编译过程分为哪些步骤即时编译器JIT热点代码优化技术类型代表性优化技术公共子表达式消除数组边界检查消除方法内联逃逸分析Java与CC编译器Execution Engine是虚拟机的核心组成之一虚拟机和物理机的区别是什么?这两原创 2016-09-19 12:16:15 · 4925 阅读 · 2 评论 -
JVM之再谈类加载
类的生命周期加载Loading连接Linking验证Verification准备Preparation解析Resolution初始化Initialization类加载器类加载器类加载机制 总体上说,虚拟机把描述类的数据,从字节码文件加载到内存,然后进行数据校验、转换解析、初始化,最终形成可以被寻积极使用的Java类型,这就是虚拟机的类加载机制。与C/C++在编译时,需要连接不原创 2016-09-19 12:48:36 · 286 阅读 · 0 评论 -
Lambda表达式入门
Lambda表达式入门Java 8之前,大家应该有创建匿名内部类的体验,代码有点繁琐。Lambda表达式支持将代码块,作为方法参数,允许使用更简洁的代码,来创建只有一个抽象方法的接口的实例。Java 8里面,只有一个抽象方法的接口,叫做函数式接口,由@FunctionalInterface修饰,例如线程常用到的Runnable接口@FunctionalInterfacepublic interfa原创 2016-09-06 21:46:08 · 276 阅读 · 0 评论 -
Java多线程之线程同步
线程同步线程安全问题线程安全当多个线程访问某一个类(对象或方法)时,这个对象始终都能表现出正确的行为,那么这个类(对象或方法)就是线程安全的。synchronized可以在任意对象及方法上加锁,而加锁的这段代码称为”互斥区”或”临界区”关键字synchronized取得的锁都是对象锁,而不是把一段代码(方法)当做锁, 所以代码中哪个线程先执行synchronized关键字的方法,哪个线程就持原创 2016-09-06 22:07:04 · 245 阅读 · 0 评论 -
消费者生产者队列BlockQueue
8月的笔记import java.util.LinkedList;import java.util.concurrent.atomic.AtomicInteger;public class MyBlockQueue { //裝載元素的集合 private final LinkedList<Object> list = new LinkedList<Object>(); //原创 2016-09-06 23:09:43 · 1899 阅读 · 1 评论 -
Java多线程之同步容器与并发容器
同步容器VectorHashtableCollections.synchronziedXX并发容器ConcurrentMap基於Hashtable,段Segement,最大16個把粒度分細,每個段有自己的鎖共享變量用volatile關鍵字,第一時間獲得修改數據。從主內存讀取,不從工作內存讀取CopyonWrite容器JDK有兩種COW容器CopyOnWriteArrayListCopyOnWri原创 2016-09-06 23:11:31 · 374 阅读 · 0 评论 -
JVM之内存构成(二)--JAVA内存模型与并发
物理机中的并发硬件效率与一致性Java线程执行的内存模型工作内存主内存内存间交互long和double的非源自性协定Volatile类型变量的特殊规则和语义保证可见性禁止指令重排优化高效并发的原则可见性有序性和原子性先行发生Happens-Before这部分内容,跟并发有关我们知道,多任务处理,在现代操作系统几乎是必备功能。让计算机同时去做几件事情,不仅因为CPU运算能力太强大原创 2016-09-19 13:05:29 · 2605 阅读 · 1 评论 -
JVM之线程实现
线程1 实现线程的方式11 使用内核线程实现12 使用用户线程实现13 用户线程加轻量级进程混合实现2 Java的线程实现并发不一定要依赖多线程,PHP中有多进程并发。但是,Java里面的并发是多线程的。1. 线程参考:Java多线程之基本概念线程是比进程更轻量级的调度执行单位。线程可以把一个进程的资源分配和执行调度分开。一个进程里可以启动多条线程,各个线程可共享该进程的资源(内存地址,文原创 2016-09-22 00:46:13 · 1767 阅读 · 0 评论 -
JVM之线程安全、原子性实现
定义线程安全2 状态依赖线程的安全度1 不可变Immutable2 绝对线程安全3 相对线程安全4 线程兼容5 线程对立实现线程安全的方法1 同步11 阻塞同步互斥同步12 非阻塞同步Java原子操作的实现13 无同步方案1.定义线程安全 当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方法进行任何其他的协原创 2016-09-22 00:50:59 · 1586 阅读 · 0 评论 -
JVM之锁的优化
自旋锁Spinning锁消除锁粗化轻量级锁偏向锁对象内存布局JDK 1.5 到 JDK 1.6的一个重要改进,便是高效并发。此时实现了各种锁优化技术,为了高效地在线程之间共享数据,解决竞争问题,从而提高执行效率。适应性自旋锁(Adaptive Spinning)锁消除(Lock Elimination)锁粗化(Locking Coarsening)轻量级锁(Lightweight原创 2016-09-22 00:57:20 · 550 阅读 · 0 评论 -
JVM之内存分配与回收策略
对象优先在 Eden 分配大对象直接进入老年代长期存活对象进入老年代动态对象年龄判定空间分配担保Java技术体系提倡的自动内存管理,最终,可以归结为自动化解决两个问题给对象分配内存回收分配给对象的内存给对象分配内存,大方向上,是在堆上分配,但也可能经过JIT编译后,被拆散为标量类型,并间接地栈上分配对象主要分配在新生代的Eden区域,如果启动了本地线程分配缓冲,将按线程,优先在Thr原创 2016-09-11 10:22:52 · 519 阅读 · 1 评论 -
JVM之GC算法和种类
垃圾收集算法可达性分析算法强引用StringReference软引用SoftReference弱引用WeakReference虚引用PhantomReference引用计数算法Reference Counting标记-清除算法Mark-Sweep复制算法Copying标记-整理Mark-Compact分代收集算法Generational CollectionHotSpot的算法实原创 2016-09-11 10:00:21 · 2749 阅读 · 0 评论 -
JVM之对象引用
强引用StringReference创建对象,并把对象赋给一个引用变量,程序通过这个引用变量来操作对象,对象和数组都采用了强引用。一个对象被一个或以上引用变量引用,则处于可达状态,不会被GC软引用SoftReference要用java.lang.ref.SoftReference实现内存空间足够时,不会被GC;否则,可能会被GC常用于对内存敏感的程序中get()获取引用的对象弱引用W原创 2016-09-11 09:58:39 · 252 阅读 · 0 评论 -
Spring记录之模拟IoC(二)
模拟Spring IoC容器 2.0Spring的IoC容器通过解析xml文件,读取当中的配置关系,从而在对象中注入值或其他对象。反射机制在当中扮演重要角色,为了更简便地操作反射,Java中有一种技术Introspector(网上翻译为内省),模拟中,有了它,配置Bean标签的属性和依赖关系,会简便得多。当然,直接用反射也是可以的。原创 2016-04-04 20:41:13 · 404 阅读 · 0 评论 -
Spring记录之模拟IoC(三)
模拟Spring IoC容器 3.0从xml文件中读取的value值,是String类型,与Java Bean定义的属性,如int,double类型之间如何实现转换呢?上次说过,Apache Commons BeanUtils包,http://commons.apache.org/proper/commons-beanutils/ 该包集成了许多转化器Converter用它来实现。原创 2016-05-12 16:59:00 · 511 阅读 · 0 评论 -
Spring记录之Bean属性配置、依赖关系及生命周期
Spring配置Bean的属性和依赖关系Spring的IOC容器负责管理所有的应用系统组件,并协助组件之间建立关联。Spring支持Properties文件格式,和XML文件配置,XML是常用的。设置普通属性值(设值注入)当bean实例创建以后,Spring会遍历配置文件的<bean>元素中所有的<property>子元素,每发现一个<property>,就根据name属性调用相应的setter方法原创 2016-05-12 21:54:34 · 1311 阅读 · 0 评论 -
Spring记录之SpringMVC
Spring记录之SpringMVCSpring的Web框架是围绕分发器(DispatcherServlet)设计的,DispatcherServlet用来将请求分发到不同的处理器,框架还包括了控制器映射(HandlerMapping),视图解析(ViewResolver),本地化,主题解析,支持文件上传运行机制 - (1)客户端向Spring发送HTTP请求 - (2)前端控制器Dispatc原创 2016-05-14 20:03:17 · 528 阅读 · 0 评论 -
Spring记录之模拟IoC(一)
模拟Spring IoC容器先回顾一下前文。前文说过,Spring的容器,通过读取配置文件,利用反射机制,实现了对象的创建,这是核心。模拟步骤1.准备一个xml文件,配置好对象的关系2.根据配置文件初始化容器3.容器根据配置文件创建对象目录结构 1.bean.xml<?xml version="1.0" encoding="UTF-8"?><beans> <bean id="ch原创 2016-05-07 21:19:54 · 723 阅读 · 0 评论 -
Java多线程之状态与生命周期
线程的生命周期线程创建并启动后,不是一启动就进入执行状态,也不会一直处于执行状态。线程启动后不可能一直霸占CPU,所以CPU会在多线程之间切换,于是线程状态也会多次在运行、阻塞之间切换在线程的生命周期中,线程共有5种状态,在任意时刻,线程的状态只能是其中的一种 状态 说明 New 初始状态 —>使用new关键字,创建一个线程,但是还没有调用start方法,仅仅由JVM分配内存,并初始化原创 2016-06-02 10:55:35 · 1913 阅读 · 0 评论 -
Java多线程之线程创建和启动
Java使用Thread类表示线程,所有的线程对象必须是Thread类或其子类的实例,每个线程的作用,实际上就是执行一段程序刘,java使用线程执行体来代表着段程序流创建线程3方法继承Thread类创建线程的方法1是继承Thread类,重写run()方法,该方法的方法体代表了线程需要完成的任务,因此run()方法叫做线程执行体创建了Thread类子类的实例,即创建了线程对象启动线程应该用线程对原创 2016-05-31 20:11:29 · 403 阅读 · 0 评论 -
Java多线程之基本概念
什么是进程(Process)几乎所有OS都支持进程概念,进程是具有一定独立功能的程序,关于某个数据集合上的一次运行活动,是系统资源分配和调度的一个独立运行单位。程序是静态的概念,进程是动态的概念。程序是一组指令的有序集合,它本身没有任何运行的含义,只是一个静态实体,当一个程序进入内存运行时,就变成进程。进程是程序在某个数据集上的执行,是一个动态实体(进程本身不会运行,是线程的容器)。进程因创建而产生原创 2016-05-31 16:21:49 · 413 阅读 · 0 评论 -
Spring记录之Spring的基本概念
Spring的基本概念Spring 框架本身没有强制使用任何特别的编程模式。从设计上看,Spring有很大自由度,像个容器,可以整合其它许多框架组件。Spring的核心功能DI/IOC,AOP,适用于任何JAVA应用。学习当中的设计思想,对Java编程会有帮助。1. Spring优势Spring的优势主要有6点:有效组织中间层对象。能有效整合现有框架如Struts2,Hibernate,Mybat原创 2016-05-07 21:00:03 · 959 阅读 · 0 评论 -
Java多线程之控制线程
控制线程Java的线程支持,提供了便捷工具,方便控制线程的执行。包括join线程,后台线程,线程睡眠sleep,线程让步yield,改变线程优先级prioriy。join线程Thread提供了让一个线程等待另一个线程完成的方法–join()。在程序执行流中调用其他线程的join()方法时,当前线程将被阻塞,直到join入来的线程执行完毕。public class ControllThread ex原创 2016-07-03 21:12:30 · 349 阅读 · 0 评论 -
Java多线程之线程同步
线程同步线程安全问题多线程情况下,当多个线程访问同一个数据时,很容易出现线程安全问题。经典的问题——银行取钱问题。几个人同时取一个帐号里的钱,就可能出现问题。下面模拟一下。//账户类public class Account { private String accountNo; private double balance; public Account() { }原创 2016-07-03 21:13:25 · 415 阅读 · 0 评论 -
JVM之Java内存区域(一)
JVM构成JVM包括两个子系统和两个组件。两个子系统为: class loader(类装载)Execution engine(执行引擎)两个组件为: Runtime data area(运行时数据区)Native interface(本地接口)Class loader功能根据给定的全限定名类名(如:java.lang.Object)来装载class文件到Runtime data are原创 2016-09-11 09:48:34 · 296 阅读 · 0 评论 -
JVM之常用JVM配置参数
Trace跟踪参数-verbose:gc-XX:+printGC打印GC简要信息[GC (Allocation Failure) 3344K->1296K(9728K), 0.0004129 secs][GC (Allocation Failure) 3344K->1296K(9728K), 0.0003914 secs][GC (Allocation Failure) 3344K->1原创 2016-09-11 09:49:07 · 603 阅读 · 0 评论 -
JVM之内存中的对象模型
这里说HotSpot虚拟机中的对象转自这里:原文连接对象的创建一个简单的创建对象语句Clazz instance = new Clazz();包含的主要过程包括了类加载检查、对象分配内存、并发处理、内存空间初始化、对象设置、执行ini方法等。主要流程如下:java对象创建流程---1.加载---2.连接 | ---2.1验证 | --- 文件格式验证 --- 元数据转载 2016-09-22 01:01:07 · 342 阅读 · 0 评论