「java线程局部存储」java线程缓存
今天给各位分享java线程局部存储的知识,其中也会对java线程缓存进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
Java 基本数据类型作为局部变量存储在哪
基本数据类型作为局部变量是放在栈中的,new出来的对象是放在堆中的,用static声明的变量是静态变量,静态变量和字符串常量是放在data segment中的
Java数组是存储在内存中的什么地方
因为我也不清楚你理解的内存指啥,说我的理解,猜测一下,但愿符合你的理解:
对程序而言,内存分为:
a、静态区块或叫全局区块,指程序加载的时候就分配的固定存储区;
b、栈内存,代码块执行的时候动态分配的内存块,代码运行完后,操作系统或运行平台负责自动回收这部分使用的内存。
c、堆内存块,由操作系统提供api程序自由分配管理的内存块。
java的内存管理机制,我个人认为是黑盒的,写java也很少有人去关心,但是如果看虚拟机的实现源码还是能知道的。(楼主懂c由兴趣自己看)。那么从逆向工程的角度我们可以猜测到:
静态类,静态变量,存储在,静态区块中。
类本身代码需要时再加载到内存中,java的动态代理实现的根本。既然是动态加载肯定是在堆中,不过加载进来的类代码可能永不会销毁(虚拟机运行区间内,可以加快运行平台的处理速度,java属于半编译半解释的一门语言,要解释执行的是预先编译好的指令,就是class类文件)。
我们创建的任何对象,时间是随机的,创建的时候才会分配内存,必然在堆上。虚拟机的垃圾回收机制要管理的刚好是这部分内存。
类中的方法,或静态代码块必定运行在占上,代码运行完,内存立即回收。此处有个例外,不同于c语言或操作系统实现。在方法中返回的任何对象:c需要动态分配存储空间,兵自行管理,或者申明为全局局部静态存储,代码运行完,对象才能保留下来。java可以直接保留下来。说明虚拟机自动给我们申请了动态内存保存对象。此处分配的内存也需要垃圾回收机制管理。没门语言都有原始类型,方法或函数中返回的原始类型不需要从堆上分配内存,直接复制给接收变量,或代码运行的形参所分配的空间中即可。
从操作系统理解,内存分为内核使用的内存与程序使用的内存,java运行在虚拟机上,虚拟机运行在操作系统上,内核内存属于操作系统自用内存,由操作系统负责管理,运用程序不能直接管理分配内核内存。应用程序可管理的是分配给自己的运行空间。因此java使用内存属于应用程序内存。内核内存管理方式windows与unix实现管理方式不一样,最大差别windows的每一个程序,内核需要使用掉一部分地址空间,余下的留给应用程序。如32位系统,总共可以使用的地址空间是4G内核要用掉其中1G或者2G。但是unix实现的系统应用程序可以直接使用4G地址空间。有兴趣请参考操作系统内核相关书籍。
Java:ThreadLocal究竟有什么用呢?费解
1.ThreadLocal用来解决多线程程序的并发问题
2.ThreadLocal并不是一个Thread,而是Thread的局部变量,当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每个线程都
可以独立地改变自己的副本,而不会影响其它线程所对应的副本.
3.从线程的角度看,目标变量就象是线程的本地变量,这也是类名中“Local”所要表达的意思。
4.线程局部变量并不是Java的新发明,Java没有提供在语言级支持(语法上),而是变相地通过ThreadLocal的类提供支持.
5.ThreadLocal类中的方法:(JDK5版本之后支持泛型)
void set(T value)
将此线程局部变量的当前线程副本中的值设置为指定值
void remove()
移除此线程局部变量当前线程的值
protected T initialValue()
返回此线程局部变量的当前线程的“初始值”
T get()
返回此线程局部变量的当前线程副本中的值
6.ThreadLocal的原理:
ThreadLocal是如何做到为每一个线程维护变量的副本的呢?其实实现的思路很简单:在ThreadLocal类中有一个Map,用于存储每一个线程的变量副本,Map中元素
的键为线程对象,而值对应线程的变量副本
7.自己模拟ThreadLocal:
1.ThreadLocal用来解决多线程程序的并发问题
2.ThreadLocal并不是一个Thread,而是Thread的局部变量,当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每个线程都
可以独立地改变自己的副本,而不会影响其它线程所对应的副本.
3.从线程的角度看,目标变量就象是线程的本地变量,这也是类名中“Local”所要表达的意思。
4.线程局部变量并不是Java的新发明,Java没有提供在语言级支持(语法上),而是变相地通过ThreadLocal的类提供支持.
5.ThreadLocal类中的方法:(JDK5版本之后支持泛型)
void set(T value)
将此线程局部变量的当前线程副本中的值设置为指定值
void remove()
移除此线程局部变量当前线程的值
protected T initialValue()
返回此线程局部变量的当前线程的“初始值”
T get()
返回此线程局部变量的当前线程副本中的值
6.ThreadLocal的原理:
ThreadLocal是如何做到为每一个线程维护变量的副本的呢?其实实现的思路很简单:在ThreadLocal类中有一个Map,用于存储每一个线程的变量副本,Map中元素
的键为线程对象,而值对应线程的变量副本
7.自己模拟ThreadLocal:
关于java线程局部存储和java线程缓存的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。