JDK 源码设计 时间换空间 & 空间换时间

JDK 源码设计 时间换空间 & 空间换时间  

package test;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.BitSet;
import java.util.List;

public class StringTest {

 public static void main(String[] args) throws Exception{
  String s ="123456";
  //以空间换时间
  String s2 = s.substring(1,2);
  
  a(s2);
  //以时间换空间
  String s3=new String(s2);
  a(s3);
  String s4 =new String(s.toCharArray(),0,4);
  a(s4);
  //以空间换时间
  Constructor con=s.getClass().getDeclaredConstructor(int.class,int.class,char[].class);
  con.setAccessible(true);
  String newStr = (String) con.newInstance(1,2,s.toCharArray());
  System.out.println("new Str ===="+newStr);
  a(newStr);
  
  //以空间换时间
  List l = new ArrayList();
  l = l.subList(1, 2);
  
  //以空间换时间
  BitSet a = new BitSet();
 }
 
 
 public static void a(String s2)throws Exception{
  Field f=s2.getClass().getDeclaredField("value");
  f.setAccessible(true);
  char[] c =(char[])f.get(s2);
  System.out.println(new String(c));
 }
}
当遇到空间换时间时,需要注意内存泄露问题

 

对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式:访问串行化,对象共享化。而ThreadLocal采用了“以空间换时间”的方式:访问并行化,对象独享化。前者仅提供一份变量,让不同的线程排队访问,而后者为每一个线程都提供了一份变量,因此可以同时访问而互不影响。

 

转载于:https://my.oschina.net/xiaominmin/blog/1599511

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值