package num2
/**
* Created by Joey_Tsai on 2018/3/5.
*/
class HeapOOM{
companion object {
class OOMObject{
}
}
}
fun main(args : Array<String>){
val list : MutableList<HeapOOM.Companion.OOMObject> = ArrayList<HeapOOM.Companion.OOMObject>();
var i = 0;
while (true){
list.add(HeapOOM.Companion.OOMObject());
println(++i);
}
}
package num2
/**
* Created by Joey_Tsai on 2018/3/5.
* VM:-Xss128k
*/
public class JavaVMStackSOF{
public var stackLength : Int = 1
public fun stackLeak() : Unit{
stackLength++;
stackLeak()
}
}
fun main(args:Array<String>){
val javaVMStackSOF : JavaVMStackSOF = JavaVMStackSOF()
try {
javaVMStackSOF.stackLeak()
}catch (e : Throwable ){
println("stack length : ${javaVMStackSOF.stackLength}")
throw e
}
}
package num2
/**
* Created by Joey_Tsai on 2018/3/6.
*VM: -Xss200M
*/
class JavaVMStackOOM{
private fun dontStop() : Unit{
while (true){
}
}
public fun stackLeakByThread():Unit{
while (true){
val thread : Thread = Thread(Runnable(){
@Override
fun run(){
dontStop()
}
});
thread.start()
}
}
}
fun main(args : Array<String>){
val oom = JavaVMStackOOM()
oom.stackLeakByThread()
}
package num2
/**
* Created by Joey_Tsai on 2018/3/6.
* VM:-XX:PermSize=10M -XX:MaxPermSize=10M
*/
class RuntimeConstantPoolOOM2_6{
}
fun main(args : Array<String>){
//使用List保持着常量池引用,避免Full GC回收常量池行为
val list : MutableList<String>?=ArrayList<String>();
//10MB的permSize在integer范围内足够产生OOM了
var i : Int = 0
while (true){
list?.add(i++.toString().intern())
println(i)
}
}
package num2
/**
* Created by Joey_Tsai on 2018/3/6.
*/
public class RuntimeConstantPoolOOM2_7{
}
fun main(args: Array<String>) {
val str1 : String = StringBuilder("计算机").append("软件").toString()
println(str1.intern() == str1)
val str2 : String = StringBuilder("ja").append("va").toString()
println(str2.intern() == str2)
}