1. Strong Reference StrongReference 是 Java 的默认引用实现,  它会尽可能长时间的存活于 JVM 内, 当没有任何对象指向它时 GC 执行后将会被回收 @Test public void strongReference() { Object referent = new Object(); /** * 通过赋值创建 StrongReference */ Object strongReference = referent; assertSame(refer…
前言: 从事Android开发的同学都知道移动设备的内存使用是非常敏感的话题,今天我们来看下如何使用软引用与弱引用来优化内存使用.下面来理解几个概念. 1.StrongReference(强引用) 强引用是我们最最常见的一种,一般我们在代码中直接通过new出来的对象等,都是强引用,强引用只要存在没有被销毁,内存就不会被系统回收.我们以生成Bitmap为例如下: Bitmap imageBitmap = readBitmapFromResource(getResources(), R.mipmap…
谈JAVA的内存回收 程序员需要通过关键字new创建Java对象,即可视为Java对象申请内存空间,JVM会在堆内存中为每个对象分配空间,当一个Java对象失去引用时,JVM的垃圾回收机制会自动清除他们,并回收它们所占用的内存空间.Java内存管理包括内存分配(创建Java对象时)和内存回收(回收Java对象)两个方面.这两方面工作都是由JVM自动完成的. 当Java对象被创建之后,垃圾回收机制会实时地监控每一个对象的运行状态,包括对象的申请,引用,被引用,赋值等.当垃圾回收机制实时地监控某个对…
JVM内存模型是Java的核心技术之一,之前51CTO曾为大家介绍过JVM分代垃圾回收策略的基础概念,现在很多编程语言都引入了类似Java JVM的内存模型和垃圾收集器的机制,下面我们将主要针对Java中的JVM内存模型及垃圾收集的具体策略进行综合的分析. 一 JVM内存模型 1.1 Java栈 Java栈是与每一个线程关联的,JVM在创建每一个线程的时候,会分配一定的栈空间给线程.它主要用来存储线程执行过程中的局部变量,方法的返回值,以及方法调用上下文.栈空间随着线程的终止而释放.StackO…
最近在进行Java项目开发的时候,由于业务的原因,有时候new的对象会比较多,这个时候我总是有一个疑惑?那就是JVM在何时决定回收一个Java对象所占据的内存?这个问题其实对整个web系统来说是一个比较核心的性能问题了,因为众所周知,Java也是会发生内存泄漏的.经过几天的学习和查询资料,现在先来分析一下Java的引用的种类,Java的引用就是指向Java堆内存中对象的箭头的另一端的元素. 可以先来分析一下对象在内存中的状态,对于JVM的垃圾回收机制来说,是否回收一个对象的标准在于:是否还有引用…
Cache        在特定硬件基础上(同时假设系统不存在设计上的缺漏和糟糕低效的SQL 语句)Cache往往是提升系统性能的最关键因素).        相对Hibernate 等封装较为严密的ORM 实现而言(因为对数据对象的操作实现了较为严密的封装,可以保证其作用范围内的缓存同步,而ibatis 提供的是半封闭的封装实现,因此对缓存的操作难以做到完全的自动化同步).        ibatis 的缓存机制使用必须特别谨慎.特别是flushOnExecute 的设定,需要考虑到所有可能引…
1 抽象类 当编写一个类时,常常会为该类定义一些方法,这些方法用以描述该类的行为方式,那么这些方法都有具体的方法体.但在某些情况下,某个父类并不需要实现,因为它只需要当做一个模板,而具体的实现,可以由它的子类来实现.比如说一个长方体的表面积和一个立方体的表面积计算方式是有区别的,长方体表面积需要有三个参数,而立方体需要一个参数. 抽象方法可以只有方法签名,而没有方法实现. 1.1 抽象方法和抽象类的定义 抽象方法和抽象类必须使用abstract修饰符来定义,有抽象方法的类只能被定义成抽象类,抽象…
201871010132-张潇潇<面向对象程序设计(java)>第八周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/11703678.html 作业学习目标 掌握接口定义方法: 掌握实现接口类的定义要求: 掌握实现了接口类的使用要求: 理解程序回调设计模式: 掌握Comparator接口用法: 掌握对象浅层拷贝与深层拷贝方法: 掌…
一.HotSpot HotSpot是最新的虚拟机,替代了JIT,提高Java的运行性能.Java原先是将源代码编译为字节码在虚拟机运行,HotSpot将常用的部分代码编译为本地代码. 对象创建过程 类加载 分配内存 初始化 设置对象头 执行init 对象的内存布局 | 对象头 | 记录一个对象的实例名字.ID和实例状态普通对象占用 8 bytes,数组占用 12 bytes (8 bytes 的普通对象头 +  4 bytes 的数组长度) 1.第一部分用于存储对象自身的运行时数据,如哈希码.G…
一,定义 在Java中,引用的定义是:如果reference类型的数据中存储的数值代表的是另一块内存的起始地址,就称这块内存代表着一个引用.后面在JDK1.2开始,引用的概念被扩充,引用被分为强引用(StrongReference).软引用(SoftReference)弱引用.(WeakReference).虚引用(PhantomReference).这四种引用的强度关系:强引用>软引用>弱引用>虚引用. 1,强引用:这种引用就是我们在代码中最常用的,类似于"Object o…