1.  对象回收过程?

  可达性分析算法: 如果一个对象从 GC Roots 不可达时,则证明此对象不可用。 通过一系列称为GC ROOTS的对象作为起点,从这些起点往下搜索,搜索走过的路径

  称为引用链,当一个对象到GC ROOTS 没有任何引用链,我们判定这个对象是可回收的。。

  在java 中,可作用GC ROOTS对象的包括:

      虚拟机栈(栈针中本地变量表)中引用的对象,

      方法区中类静态属性引用的对象,

      方法区中常量引用的对象,

      本地方法栈中即native 引用的对象。。

   具体过程:  在对象不可达时,也并不是非死不可,要真正宣告一个对象死亡,需要进行两次标记过程: 如果一个对象在进行可达性分析后没有与GC ROOTS 的相连接的

        引用链,那将会被第一次标记并进行一次筛选: 筛选的目的是判定是否执行finalize方法,当对象没有覆盖finalize 方法,或者finalize 方法已经被虚拟机

        调用过,虚拟机认定这两种情况为不必要执行finalize方法。

        如果需要执行finalize方法,那么这个对象将会放置在一个F-Queue 队列中,并在稍后建立一个低优先级的线程来执行它。 finalize 方法是对象逃离死亡的

        最后机会,在执行finalize 方法时会对F-Queue中的对象进行第二次标记,如果对象在finalize 方法中成功拯救自己(如把this赋值给某个变量,总之就是让

        对象出现引用链),则讲该对象移出队列。剩下的对象就只能等待被回收了。

5.  synchronized 和 volatile

  volatile 修饰的变量对所有线程具有可见性 , 意思是如果一个线程修改了 该变量,另一个线程可以立即获得修改后的新值。但是这个并不是原子性的,在并发

  情况下并不是安全的:原因是多个线程在做运算前获取的可能是脏数据,如何 变量++ 操作,先获取变量值,然后+1, 多个线程获取的是脏数据。

  volatile 禁止指令重排序优化:指令重排是指java 编译成机器码时会优化语句执行顺序。 如线程A在执行某些操作后把某个变量赋值true, 另一个线程判断true 做一些操作,

      指令重排后可能到指线程A 在某些操作 完成之前就把 变量赋值true了。。导致线程B判断true后并不能获取正确的结果(比如我要获取线程A的某些操作结果)

  

  

对象回收过程?线程池执行过程? map原理?集合类关系?synchronized 和 volatile ? 同一个类的方法事务传播控制还有作用吗?java 锁的更多相关文章

  1. JS引擎线程的执行过程的三个阶段(一)

    浏览器首先按顺序加载由<script>标签分割的js代码块,加载js代码块完毕后,立刻进入以下三个阶段,然后再按顺序查找下一个代码块,再继续执行以下三个阶段,无论是外部脚本文件(不异步加载 ...

  2. JS引擎线程的执行过程的三个阶段(二)

    继续JS引擎线程的执行过程的三个阶段(一) 内容, 如下: 三. 执行阶段 1. 网页的线程 永远只有JS引擎线程在执行JS脚本程序,其他三个线程只负责将满足触发条件的处理函数推进事件队列,等待JS引 ...

  3. ThreadPoolExecutor源码分析-面试问烂了的Java线程池执行流程,如果要问你具体的执行细节,你还会吗?

    Java版本:8u261. 对于Java中的线程池,面试问的最多的就是线程池中各个参数的含义,又或者是线程池执行的流程,彷佛这已成为了固定的模式与套路.但是假如我是面试官,现在我想问一些更细致的问题, ...

  4. 捕获Java线程池执行任务抛出的异常

    捕获Java线程池执行任务抛出的异常Java中线程执行的任务接口java.lang.Runnable 要求不抛出Checked异常, public interface Runnable { publi ...

  5. Http请求封装(对HttpClient类的进一步封装,使之调用更方便。另外,此类管理唯一的HttpClient对象,支持线程池调用,效率更高)

    package com.ad.ssp.engine.common; import java.io.IOException; import java.util.ArrayList; import jav ...

  6. (CSDN 迁移) JAVA多线程实现-可回收缓存线程池(newCachedThreadPool)

    在前两篇博客中介绍了单线程化线程池(newSingleThreadExecutor).可控最大并发数线程池(newFixedThreadPool).下面介绍的是第三种newCachedThreadPo ...

  7. Java 使用线程池执行若干任务

    在执行一系列带有IO操作(例如下载文件),且互不相关的异步任务时,采用多线程可以很极大的提高运行效率.线程池包含了一系列的线程,并且可以管理这些线程.例如:创建线程,销毁线程等.本文将介绍如何使用Ja ...

  8. Java面试必问之线程池的创建使用、线程池的核心参数、线程池的底层工作原理

    一.前言 大家在面试过程中,必不可少的问题是线程池,小编也是在面试中被问啥傻了,JUC就了解的不多.加上做系统时,很少遇到,自己也是一知半解,最近看了尚硅谷阳哥的课,恍然大悟,特写此文章记录一下!如果 ...

  9. 深入浅出 Java Concurrency (33): 线程池 part 6 线程池的实现及原理 (1)[转]

    线程池数据结构与线程构造方法 由于已经看到了ThreadPoolExecutor的源码,因此很容易就看到了ThreadPoolExecutor线程池的数据结构.图1描述了这种数据结构. 图1 Thre ...

随机推荐

  1. Centos7 安装mysql5.7.24

    从mysql官网下载 mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz 拷贝到Centos的/opt目录下 1. 解压缩 tar -xzvf mysql-5.7.2 ...

  2. veil-evasion免杀处理

    veil-evasion 开启 y 配置安装 安装好之后,再次运行veil-evasion 有50个payload模块 update 升级 list 查看有哪些payload 选一个payload 它 ...

  3. centos7.2 增加3T的XFS模式分区

    parted -l 查看分区情况与要分区的设备 # parted /dev/sda                   #选定要操作的硬盘     此时命令提示符会变成(parted)    (par ...

  4. as3.0加载swf并控制

    私人QQ 280841609 var myload:Loader=new Loader(); var url:URLRequest=new URLRequest("1.swf"); ...

  5. RedHat 更新CentOS Yum源(转)

    经测试,可用.转自:https://www.cnblogs.com/tangsen/p/5151994.html 一.随笔引言 1.1随笔内容: 1.RedHat 配置Centos yum源 2.yu ...

  6. linux之master和minion

    saltstack博客地址: https://www.cnblogs.com/pyyu/p/9465608.html在线yaml文件编写:http://www.bejson.com/validator ...

  7. Mybatis 表名是变量时

    写语句时这样就可以了 <select id="selectTotal" resultType="java.util.Map" parameterType= ...

  8. HDU 6214 Smallest Minimum Cut(最少边最小割)

    Problem Description Consider a network G=(V,E) with source s and sink t. An s-t cut is a partition o ...

  9. f5负载均衡算法

    负载均衡使用一种算法或公式来确定由哪一个后台服务器接收流量 负载均衡是基于连接的 1.静态负载均衡算法:以固定方式分发连接 轮询算法(Round Robin):将请求依次顺序循环地分发给服务器,从1到 ...

  10. mvc下添加 EntityFramework的引用

    首先   打开工具-扩展和更新-联机-Visual Studio库,找到NuGet Package Manager 检查是否 安装,如果没有安装 先安装插件 安装成功后,右键点击‘引用’,如下图 然后 ...