单位:byte byte 1 short 2 int 4 long 8 float 4 double 8 char 2 boolean 1 Object obj=null 4 Object obj=new Object() 12 Integer 16 对于普通的class来说 ,内容占用就是基加成员的占用,Object成员只记引用 public class Abc { public int n; public byte b; public Object obj; } 它的内容占用是: [8 4 1 4]=24 所以 Abc one=new Abc()的占用是 4 24=28 因为session是一个接口,根据服务器不同具体实现类也不同,所以没办法一下子知道一个session占多少内存不过有个间接的方法可以看,通过查看系统总的内存,自己算Runtime r = Runtime.getRuntime();// amount of unallocated memory long free = r.freeMemory();// total amount of memory available allocated and unallocated. long total = r.totalMemory();// total amount of allocated memory long inuse = r.totalMemory() - r.freeMemory();// max memory JVM will attempt to use long max = r.maxMemory();// suggest now would be a good time for garbage collection System.gc();
生成session前和生成session后的剩余内存减一下就可以知道了。
首先我们先来了解一下什么是session,其实session就是一块在服务器端开辟的内存空间。session的作用是来跟踪用户的操作状态, 我们举个例子,比如:服务器端要知道一个当前网站有多少用户在线。我们知道一个用户就一个客户端,那么也就是说服务器端要知道有多少客户端正在访问本网 站,这样服务器端必然要跟踪每一个客户端的状态,那么服务器是通过什么跟踪的呢?又是怎么跟踪的呢?哈哈,其实这个问题很简单,比如张三下班后打天电脑是 今天第一次访问清华IT太原校区的网站,张三的电脑向清华IT太原校区的网站发出了请求,清华IT太原校区网站我现 在要访问你,这时呢清华IT太原校区的网站说请出示你的证件,张三的电脑傻了问“证件???”这时清华IT太原校区的网站说是今天第一次来访吧,张三的电 脑说是啊,清华IT太原校区的网站说那就对了看在你诚实的份上给你一个证件吧(这里的证件就是我们说的 sessionID,sessionID:是32位的字母和数字的组合是全地球唯一的,因为sessionID是唯一的所以它的作用是用来区分每个客户端 的,此ID是在session被创建时产生的,而session我们看到了是在第一次访问网站时就会被建立。sessionID会随着应答一起发到客户端 并存放到客户端的内存中,这块客户端的内存就是我们经常说的cookie,下次用户发出请求时,也会带着sessionID发送,这样服务器看到 sessionID后到内存寻找,找到了就使用此内存中的数据,否则视为第一次访问本网站),不过这个证件的有效期只有15分钟,这里的有 效期15分钟,就是我们说的session过期时间,什么是session过期时间呢?是这样的,我们想一下我们第一次访问一个网站,这时网站会给我们分 配一个sessionID,而我们只是打开了这个首页后,出去玩了再也没有访问过本网站的其它页面内容,我们是不是还在占用着网络资源呀,占用着 sessionID。那么这时怎么办呢?其实网站服务器很聪明的它会在你从第一次访问后就开始计算时间比如张三打开了清华IT太原校区的网站首页这时清华 IT太原校区网站的服务器就开始计时了 1秒,2秒,3秒,4秒,5秒,6秒...在2分钟的时候张三在首页上点击了一条新闻,这时清华IT太原校区网站的服务器知道后将刚才记的2分钟清空为0 这时又开始了1秒,2秒,3秒,4秒,5秒,6秒...的计时,至到计时时间达到了15分钟也就是session过期时间,这时清华IT太原校区网站服务 器会认为这个用户15分钟都没有访问过我了可能己经关机出去玩了,清华IT太原校区网站服务器会将这个用户在服务器开辟的内存空间释放掉,那么对应内存的 sessionID也就被收回了,等待新来的用户使用,这样我们说一个session就被销毁了,那么到这大家应该有点感觉了吧session的范围有多 大呀,是一个客户端,一个客户端对应着一个session ; 而一个session能存活多长时间有两个方面一方面是看客户端是否在session过期时间内访问网站,这样可以让session存活时间延长,另一方 面是设置的session过期时间是多长。session过期时间我们可以手工设置,如果没有设置就采取服务器默认设置的(例如这里用Tomcat可以在Tomcat/config/web.xml中找到一段如下的代码默认为30分钟:
<session-config>
<session-timeout>30session-timeout>
session-config> 我们还可以在我们的项目中的WEB-INF/web.xml中写入上面的这段代码,设置session过期时间),好了知道了这些大家想一个问题:如果我们访问了一个网站,这个网站为我们分配了一个session ,我们现在将IE浏览关闭掉,session会销毁吗?哈哈,想都不用再想了肯定不会。因为session是存放在服务器端的session的销毁只和过期时间有关系,再者客户端关闭怎么会影响到服务器端呢!
这样我们大概也就知道为什么我们在购物车的时候都用session了吧,应为一个session对应着一个客户端。我们可以将每个用户买的商品存放到自己对应的session中进行管理这样,就不会出现,张三买的电视机要郝老师结账了。转自:
blog.sina.com.cn/s/blog_4d335ad8010009tt.html
JAVA免费开源论坛http://www.jsprun.net
byte 1
short 2
int 4
long 8
float 4
double 8
char 2
boolean 1
Object obj=null 4
Object obj=new Object() 12
Integer 16
对于普通的class来说 ,内容占用就是基加成员的占用,Object成员只记引用 public class Abc { public int n; public byte b; public Object obj; }
它的内容占用是: [8 4 1 4]=24
所以 Abc one=new Abc()的占用是 4 24=28 因为session是一个接口,根据服务器不同具体实现类也不同,所以没办法一下子知道一个session占多少内存不过有个间接的方法可以看,通过查看系统总的内存,自己算Runtime r = Runtime.getRuntime();// amount of unallocated memory
long free = r.freeMemory();// total amount of memory available allocated and unallocated.
long total = r.totalMemory();// total amount of allocated memory
long inuse = r.totalMemory() - r.freeMemory();// max memory JVM will attempt to use
long max = r.maxMemory();// suggest now would be a good time for garbage collection
System.gc();