java线程简析
来源:互联网 发布:mac电脑刷机数据恢复 编辑:程序博客网 时间:2024/05/16 09:11
线程基本概念在这里就不多说了,今天没事就是想随便创建一个类,然后看下线程运行,结果发现除了main线程还有4个系统守护线程,分别如下:
1.关联监听器
2.信号分发器
3.最终处理器
4.引用处理器
那attach机制是什么?说简单点就是jvm提供一种jvm进程间通信的能力,能让一个进程传命令给另外一个进程,并让它执行内部的一些操作,比如说我们为了让另外一个jvm进程把线程dump出来,那么我们跑了一个jstack的进程,然后传了个pid的参数,告诉它要哪个进程进行线程dump,既然是两个进程,那肯定涉及到进程间通信,以及传输协议的定义,比如要执行什么操作,传了什么参数等。
attach能做些什么
总结起来说,比如内存dump,线程dump,类信息统计(比如加载的类及大小以及实例个数等),动态加载agent(使用过btrace的应该不陌生),动态设置vm flag(但是并不是所有的flag都可以设置的,因为有些flag是在jvm启动过程中使用的,是一次性的),打印vm flag,获取系统属性等
finalizer:当垃圾回收系统发现一个对象没有任何的引用的时候,也就是不可到达的时候,会把该对象标记成 finalizable , 并且把它放入到一个 Finalize Queue(F-Queue) 的特殊队列里。当系统检测到这个 F-Queue 不为空的时候,就会从队列里弹出一个对象出来,调用其 finalize() 方法,把这个对象标记为 finalized ,这样,下次GC的时候,这些对象就可以被回收掉了,做这些事情应该是在一个或者多个线程里去做的,也可能就是GC线程,但是可以肯定的是,这些线程,优先级要比其他线程低一些,所以占用的 CPU 时间是比较少的。在Java 设计上,默认的 finalize() 方法是空的,它是不希望在这里做太多的事情的,期望尽量不在这里做任何事情。这里的理解是比较简单的,很多细节被忽略掉了。比如被放入F-Queue的,不是对象本身,而是一个 Finalizer 对象,当一些特殊情况下,比如在一个循环里,不停的创建对象,创建完了没有其他任何的引用,这样,这些对象都被标记为可回收的状态,会有很多的 Finalizer 对象存在,而处理 Finalizer 对象的线程比主线程的优先级要低,创建的速度大于了回收的速度,可能会积攒很多 Finalizer 对象在内存里,这个时候是有可能内存溢出的
- java线程简析
- java线程简析
- Java线程简析
- java线程实例详析
- Java线程:什么是线程
- Java线程:线程池
- java线程--线程退出
- JAVA-线程/线程锁
- Java线程:什么是线程
- Java线程:线程中断
- Java线程:线程状态
- Java线程: 线程调度
- Java线程:线程交互
- java--线程--线程池
- java 线程
- Java线程
- java线程
- java线程
- 任意整数转换为任意进制
- springMVC入门(一)
- 网易2017春招笔试--魔力手环
- 小案例-鼠标移入依次显示图片各个部分
- [2017.11.25]IO流
- java线程简析
- Java(8-2)多线程的同步和条件对象
- 树莓派网络配置eth0 wlan0静态IP
- vue源码解读-各构建版本
- linux终端常用指令大全
- CSS预览工具
- MyBatis学习笔记(四)--动态SQL的使用
- Uva 201 Squares (暴力 + 枚举)
- MyBatis学习笔记(五)--MyBatis杂项