代孕妈妈一般多少钱【代孕网正规代孕】【微*电138*0226*9370】代孕,是指将受精卵子植入代孕妈妈子宫,由孕母替他人完成“十月怀胎一朝分娩”的过程。妇女代孕时需植入他人的受精卵子,精子与卵子在人体外的结合,必须实施“人类辅助生殖技术”。我国有关法律对“人类辅助生殖技术”的实施做了严格的规定。
1. 堆内存溢出
不断地创建对象, 而且保证创建的这些对象不会被回收即可(让GC Root可达).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
/**
* 堆内存溢出demo
* VM Options: -Xms6m -Xmx6m
*/
public
class
HeapOOM {
static
class
OOMObejct {
}
public
static
void
main(String[] args) {
List<OOMObejct> list =
new
ArrayList<>();
while
(
true
) {
list.add(
new
OOMObejct());
}
}
}
|
会内存溢出, 输出结果如下:
如果是用下面这段代码的话, 是不会内存溢出的. 因为有GC. 每次new 的 Object在下次for循环中都退出了作用域, 虚拟机栈不再持有对象的引用. 所以会被GC掉. 不会溢出.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
/**
* 堆内存溢出demo
* VM Options: -Xms6m -Xmx6m
*/
public
class
HeapOOM {
static
class
OOMObejct {
}
public
static
void
main(String[] args) {
while
(
true
) {
new
OOMObejct();
}
}
}
|
visualVM的堆内存图如下:
2. 虚拟机栈溢出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
/**
* 栈内存溢出demo
* VM Options: -Xms6m -Xmx6m
*/
public
class
StackOverflow {
private
int
stackDepth;
private
void
stackLeak() {
stackDepth++;
stackLeak();
}
public
static
void
main(String[] args) {
StackOverflow oom =
new
StackOverflow();
try
{
oom.stackLeak();
}
catch
(Throwable e) {
System.out.println(oom.stackDepth);
System.err.println(e.toString());
}
}
}
|
输出结果如下(下面部分结果可能根据机器环境不同而不同):
3. 创建线程导致的内存溢出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import
java.util.concurrent.atomic.AtomicInteger;
/**
* 创建线程导致的内存溢出demo
* VM Options: -Xms6m -Xmx6m
*/
public
class
CreateThreadOOM {
static
AtomicInteger counter =
new
AtomicInteger(
0
);
public
static
void
main(String[] args) {
while
(
true
) {
new
Thread(() -> {
try
{
System.out.println(counter.incrementAndGet());
Thread.sleep(Integer.MAX_VALUE);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
}).start();
}
}
}
|
输出结果如下(下面部分结果可能根据机器环境不同而不同):
4. 直接内存溢出
这段代码我这里没有运行出书上的效果...
书上的意思应该是, 设定了直接内存大小最大为10M后, 继续申请的话, 就会报异常..
在我电脑上, 虽然也设置了MaxDirectMemorySize=10m , 但是这玩意硬生生地申请了10G的虚拟内存也没停下, 最后被操作系统强制停止了.....(运行了几次电脑都快没电了)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import
sun.misc.Unsafe;
import
java.lang.reflect.Field;
/**
* VM Options: -Xms6m -Xmx6m -XX:MaxDirectMemorySize=10m
*/
public
class
DirectMemoryOOM {
private
static
final
int
_1MB =
1024
*
1014
;
public
static
void
main(String[] args)
throws
IllegalAccessException, InterruptedException {
Field unsafeFile = Unsafe.
class
.getDeclaredFields()[
0
];
unsafeFile.setAccessible(
true
);
Unsafe unsafe = (Unsafe) unsafeFile.get(
null
);
while
(
true
) {
unsafe.allocateMemory(_1MB);
Thread.sleep(
10
);
}
}
}
|
学如不及,犹恐失之
代孕妈妈一般多少钱【代孕网正规代孕】【微*电138*0226*9370】代孕,是指将受精卵子植入代孕妈妈子宫,由孕母替他人完成“十月怀胎一朝分娩”的过程。妇女代孕时需植入他人的受精卵子,精子与卵子在人体外的结合,必须实施“人类辅助生殖技术”。我国有关法律对“人类辅助生殖技术”的实施做了严格的规定。
1. 堆内存溢出
不断地创建对象, 而且保证创建的这些对象不会被回收即可(让GC Root可达).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
/**
* 堆内存溢出demo
* VM Options: -Xms6m -Xmx6m
*/
public
class
HeapOOM {
static
class
OOMObejct {
}
public
static
void
main(String[] args) {
List<OOMObejct> list =
new
ArrayList<>();
while
(
true
) {
list.add(
new
OOMObejct());
}
}
}
|
会内存溢出, 输出结果如下:
如果是用下面这段代码的话, 是不会内存溢出的. 因为有GC. 每次new 的 Object在下次for循环中都退出了作用域, 虚拟机栈不再持有对象的引用. 所以会被GC掉. 不会溢出.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
/**
* 堆内存溢出demo
* VM Options: -Xms6m -Xmx6m
*/
public
class
HeapOOM {
static
class
OOMObejct {
}
public
static
void
main(String[] args) {
while
(
true
) {
new
OOMObejct();
}
}
}
|
visualVM的堆内存图如下:
2. 虚拟机栈溢出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
/**
* 栈内存溢出demo
* VM Options: -Xms6m -Xmx6m
*/
public
class
StackOverflow {
private
int
stackDepth;
private
void
stackLeak() {
stackDepth++;
stackLeak();
}
public
static
void
main(String[] args) {
StackOverflow oom =
new
StackOverflow();
try
{
oom.stackLeak();
}
catch
(Throwable e) {
System.out.println(oom.stackDepth);
System.err.println(e.toString());
}
}
}
|
输出结果如下(下面部分结果可能根据机器环境不同而不同):
3. 创建线程导致的内存溢出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import
java.util.concurrent.atomic.AtomicInteger;
/**
* 创建线程导致的内存溢出demo
* VM Options: -Xms6m -Xmx6m
*/
public
class
CreateThreadOOM {
static
AtomicInteger counter =
new
AtomicInteger(
0
);
public
static
void
main(String[] args) {
while
(
true
) {
new
Thread(() -> {
try
{
System.out.println(counter.incrementAndGet());
Thread.sleep(Integer.MAX_VALUE);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
}).start();
}
}
}
|
输出结果如下(下面部分结果可能根据机器环境不同而不同):
4. 直接内存溢出
这段代码我这里没有运行出书上的效果...
书上的意思应该是, 设定了直接内存大小最大为10M后, 继续申请的话, 就会报异常..
在我电脑上, 虽然也设置了MaxDirectMemorySize=10m , 但是这玩意硬生生地申请了10G的虚拟内存也没停下, 最后被操作系统强制停止了.....(运行了几次电脑都快没电了)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import
sun.misc.Unsafe;
import
java.lang.reflect.Field;
/**
* VM Options: -Xms6m -Xmx6m -XX:MaxDirectMemorySize=10m
*/
public
class
DirectMemoryOOM {
private
static
final
int
_1MB =
1024
*
1014
;
public
static
void
main(String[] args)
throws
IllegalAccessException, InterruptedException {
Field unsafeFile = Unsafe.
class
.getDeclaredFields()[
0
];
unsafeFile.setAccessible(
true
);
Unsafe unsafe = (Unsafe) unsafeFile.get(
null
);
while
(
true
) {
unsafe.allocateMemory(_1MB);
Thread.sleep(
10
);
}
}
}
|