JDK 源码设计 时间换空间 & 空间换时间
2016-03-10 16:05
543 查看
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采用了“以空间换时间”的方式:访问并行化,对象独享化。前者仅提供一份变量,让不同的线程排队访问,而后者为每一个线程都提供了一份变量,因此可以同时访问而互不影响。
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采用了“以空间换时间”的方式:访问并行化,对象独享化。前者仅提供一份变量,让不同的线程排队访问,而后者为每一个线程都提供了一份变量,因此可以同时访问而互不影响。
相关文章推荐
- Exception in thread "main" java.lang.LinkageError错误的解决
- myeclipse使用maven教程
- 《深入理解java虚拟机》学习笔记4——Java虚拟机垃圾收集器
- myeclipse 上安装 Maven3
- 各种 Java 的序列化库的性能比较测试结果
- eclipse JRebel 插件
- MyBatis-spring和spring JDBC批量插入Mysql的效率比较
- struts2 ognl java.lang.NoSuchMethodException Ljava.lang.String
- java clinit 死锁
- java.lang.NoSuchMethodError: javax.xml.ws.WebFault.messageName()Ljava/lang/Strin
- java 多线程下载图片
- java json lib 日期
- java cas
- 你能不能谈谈,java GC是在什么时候,对什么东西,做了什么事情?”
- Eclipse快捷键 10个最有用的快捷键
- java.lang.UnsupportedOperationException
- java class修改
- 深入理解Java虚拟机笔记---方法调用
- Java 代理使用及代理原理
- java 协程 实现 Akka