java多线程之:创建开启一个线程的开销
2016-08-11 22:04
507 查看
---->关于时间,创建线程使用是直接向系统申请资源的,这里调用系统函数进行分配资源的话耗时不好说。
---->关于资源,Java线程的线程栈所占用的内存是在Java堆外的,所以是不受java程序控制的,只受系统资源限制,默认一个线程的线程栈大小是1M(当让这个可以通过设置-Xss属性设置,但是要注意栈溢出问题),但是,如果每个用户请求都新建线程的话,1024个用户光线程就占用了1个G的内存,如果系统比较大的话,一下子系统资源就不够用了,最后程序就崩溃了。
--->对操作系统来说,创建一个线程的代价是十分昂贵的, 需要给它分配内存、列入调度,同时在线程切换的时候还要执行内存换页,CPU 的缓存被 清空,切换回来的时候还要重新从内存中读取信息,破坏了数据的局部性。
---->关于资源,Java线程的线程栈所占用的内存是在Java堆外的,所以是不受java程序控制的,只受系统资源限制,默认一个线程的线程栈大小是1M(当让这个可以通过设置-Xss属性设置,但是要注意栈溢出问题),但是,如果每个用户请求都新建线程的话,1024个用户光线程就占用了1个G的内存,如果系统比较大的话,一下子系统资源就不够用了,最后程序就崩溃了。
--->对操作系统来说,创建一个线程的代价是十分昂贵的, 需要给它分配内存、列入调度,同时在线程切换的时候还要执行内存换页,CPU 的缓存被 清空,切换回来的时候还要重新从内存中读取信息,破坏了数据的局部性。
相关文章推荐
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
- 实现Java删除一个集合的多个元素
- java去除集合中重复元素示例分享 java去除重复
- java nio
- java实现列表、集合与数组之间转化的方法
- java中ArrayList 、LinkList的区别分析---程序中设比较时间
- 删除JAVA集合中元素的实现代码
- java中List集合及其遍历详解
- 树的子结构
- java实现将结果集封装到List中的方法
- HashTable中的线程同步
- Java中List与Map初始化的一些写法分享
- java list去重操作实现方式
- java使用listIterator逆序arraylist示例分享
- java动态之反射机制relection
- java设计模式_单一职责原则
- java的arraylist排序示例(arraylist用法)
- spring 事务-使用@Transactional 注解(事务隔离级别)
- java list与数组之间的转换详细解析
- Java 自带的MD5加密。