![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 81
大多山
皮皮虾,我们走。
展开
-
【JVM系列】new Object()到底占用几个字节,看完这篇就彻底明白了
【JVM系列】new Object()到底占用几个字节,看完这篇就彻底明白了前言上一篇我们分析了Java虚拟机方法执行流程及方法重载和方法重写原理,并分析了方法的调用过程及原理,Java虚拟机栈是线程私有的,没有数据安全问题,而堆相比较于Java虚拟机栈而言更为复杂,因为堆是所有线程共享的一块内存空间,会出现线程安全性问题,而垃圾回收也主要是回收堆内空间,所以堆内的布局我们非常有必要深入去了解一下。现在就让我们继续来分析一下堆内布局以及Java对象在内存中的布局把。对象的指向先来看一段代码:pac转载 2020-09-19 01:10:38 · 422 阅读 · 0 评论 -
AQS详解
文章目录一、 AQS的类图结构1. state2. Node二、AQS同步队列(CLH)1. AQS同步原理2. AQS同步器的结构—入列与出列2.1 AQS同步器的结构2.2 入列2.3 出列三、 AQS锁1. AQS支持的锁的类别2. 基于AQS实现锁(独占与共享模式)2.1 独占锁的获取2.1.1 acquire()2.1.2 tryAcquire()2.1.3 addWaiter()2....原创 2020-01-09 00:57:27 · 788 阅读 · 0 评论 -
自旋锁
简单回顾一下CAS算法CAS算法 即compare and swap(比较与交换),是一种有名的无锁算法。无锁编程,即不使用锁的情况下实现多线程之间的变量同步,也就是在没有线程被阻塞的情况下实现变量的同步,所以也叫非阻塞同步(Non-blocking Synchronization)。CAS算法涉及到三个操作数需要读写的内存值 V进行比较的值 A拟写入的新值 B当且仅当 V 的值等于...原创 2019-12-31 16:31:45 · 349 阅读 · 0 评论 -
ReentrantLock详解
ReentrantLock详解Locklock()过程公平锁非公平锁unlock()过程lockInterruptibly()过程tryLock()tryLock(long timeout, TimeUnit unit)newCondition()斜体为抽象类,下横线为接口聚合关系总结:ReentrantLock实现了Lock,Serializabl...原创 2019-12-20 18:12:20 · 333 阅读 · 1 评论 -
Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比
Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比Github 地址:https://github.com/Snailclimb/JavaGuide/edit/master/Java相关/synchronized.mdSynchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock...转载 2019-12-10 16:52:41 · 660 阅读 · 0 评论 -
fail-fast与fail-safe在Java集合中的应用
fail-fast与fail-safe简介如果一个系统,当有异常或者错误发生时就立即中断执行,这种设计称之为fail-fast。相反如果我们的系统可以在某种异常或者错误发生时继续执行,不会被中断,这种设计称之为fail-safe。fail-fast与fail-safe在Java迭代器中的设计在Java中,最典型的fail-fast与fail-safe就是关于迭代器的设计。通常情况下,那些线程...转载 2019-12-06 18:25:39 · 100 阅读 · 0 评论 -
transient关键字
java 的transient关键字的作用是需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。transient使用小结1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本...原创 2019-12-05 14:33:43 · 121 阅读 · 0 评论 -
Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。参考:[http://www.cnblogs.com/dolphin0520/p/3920397.html]一.CountDownLatch用法 CountDownLatch类位于java.u...转载 2019-12-02 17:05:19 · 69 阅读 · 0 评论 -
JSP 九个内置JSP对象
JSP中9个内置对象转载 2017-04-16 10:26:09 · 193 阅读 · 0 评论 -
深入剖析Tomcat类加载机制+图解
1JVM类加载机制JVM的ClassLoader通过Parent属性定义父子关系,可以形成树状结构。其中引导类、扩展类、系统类三个加载器是JVM内置的。 它们的作用分别是: 1)引导类加载器:使用native代码实现,在rt.jar等包中搜索运行JVM所需的类,例如java.lang等包下的类。 2)扩展类加载器:负责载入标准扩展目录中的类,例如Sun的JVM的扩展目录是/jdk/jre/li转载 2017-06-11 11:32:59 · 1398 阅读 · 0 评论 -
对Java Serializable(序列化)的理解和总结
1、序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。2、什么情况下需要序列化 a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候; b转载 2017-07-08 10:10:26 · 885 阅读 · 0 评论 -
Web.xml配置详解之context-param
格式定义:<context-param> <param-name>contextConfigLocation</param-name> <param-value>contextConfigLocationValue></param-value> </context-param> 作用:该元素用来声明应用范围(整个WEB项目)内的上下文初始化参数。 param-name 设定转载 2017-07-25 15:23:04 · 460 阅读 · 0 评论 -
Java面试题:Servlet是线程安全的吗?
Servlet**不是线程安全**的。 要解释为什么Servlet为什么不是线程安全的,需要了解Servlet容器(即Tomcat)使如何响应HTTP请求的。 当Tomcat接收到Client的HTTP请求时,Tomcat从线程池中取出一个线程,之后找到该请求对应的Servlet对象并进行初始化,之后调用service()方法。要注意的是每一个Servlet对象再Tomcat容器中只有一个实例对转载 2017-07-26 20:06:53 · 663 阅读 · 0 评论 -
CGI与Servlet的比较
概括来说,CGI和Servlet可以完成相同的功能。 CGI特点 CGI(Common Gateway Interface)程序,主要用Perl、Shell Script或C编写,能够向客户端提供动态内容,即每次客户端浏览器访问某一页面时,可以看到不同的内容。CGI应用开发比较困难,因为它要求程序员有处理参数传递的知识,这不是一种通用的技能。CGI不可移植,为某一特定平台编写的CGI应用只能原创 2017-07-26 19:51:08 · 522 阅读 · 3 评论 -
Class.forName的作用以及为什么要用它
Class.forName(xxx.xx.xx) 返回的是一个类首先你要明白在java里面任何class都要装载在虚拟机上才能运行。这句话就是装载类用的(和new 不一样,要分清楚)。至于什么时候用,你可以考虑一下这个问题,给你一个字符串变量,它代表一个类的包名和类名,你怎么实例化它?只有你提到的这个方法了,不过要再加一点。 A a = (A)Class.forName(“pacage.A”).转载 2017-04-25 16:21:51 · 232 阅读 · 0 评论