手机回收

「 Offer收割机之JVM」:生存还是毁灭

老子叫甜甜 提交于 2020-03-27 07:29:07
这两天,广州的天气又开始热了起来,又到了小动物交配的季节,啊呸,又到了一个收割 offer 的季节。年底将至,又到了面试的高峰期,JVM 作为Java 程序员面试绕不过的一道坎儿,它又来了,你准备好了吗? 说说引用 面试官 A:小伙几,上篇我们说到了 JVM 收集的两种算法 —— 引用记数法和可达性分析算法,你对这两种算法的理解很清晰,那么这两种算法有一个很重要的点,就是『引用』,其实无论是引用记数法和可达性分析算法都离不开引用,那么你来谈谈引用吧。 我: 这个啊,简单,引用(reference)就是一块内存存储着另一块内存地址(自信脸 面试官 A:说的倒也没错,但是过于片面,那么你能不能详细讲一下引用呢? 我:上白板,我直接上图吧(熟练的拿起马克笔 面试官 A:那么你能不能详细的说一下这四种引用是在什么情况下出现的呢,它们分别代表了什么意义? 我:先说说强引用吧,我们日常中最常见到的就是强引用(拿起桌上的白板,开始手写代码,就像这样的,就属于强引用,它有多强呢,就是只要强引用存在,GC 永远不会对它下手,嗯,你可以理解为就是范闲,皇上的私生子。 String s = "vi的技术博客"; s = "技不可失"; 面试官 A:你也看庆余年啊,话说你看过原著没,结局是什么给我剧透剧透呗。 我:咳咳,老哥这样不太好吧,这是我的微信:cm_950825,有什么咱们私聊好吧,不要砸我

Android GC 那点事

拈花ヽ惹草 提交于 2020-03-15 22:07:03
版权声明:本文由陈昱全原创文章,转载请注明出处: 文章原文链接: https://www.qcloud.com/community/article/170 来源:腾云阁 https://www.qcloud.com/community 想写一篇关于Android GC的想法来源于追查一个魅族手机图片滑动卡顿问题,由于不断的GC导致的丢帧卡顿的问题让我们想了很多方案去解决,所以就打算详细的看看内存分配和GC的原理,为什么会不断的GC, GC ALLOC和GC COCURRENT有什么区别,能不能想办法扩大堆内存减少GC的频次等等。 1. JVM内存回收机制 1.1. 回收算法 标记回收算法(Mark and Sweep GC) 从"GC Roots"集合开始,将内存整个遍历一次,保留所有可以被GC Roots直接或间接引用到的对象,而剩下的对象都当作垃圾对待并回收,这个算法需要中断进程内其它组件的执行并且可能产生内存碎片。 复制算法 (Copying) 将现有的内存空间分为两快,每次只使用其中一块,在垃圾回收时将正在使用的内存中的存活对象复制到未被使用的内存块中,之后,清除正在使用的内存块中的所有对象,交换两个内存的角色,完成垃圾回收。 标记-压缩算法 (Mark-Compact) 先需要从根节点开始对所有可达对象做一次标记,但之后,它并不简单地清理未标记的对象

java 常见面试题

倖福魔咒の 提交于 2020-03-01 12:44:31
基本问题 基本数据类型和对象的区别 (1) 基本数据类型的存储原理:所有的简单数据类型不存在“引用”的概念,基本数据类型都是直接存储在内存中的栈上的,数据本身的值就是存储在栈空间里面,Java语言里面八种数据类型是这种存储模型; (2) 引用类型的存储原理:引用类型继承于Object类(也是引用类型)都是按照Java里面存储对象的内存模型来进行数据存储的,使用Java堆和栈来进行这种类型的数据存储,简单地讲,“引用”(存储对象在内存堆上的地址)是存储在有序的栈上的,而对象本身的值存储在堆上的; 不论是基本数据类型还是引用类型,他们都会先在栈中分配一块内存,对于基本类型来说,这块区域包含的是基本类型的内容;而对于引用类型来说,这块区域包含的是指向真正内容的指针,真正的内容被手动的分配在堆上。 JAVA中的数据类型及其各自的特点。 分为基本类型和引用类型,基本类型有八个,数值型的有byte(1字节),short(2字节),int(4字节),long,float,double,布尔类型的bool和字符类型的char。引用类型有类,接口,数组。 JAVA面向对象的特征? 封装、继承、多态、抽象 封装:通过类来体现,将实体封装成类,其中包含属性和方法 继承:类与类之间可以继承特点,使得代码重用 多态:通过传递给父类对象引用不同的子类从而表现出不同的行为 抽象: 将一类实体的共同特性抽象出来

app性能优化

萝らか妹 提交于 2020-02-03 07:06:06
性能优化简图 打造一个高质量的应用应该以4个方向为目标:快、稳、省、小。 快:使用时避免出现卡顿,响应速度快,减少用户等待的时间,满足用户期望。 稳:减低 crash 率和 ANR 率,不要在用户使用过程中崩溃和无响应。 省:节省流量和耗电,减少用户使用成本,避免使用时导致手机发烫。 小:安装包小可以降低用户的安装成本。 要想达到这4个目标,具体实现是在右边框里的问题:卡顿、内存使用不合理、代码质量差、代码逻辑乱、安装包过大,这些问题也是在开发过程中碰到最多的问题,在实现业务需求同时,也需要考虑到这点,多花时间去思考,如何避免功能完成后再来做优化,不然的话等功能实现后带来的维护成本会增加。 卡顿优化 Android 应用启动慢,使用时经常卡顿,是非常影响用户体验的,应该尽量避免出现。卡顿的场景有很多,按场景可以分为4类:UI 绘制、应用启动、页面跳转、事件响应,如图: 卡顿场景分析 这4种卡顿场景的根本原因可以分为两大类: 界面绘制。主要原因是绘制的层级深、页面复杂、刷新不合理,由于这些原因导致卡顿的场景更多出现在 UI 和启动后的初始界面以及跳转到页面的绘制上。 数据处理。导致这种卡顿场景的原因是数据处理量太大,一般分为三种情况,一是数据在处理 UI 线程,二是数据处理占用 CPU 高,导致主线程拿不到时间片,三是内存增加导致 GC 频繁,从而引起卡顿。 引起卡顿的原因很多

JVM垃圾回收

独自空忆成欢 提交于 2020-01-17 18:16:33
上文回顾: 《 深入理解Java内存模型(JMM)》 写在前面 本节常见面试题: 问题答案在文中都有提到 如何判断对象是否死亡(两种方法)。 简单的介绍一下强引用、软引用、弱引用、虚引用(虚引用与软引用和弱引用的区别、使用软引用能带来的好处)。 如何判断一个常量是废弃常量 如何判断一个类是无用的类 垃圾收集有哪些算法,各自的特点? HotSpot为什么要分为新生代和老年代? 常见的垃圾回收器有那些? 介绍一下CMS,G1收集器。 Minor Gc和Full GC 有什么不同呢? 本文导火索 当需要排查各种 内存溢出问题、当垃圾收集成为系统达到更高并发的瓶颈时,我们就需要对这些“自动化”的技术实施必要的监控和调节。 1 揭开JVM内存分配与回收的神秘面纱 Java 的自动内存管理主要是针对对象内存的回收和对象内存的分配。同时,Java 自动内存管理最核心的功能是 堆 内存中对象的分配与回收。 JDK1.8之前的堆内存示意图: 从上图可以看出堆内存分为新生代、老年代和永久代。新生代又被进一步分为:Eden 区+Survivor1 区+Survivor2 区。值得注意的是,在 JDK 1.8中移除整个永久代,取而代之的是一个叫元空间(Metaspace)的区域(永久代使用的是JVM的堆内存空间,而元空间使用的是物理内存,直接受到本机的物理内存限制)。 1.1 对象优先在eden区分配

苹果扩大用机器人回收手机矿物 称愿给电动车行业提供技术

怎甘沉沦 提交于 2020-01-14 12:19:04
[ 摘要 ]在过去,苹果公司在手机维修方面闹出一些争议,被指打压外部独立的维修服务,损害了消费者的权益。 腾讯科技讯 在库克执掌下,苹果成为一家更加重视慈善事业、环境保护、消费者隐私保护的负责任跨国公司,获得了国际舆论的称道。众所周知的是,智能手机时代的到来也加剧了废旧电子产品对于自然环境的破坏,据外媒最新消息,苹果公司正在大力推广其拆解智能手机的机器人,从而改变消费电子产品的回收方式,这个机器人可以自动拆卸苹果手机,这样原材料中矿物就可以被回收和再利用。外媒也指出,苹果投入这样的力量来回收矿物材料,这也表明全球对电子产品需求的增长意味着仍然建设新的采矿项目。 据国外媒体报道,总部位于加州库比蒂诺的苹果公司表示,机器人是苹果成为不依赖采矿业的“闭环”制造商计划的一部分,一些行业分析师表示,这是一个激进的目标,是不可能实现的。 许多矿业高管指出,随着电动汽车越来越受欢迎,市场对于一些矿物材料提出了更大规模的需求,苹果的举动实际上承认了这样一种事实。 “我们不一定要和矿业公司的人竞争,”苹果公司环境、政策和社会部门主管丽莎·杰克逊说。“在一些情况变化中,矿工没有什么可害怕的。” 在德克萨斯州奥斯汀郊区的一个不起眼的仓库里,苹果的“黛西”(Daisy)机器人将苹果手机拆开,这样包括锂在内的14种矿物质就可以被提取和回收。 苹果公司已经在一些产品中使用了回收的锡、钴和稀土材料

手机回收,隐私安全需重视

丶灬走出姿态 提交于 2020-01-13 22:01:42
   手机回收 ,用户最担心的就是泄露个人信息。在卖手机的时候把手机恢复出厂设置是不是就非常安全了,是不是这样真的不会泄露个人信息了呢?      事实表明,利用恢复软件,手机里原有的信息其实都可以还原。支付宝账户、短信、照片、通信录甚至是经常浏览的网站,都可以找回,如果这些被不法分子利用那就不堪设想了。因此,不仅是手机,电脑或者其他电子存储设备在变卖时都不能贪图小便宜,要到正规的电子回收市场出售。    机友网 ,最安全的手机回收平台。四年专业刷机团队,将手机内原有的个人信息物理删除,保证用户数据不泄露。   回收旧手机、废旧手机,旧手机换菜刀、换脸盆……”这样的叫卖声常在一些小区响起。“家里坏手机有七八个,以前想当废品卖了,可电子市场的回收价都不到十元钱,这下能换点实用的东西,不错嘛!”家住大学城的王先生这样对记者说。的确,王先生的想法得到了许多市民的认同。可居民们不知道,换掉的 旧手机 ,里面的短信、照片等隐私可以被轻易恢复,潜在风险较大。 机友网 www.jiyouwang.com 来源: https://www.cnblogs.com/montiona/p/4581597.html

Java基础之JVM

别等时光非礼了梦想. 提交于 2020-01-10 06:00:26
一、内存模型 1、程序计数器(线程私有) 一块较小的内存空间,是当前线程所指向的字节码的行号指示器。 2、虚拟机栈(线程私有) 是描述java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每个方法从调用直至完成的过程,对应着一个栈帧在虚拟机中入栈到出栈的过程。 栈帧 是用来存储数据和部分过程结果的数据结构,同时也被用来处理动态链接、方法返回值和异常分派。随方法的创建而创建,随着方法结束而销毁 3、本地方法栈(线程私有) 与虚拟机栈作用类似,区别是虚拟机栈为执行java方法服务,而本地方法栈则为Native方法服务。 4、堆(线程共享) 创建的对象和数组都保存在Java堆内存中,也是垃圾收集器进行垃圾手机的最重要的内存区域。现代VM采用分代手机算法,从GC角度还可分为新生代和老年代 5、方法区(线程共享) 即我们说的永久代,用于存储被JVM今安在的类信息、常量、静态变量、即时编译器编译后的代码等数据HotSpot VM把GC分代收集扩展至方法区,即使用Java堆的永久代来实现方法区,这样HotSpot的垃圾收集器就可以像管理java堆一样管理这部分内存,而 不必为方法区开发专门的内存管理器。 运行时常量池 :是方法区的一部分。用于存放编译期生成的各种字面量和符号引用

Java中的内存划分

耗尽温柔 提交于 2019-12-31 04:32:04
Java中的内存划分 Java程序在运行时,需要在内存中分配空间。为了提高运行效率,就对数据进行了不同的空间划分。因为每一片区域都有特定的数据处理方式和内存管理方式。 具体分为5种内存空间: 程序计数器:保证线程切换后能恢复到原来的执行位置。 虚拟机栈:(栈内存)为虚拟机执行java方法服务,方法被调用时,创建栈帧- 本地方法栈:为虚拟机执行使用到的Native方法服务 堆内存:存放所有new出来的东西 方法区:存储被虚拟机加载的类信息,常量,静态常量,静态方法等。 运行时常量池(方法区的一部分) GC对他们的回收: 内存区域中的程序计数器、虚拟机栈、本地方法栈这3个区域随着线程而生,线程而灭;栈中的栈帧随着方法的进入和退出而有条件的执行出栈和入栈的操作。每个栈帧中分配多少内存基本是在类结构确定下来时就已知的。在这个区域不需要过多的考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟着回收了。 GC回收的主要对象:Java堆和方法区 一个接口中的多个实现类需要的内存可能不同,一个方法中的多个分支需要的内存也可能不一样,我们只有在程序处于运行期间时才能知道会创建哪些对象,这部分内存的分配和回收都是动态的,GC关注的也是这部分内存。 1.程序计数器:(线程私有) 每隔线程拥有一个程序计数器,在线程创建时创建,指向吓一跳指令的地址 执行本地方法时,其值为undefined。

.Net Comapct Framework的垃圾回收

霸气de小男生 提交于 2019-12-29 02:29:06
1:托管资源 什么是代龄:垃圾收集器将托管堆中的对象分为三代,分别为0,1,2.在CLR初始化时,会选择为三代设置不同的阙值容量,一般分配为:第0代大约为256KB,第一代2MB,第二代10MB。显然,容量越大效率越低,而GC收集器会自动调节其阙值容量来提升执行效率,第0代对象的回收效率肯定是最高的。 在CLR初始化后,首先被添加到托管堆中的对象都被定为第0代,当垃圾回收执行时,未被回收的对象代龄将提升一级,变成第1代对象,而后新建的对象为第0代对象。也就是说,代龄越小,对象越新,通常情况下其生命周期也最短,因此垃圾回收其总是首先收集第0代的不可达对象内存。 随着对象的不断创建,垃圾收集再次启动时,则只会检查0代对象,并回收0代对象,而1代对象由于未达到预定的1代容量阙值,则不会进行垃圾回收操作,从而有效的提高了垃圾收集效率,这就是代龄机制在垃圾回收中的性能优化作用。那么垃圾收集器在什么情况下,才执行对第一代对象的收集?答案是仅当第0代对象释放的内存不足以创建新的对象,同时1代对象的体积也超出了容量阙值时,垃圾收集器将同时对0代和1代对象进行垃圾回收。回收之后,未被回收的1代对象升级为2代对象。而新建的对象还是0代对象。垃圾收集正是对上述过程的不断重复,利用分代机制提高执行效率。 通过GC.Collect方法可以指定对从第0代到指定代的对象进行回收。而.NET Comapct