java
文章平均质量分 88
halfclear
这个作者很懒,什么都没留下…
展开
-
《深入理解java虚拟机》学习笔记(1)--jvm内存区域
1. jvm运行时数据区java虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。java虚拟机所管理的内存将会包括以下几个运行时数据区域,如下图所示:(1) 程序计数器指向下一条将要执行的字节码指令。线程隔离的区域,每个线程都有自己的程序计数器。(2) java虚拟机栈虚拟机栈也是线程私有的,每个线程有自己的虚拟机栈。每原创 2017-09-22 18:12:02 · 281 阅读 · 0 评论 -
spring开发笔记(2)spring原理及入门
spring容器原理spring家族体系庞大,功能强大,但就其最根本的本质来说,spring就是一个IoC容器,通常也称为spring容器。什么是IoC容器呢?所谓容器,顾名思义,就是可以装很多东西的一个器物。spring容器里装的是什么呢?是一个个对象,也就是说,spring容器是一个可以装很多对象的容器。在spring以前,我们在开发程序时,所有的对象都是要自己一个个new出来的,或者通过工厂...原创 2018-04-22 01:25:27 · 435 阅读 · 0 评论 -
《深入理解java虚拟机》学习笔记(5)--虚拟机字节码执行引擎
运行时栈帧结构 栈帧是支持虚拟机进行方法调用和执行的数据结构,是虚拟机运行时数据区中的虚拟机栈的栈元素。存储了方法的局部变量表,操作数栈,动态连接和方法返回地址等信息。 在编译时,一个栈帧需要分配多少内存就完全确定了。只有当前栈帧是有效的。 每个栈帧都包括了局部变量表、操作数栈、动态连接、方法返回地址和一些额外的附加信息。1.局部变量表 局部变量表是一组变量值存原创 2017-10-26 16:35:28 · 387 阅读 · 0 评论 -
《深入理解java虚拟机》学习笔记(4)--虚拟机类加载机制
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 在Java中,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但却为java程序提供了高度的灵活性。 类的生命周期类从加载到虚拟机内存开始,到卸载出内存为止,生命期分为:原创 2017-10-26 16:11:01 · 357 阅读 · 0 评论 -
《深入理解Java虚拟机》学习笔记(6)--程序编译与代码优化
早期(编译期)优化Javac这类编译器对代码的运行效率几乎没有任何优化措施。对性能的优化集中到了后端的即时编译器中,这样可以让那些不是由Javac产生的Class文件也同样能享受到编译器优化所带来的好处。Javac做了许多针对Java语言编码过程的优化措施来改善程序员的编码风格和提高编码效率。相当多新生的Java语法特性,都是靠编译器的“语法糖”来实现,而不是依赖虚拟机的底层改进来原创 2017-11-01 17:02:43 · 574 阅读 · 0 评论 -
《深入理解Java虚拟机》学习笔记(8)--线程安全与锁优化
Java中的线程安全按照线程安全的“安全程度”由强至弱来排序,java里面各种操作共享的数据分为以下5类:不可变,绝对线程安全,相对线程安全,线程兼容,线程对立 不可变不可变的对象一定是线程安全的。被final修饰的基本数据类型是不可变的。对象也可以是不可变的,前提是对象的行为不会对其状态产生任何影响(只要将对象的所有字段都用final修饰即可)String、Integer原创 2017-11-09 17:27:29 · 591 阅读 · 0 评论 -
《深入理解Java虚拟机》学习笔记(7)--Java内存模型与线程
为了解决CPU与内存之间速度不匹配的问题,会CPU和内存之间加入一个高速缓存(Cache)。对于多核(即多个CPU)系统,每个CPU都会有自己的高速缓存。基于高速缓存的存储交互很好地解决了处理器与内存的速度矛盾,但是也引入了新的问题:缓存一致性,即多个CPU共享同一个主内存,会把主内存的数据缓存到各自的高速缓存中,当各CPU的高速缓存中的数据不一致时,以哪个高速缓存中的数据为准呢?为了原创 2017-11-09 17:25:55 · 240 阅读 · 0 评论 -
java io
Java对io的支持很完善,定义了许多类(流)对io操作提供支持。Java io类结构如下图所示:可以看出,java io类非常庞大。但这些类也是有规律的,从不同的角度,可以划分为不同的类别。按数据流向不同分类:输入流和输出流(1)输入流:从文件读入到内存。只能进行读操作。InputStream类、Reader类都是输入流。(2)输出流:从内存输出到文件。只能进原创 2017-09-20 20:11:21 · 203 阅读 · 0 评论 -
《深入理解Java虚拟机》学习笔记(3)--内存分配与回收策略
对象的内存分配,往大方向讲,就是在堆上分配。对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配,少数情况也可能会直接分配在老年代中,具体的分配规则取决于虚拟机自己的设置。1.对象优先在Eden分配大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC.Minor GC:新生代GC,非常频原创 2017-09-27 20:20:19 · 289 阅读 · 0 评论 -
《深入理解Java虚拟机》学习笔记(2)--垃圾收集器
一、Jvm垃圾回收区域程序计数器、虚拟机栈、本地方法栈三个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊的执行着出栈和入栈操作。每一个栈帧中分配多少内存基本是在类结构确定下来时就已知的,因此这三个区域的内存分配和回收都具有确定性,在这三个区域内不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟着回收了。而java堆和方法区不一样,一个接口中的多个实现类需要原创 2017-09-27 20:17:48 · 243 阅读 · 0 评论 -
java动态代理
1.静态代理 如果我们有如下接口及具体实现:public interface StudentService { void setScore(long id, int score); void awardStudent(long id);}public class StudentServiceImpl implements StudentService {原创 2017-08-31 16:59:15 · 340 阅读 · 0 评论 -
Java的反射
1.什么是反射当我们在需要一个类的实例时,一般都是new一个对象出来,然后再在该对象上调用方法。假设目前我们有个Bird类:public class Bird { private static String master = "amy"; private String name; public static void sayHello() { Sy原创 2017-08-29 19:37:27 · 273 阅读 · 0 评论 -
spring开发笔记(3)spring mvc原理及入门
我们开发的web应用程序是要放到tomcat之类的web容器里运行的,当http请求到来时,tomcat会把请求交给web应用的某个servlet处理。在开发web应用时,自然而然的,我们会想到有多少种http请求需要处理,就编写多少个servlet,然后在web.xml里配置好servlet和http请求uri的对应关系。比如,要处理/add、/query、/delete、/update这4个请...原创 2018-04-24 16:29:37 · 435 阅读 · 0 评论