• 等级
  • 2206256 访问
  • 260 原创
  • 1 转发
  • 464 排名
  • 9 评论
  • 5 获赞

java 内存模型入门系列教程-00

目录 java 内存模型JSR 133-01 java 内存模型数据结构-02 java 内存模型缓存和重排序-03 java 内存模型顺序一致性-04 java 内存模型volatile关键字-05 java 内存模型happens before,as-if-serial,synchronization-06 java 内存模型 java 锁 ReentrantLock-07 java 内存模型...

2018-12-12 21:08:43

java 内存模型 jmm 汇总-09

处理器内存模型 顺序一致性内存模型是一个理论参考模型,JMM 和处理器内存模型在设计时通常会把顺序一致性内存模型作为参照。 JMM 和处理器内存模型在设计时会对顺序一致性模型做一些放松,因为如果完全按照顺序一致性模型来实现处理器和 JMM,那么很多的处理器和编译器优化都要被禁止,这对执行性能将会有很大的影响。 分类 根据对不同类型读/写操作组合的执行顺序的放松,可以把常见处理器的内存模型划分为下面...

2018-12-12 21:05:43

java 内存模型 final 关键字-08

基础知识 基本用法 修饰类 当用final修饰一个类时,表明这个类不能被继承。 也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。 final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。 修饰方法 使用final方法的原因有两个。 第一个原因是把方法锁定,以防任何继承类修改它的含义; 第二个原因是效率...

2018-12-12 21:04:44

java 内存模型 java 锁 ReentrantLock-07

锁的释放和获取 锁是 java 并发编程中最重要的同步机制。 锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。 实例 MonitorExample.java class MonitorExample { int a = 0; public synchronized void writer() { //1 a++; ...

2018-12-12 21:02:20

java 内存模型happens before,as-if-serial,synchronization-06

as-if-serial 不管怎么重排序(编译器和处理器为了提高并行度),(单线程)程序的执行结果不会改变。 编译器、runtime和处理器都必须遵守 as-if-serial 语义。 为了遵守 as-if-serial 语义,编译器和处理器不会对存在数据依赖关系的操作做重排序,因为这种重排序会改变执行结果。 但是,如果操作之间不存在数据依赖关系,这些操作就可能被编译器和处理器重排序。 happe...

2018-12-12 21:01:04

java 内存模型volatile关键字-05

volatile Java语言规范第三版中对 volatile 的定义如下: java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致的更新,线程应该确保通过排他锁单独获得这个变量。 Java语言提供了 volatile,在某些情况下比锁更加方便。 如果一个字段被声明成 volatile,java线程内存模型确保所有线程看到这个变量的值是一致的。 语义 一旦一个共享变量(类的成员变量、...

2018-12-12 20:59:56

java 内存模型顺序一致性-04

数据竞争 竞争 当程序未正确同步时,就会存在数据竞争。java内存模型规范对数据竞争的定义如下: 在一个线程中写一个变量, 在另一个线程读同一个变量, 而且写和读没有通过同步来排序。 当代码中包含数据竞争时,程序的执行往往产生违反直觉的结果(前一章的示例正是如此)。 如果一个多线程程序能正确同步,这个程序将是一个没有数据竞争的程序。 保证 JMM对正确同步的多线程程序的内存一致性做...

2018-12-12 20:58:51

java 内存模型缓存和重排序-03

缓存 为了提升性能,JVM 做了 2 件事情。 缓存+重排序 为什么会出现线程可见性问题 要想解释为什么会出现线程可见性问题,需要从计算机处理器结构谈起。 我们都知道计算机运算任务需要CPU和内存相互配合共同完成,其中CPU负责逻辑计算,内存负责数据存储。 CPU要与内存进行交互,如读取运算数据、存储运算结果等。 由于内存和CPU的计算速度有几个数量级的差距,为了提高CPU的利用率,现代处理器结构...

2018-12-12 20:57:56

java 内存模型数据结构-02

内存模型 Java内存模型,往往是指Java程序在运行时内存的模型,而Java代码是运行在Java虚拟机之上的,由Java虚拟机通过解释执行(解释器)或编译执行(即时编译器)来完成,故Java内存模型,也就是指Java虚拟机的运行时内存模型。 运行时内存模型 运行时内存模型,分为线程私有和共享数据区两大类,其中线程私有的数据区包含程序计数器、虚拟机栈、本地方法区,所有线程共享的数据区包含Java堆...

2018-12-12 20:56:33

java 导出 excel 最佳实践,java 大文件 excel 避免OOM(内存溢出) excel 工具框架

产品需求 产品经理需要导出一个页面的所有的信息到 EXCEL 文件。 需求分析 对于 excel 导出,是一个很常见的需求。 最常见的解决方案就是使用 poi 直接同步导出一个 excel 文件。 客户体验 & 服务性能 客户体验 如果导出的文件比较大,比如几十万条数据,同步导出页面就会卡主,用户无法进行其他操作。 服务性能 导出的时候,任务比较耗时就会阻塞主线程。 如果导出的服务...

2018-11-26 21:52:07

logback 入门教程系列-07-logback Filter 过滤器

在logback-classic中 Logback-classic提供两种类型的过滤器,常规过滤器和turbo过滤器。 常规过滤器 常规的logback-classic过滤器扩展了Filter抽象类,它基本上由一个以ILoggingEvent实例作为参数的decision()方法组成。 过滤器按有序列表组织,并基于三元逻辑。每个过滤器的决定(ILoggingEvent事件)方法按顺序调用。此方法返...

2018-11-22 22:08:36

logback 入门教程系列-06-logback Layout

什么是布局? 如果你想知道,布局与佛罗里达州的大型庄园无关。 布局是负责将传入事件转换为String的回溯组件。 Layout接口中的format()方法接受一个表示事件(任何类型)的对象并返回一个String。 Layout界面的概要如下所示。 public interface Layout<E> extends ContextAware, LifeCycle { String...

2018-11-22 22:07:33

logback 入门教程系列-05-logback Encoder

Encoder Encoder 是什么 编码器负责将事件转换为字节数组,并将该字节数组写入OutputStream。编码器在logback版本0.9.19中引入。在以前的版本中,大多数appender依靠布局将事件转换为字符串并使用java.io.Writer将其写出来。在以前版本的logback中,用户可以在FileAppender中嵌套PatternLayout。由于logback 0.9.1...

2018-11-22 22:05:25

logback 入门教程系列-04-logback Appender

Appender Appender 是什么 Logback将记录事件的任务委托给称为appender的组件。 Appenders必须实现 ch.qos.logback.core.Appender 接口。 该界面的显着方法总结如下: public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachable...

2018-11-21 21:08:58

logback 入门教程系列-03-logback config 配置

配置 将日志请求插入应用程序代码需要相当多的计划和努力。 观察表明,大约4%的代码专门用于记录。 因此,即使是适度大小的应用程序也会在其代码中嵌入数千个日志记录语句。 鉴于它们的数量,我们需要工具来管理这些日志语句。 可以通过编程方式或使用以XML或Groovy格式表示的配置脚本来配置Logback。 顺便说一句,现有的log4j用户可以使用我们的PropertiesTranslator Web应...

2018-11-21 21:07:32

logback 入门教程系列-02-logback 项目模块 Logger,Appender 和 Layout

Logback的架构 Logback的基本架构足够通用,以便在不同情况下应用。 目前,logback分为三个模块:logback-core,logback-classic和logback-access。 核心模块为其他两个模块奠定了基础。经典模块扩展了核心。经典模块对应于log4j的显着改进版本。 Logback-classic本身实现了SLF4J API,因此您可以在logback和其他日志记录...

2018-11-20 22:19:59

logback 入门教程系列-01-logback 入门使用案例

Logback Logback 旨在作为流行的log4j项目的后续版本,从而恢复log4j离开的位置。 Logback旨在成为流行的log4j项目的后续版本。它由log4j的创始人CekiGülcü设计。 它建立在设计工业强度测井系统的十年经验之上。 由此产生的产品,即 back,比所有现有的测井系统更快并且占地面积更小,有时候是大幅度的。 同样重要的是,logback提供了其他日志记录系统中缺少...

2018-11-20 22:17:26

logback 入门教程系列-00-导航

导航 创作缘由 logback、log4j、log4j2 等常用日志框架都接触过。 但是没有系统地去学习,所以本系列就简单的按照官方教程学习一遍。 源码 本系列的源码,你可以在 logback-learn 拓展阅读 log4j2 slf4j 日志最佳实践 ...

2018-11-20 22:15:32

Java Servlet 实战入门教程-19-servlet web 安全

web 安全的几个方面 认证、授权、机密性、数据完整性。 特征 web 应用包含的资源可以被多个用户访问。这些资源常常不受保护的遍历,开放网络如 Internet。 在这样的环境,大量的 web 应用将有安全需求。 尽管质量保障和实现细节可能会有所不同,但 servlet 容器有满足这些需求的机制和基础设施,共用如下一些特性: 身份认证:表示通信实体彼此证明他们具体身份的行为是被授权访问的。 ...

2018-10-07 10:32:13

Java Servlet 实战入门教程-18-servlet web application 应用部署

war 包 Jar、war、EAR、在文件结构上,三者并没有什么不同,它们都采用zip或jar档案文件压缩格式。 Jar Jar文件(扩展名为. Jar,Java Application Archive)包含Java类的普通库、资源(resources)、辅助文件(auxiliary files)等 War War文件(扩展名为.War,Web Application Archive)包含全部We...

2018-10-07 10:31:26

叶止水

Github: https://github.co m/houbb 邮箱:1060732496@qq.com ...展开 收起
关注
  • 计算机软件
  • 中国 上海 松江区
奖章
  • 专栏达人
  • 持之以恒