如何写一个Stack Overflow的程序

OOM以及Stack Overflow

里面有关于对象分配以及栈的方法区的变量,记得以前被面试过一个面试试题,主要是考量堆分配内存以及栈分配内存的区别,以及GC的时间,只要在内存有限,栈分配过多的变量,这时候就会买来得及GC就溢出,这个如果在方法区出现这个的代码,很有可能出现方法栈溢出

// 方法内部声明多个变量
String foo = 'bar';
String foo1 = "bar";
String foo2 = "bar";
...
String sum = foo + foo1 + ....;

如果出现大量对象的new内存空间,那么就容易出现内存溢出。

// 方法里面new 多个对象
while(true){
   
	Object o = new Object();
}

内存的管理就是Java的基础,理解了Java的内存管理就等于掌握了编译过程。

代理模式

静态代理模式
静态代理模式的关键部分就是利用定义被代理类为代理类的成员属性,从而构造代理类的时候可以通过传入被代理类,实现了被代理类的所有行为。
优点:
代理使客户端不需要知道实现类是什么,怎么做的,而客户端只需知道代理即可(解耦合)
缺点:
代理类和委托类实现了相同的接口,代理类通过委托类实现了相同的方法。这样就出现了大量的代码重复。如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法。增加了代码维护的复杂度。
动态代理模式
JDK动态代理:利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理
CGlib动态代理:利用ASM(开源的Java字节码编辑库,操作字节码)开源包,将代理对象类的class文件加载进来,通过修改其字节码生成子类来处理

/**
 * JDK动态代理类
 */</
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值