GC笔记--Native线程

Native线程不能直接Access对象的引用,因此整个native线程是GC安全区域(GC safe region),GC发生时native线程可以继续执行。

但是,一旦Native线程调用VM接口,Native线程就需要切换状态,切换成非GC安全。

比如调用Java的JNI接口,Native线程首先尝试切换成Runable态。切换时,检查是否已发生GC。如果已经在GC,等待GC完成;如果没有GC,成功切换为Runable态,阻塞GC的进行。

当调用结束时,Native线程从Runable态切换回Native态,回到GC安全点。

所以Native线程(非VM接口调用状态),不响应GC,不被GC阻塞。

NatIve线程进入VM接口调用,则与GC互相阻塞。

时间: 2024-10-13 21:18:36

GC笔记--Native线程的相关文章

java笔记--使用线程池优化多线程编程

使用线程池优化多线程编程 认识线程池 在Java中,所有的对象都是需要通过new操作符来创建的,如果创建大量短生命周期的对象,将会使得整个程序的性能非常的低下.这种时候就需要用到了池的技术,比如数据库连接池,线程池等. 在java1.5之后,java自带了线程池,在util包下新增了concurrent包,这个包主要作用就是介绍java线程和线程池如何使用的. 在包java.util.concurrent下的 Executors类中定义了Executor.ExecutorService.Sche

《CLR via C#》读书笔记 之 线程基础

第二十五章 线程基础 2014-06-28 25.1 Windows为什么要支持线程 25.2 线程开销 25.3 停止疯狂 25.6 CLR线程和Windows线程 25.7 使用专用线程执行异步的计算限制操作 25.8 使用线程的理由 25.9 线程调度和优先级 25.10 前台线程和后台线程 参考 25.1 Windows为什么要支持线程 返回 Microsoft设计OS内核时,他们决定在一个进程(process)中运行应用程序的每个实例.进程不过是应用程序的一个实例要使用的资源的一个集合

java GC笔记

以hbase为例:在hbase的配置文件路径下,设置了GC log输出路径/app/hbase-config/hbase-env.sh export HBASE_OPTS="-Xmx16384m -Xms16384m -Xmn8192m -XX:PermSize=160M -XX:MaxPermSize=160M -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:CMSInitiatingOccupancyFraction=70 -XX:+UseCMSCo

java笔记--关于线程通信

关于线程通信 使用多线程编程的一个重要原因就是线程间通信的代价比较小 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3897773.html "谢谢-- 关键技术: yield(): Thread类的一个静态方法,用来暂停当前正在执行的线程对象,并执行其他线程 public static void yield(){} 代码实例: 实现线程间的发送和接收消息 package com.xhj.thread; /** * 线程之间的通信

Linux System Programming 学习笔记(七) 线程

1. Threading is the creation and management of multiple units of execution within a single process 二进制文件是驻留在存储介质上,已被编译成操作系统可以使用,准备执行但没有正运行的休眠程序 进程是操作系统对 正在执行中的二进制文件的抽象:已加载的二进制.虚拟内存.内核资源 线程是进程内的执行单元 processes are running binaries, threads are the smal

操作系统概念学习笔记 9 线程

操作系统概念学习笔记 9 线程 概述 单个进程可以包括多个控制线程. 线程 --一种CPU利用的基本单元,它是形成多线程计算机的基础. 线程是CPU使用的基本单元,它由线程ID.程序计数器.寄存器集合和栈组成.它与属于统一进程的其他线程共享代码段.数据段和其他操作系统资源. 一个传统重量级的进程只有单个控制线程,如果进程有多个控制线程,那么能同时做多个任务. 单线程与多线程 动机 一个应用程序通常是作为一个具有多个控制线程的独立进程实现的.如一个忙碌的网页服务器如果有多个(或数千个)客户并发访问

我的读书笔记(线程进程)

线程有时候可以被称为微进程或轻量级进程,它的概念和进程十分相似,是一个可以被调度的单元,并且维护自己的堆栈和上下文环境,线程是附属进程的,一个进程可以包含1个或者多个线程,并且同一进程内的多个线程共享一块内存快和资源,一个线程是一个操作系统可调度的基本单元,但同时它的调度受限于包含该线程的进程,也就是说操作系统首先决定了下一个执行的进程,进而才会调度该进程内的线程 线程和进程最大的区别在于隔离性的问题,每个进程都被单独地隔离,拥有自己的内存快,独占的资源及运行数据,一个进程的崩溃不会影响到其他进

python笔记——简易线程池multiprocessing.Pool

多线程模型设计是一个比较复杂的逻辑,但是python对于多线程的处理却有种种方便的类库,不需要过多的纠结线程间的操作细节.比如multiprocessing.Pool就是其中之一. 官方给的范例也很简单. from multiprocessing import Pool def f(x): return x*x if __name__ == '__main__': pool = Pool(processes=4) # start 4 worker processes result = pool.

java笔记--关于线程死锁

关于线程死锁 什么是死锁: 在编写多线程的时候,必须要注意资源的使用问题,如果两个或多个线程分别拥有不同的资源, 而同时又需要对方释放资源才能继续运行时,就会发生死锁. 简单来说:死锁就是当一个或多个进程都在等待系统资源,而资源本身又被占用时,所产生的一种状态. 造成死锁的原因: 多个线程竞争共享资源,由于资源被占用,资源不足或进程推进顺序不当等原因造成线程处于永久阻塞状态,从而引发死锁 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/389