p*y
2 楼
爱情,原来是含笑饮毒酒
z*3
3 楼
用编码实现
我找了半天,只找到一个gc后的notification
能在gc后调用代码来做一些操作
其实我想在gc之前,就释放一些东西
然后gc时候就直接gc掉酱紫,不过现在这样也勉强能用
无非就是第一次gc之后,释放,然后等下一次gc再释放就是了
我想自己写一个vert.x的session manager
官方的那个要用到mongo,还没怎么用过,我很怀疑有没有人用过了
估计上网找也找不出什么名堂来,还是自己写方便一点
下面是我写的测试代码,idea都在这里面了
要求java 7u4以上版本,否则拿不到GarbageCollectionNotificationInfo这个类
无法编译
import java.lang.management.GarbageCollectorMXBean;
import java.lang.management.ManagementFactory;
import java.util.ArrayList;
import java.util.List;
import javax.management.Notification;
import javax.management.NotificationEmitter;
import javax.management.NotificationFilter;
import javax.management.NotificationListener;
import javax.management.openmbean.CompositeData;
import com.sun.management.GarbageCollectionNotificationInfo;
import twitter4j.GeoLocation;
import twitter4j.Query;
import twitter4j.QueryResult;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.Query.Unit;
import twitter4j.auth.RequestToken;
import twitter4j.conf.ConfigurationBuilder;
public class Test {
class UserThread extends Thread {
public void run() {
final List gcmxb =
ManagementFactory.getGarbageCollectorMXBeans();
for(GarbageCollectorMXBean ob: gcmxb){
NotificationEmitter emitter = (NotificationEmitter) ob;
NotificationListener listener = new
NotificationListener() {
@Override
public void handleNotification(
Notification notification, Object handback) {
// TODO Auto-generated method stub
GarbageCollectionNotificationInfo info =
GarbageCollectionNotificationInfo.from(
(CompositeData) notification.getUserData());
System.out.println(info.getGcAction().substring(
7));
HandBack hb = (HandBack)handback;
System.out.println(hb.handUsage());
}
};
emitter.addNotificationListener(listener, new
NotificationFilter() {
private static final long serialVersionUID =
3763793138186359389L;
@Override
public boolean isNotificationEnabled(Notification
notification) {
//filter GC notification
return notification.getType()
.equals(
GarbageCollectionNotificationInfo.GARBAGE_COLLECTION_NOTIFICATION);
}
}, HandBack.getInstance());
}
while(true){
try {
System.gc();
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
private static class HandBack {
private HandBack() {
}
private static HandBack instance = new HandBack();
public static HandBack getInstance() {
return instance;
}
public String handUsage() {
return "hand back";
}
}
public static void main(String[] a){
Thread th= new Test().new UserThread();
th.start();
}
}
运行后输出:
minor GC
hand back
major GC
hand back
每次gc大概有一个major gc和一个minor gc
因为都是我自己调的,如果是实际运行环境
那估计就是一个major和n次minor了
我找了半天,只找到一个gc后的notification
能在gc后调用代码来做一些操作
其实我想在gc之前,就释放一些东西
然后gc时候就直接gc掉酱紫,不过现在这样也勉强能用
无非就是第一次gc之后,释放,然后等下一次gc再释放就是了
我想自己写一个vert.x的session manager
官方的那个要用到mongo,还没怎么用过,我很怀疑有没有人用过了
估计上网找也找不出什么名堂来,还是自己写方便一点
下面是我写的测试代码,idea都在这里面了
要求java 7u4以上版本,否则拿不到GarbageCollectionNotificationInfo这个类
无法编译
import java.lang.management.GarbageCollectorMXBean;
import java.lang.management.ManagementFactory;
import java.util.ArrayList;
import java.util.List;
import javax.management.Notification;
import javax.management.NotificationEmitter;
import javax.management.NotificationFilter;
import javax.management.NotificationListener;
import javax.management.openmbean.CompositeData;
import com.sun.management.GarbageCollectionNotificationInfo;
import twitter4j.GeoLocation;
import twitter4j.Query;
import twitter4j.QueryResult;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.Query.Unit;
import twitter4j.auth.RequestToken;
import twitter4j.conf.ConfigurationBuilder;
public class Test {
class UserThread extends Thread {
public void run() {
final List
ManagementFactory.getGarbageCollectorMXBeans();
for(GarbageCollectorMXBean ob: gcmxb){
NotificationEmitter emitter = (NotificationEmitter) ob;
NotificationListener listener = new
NotificationListener() {
@Override
public void handleNotification(
Notification notification, Object handback) {
// TODO Auto-generated method stub
GarbageCollectionNotificationInfo info =
GarbageCollectionNotificationInfo.from(
(CompositeData) notification.getUserData());
System.out.println(info.getGcAction().substring(
7));
HandBack hb = (HandBack)handback;
System.out.println(hb.handUsage());
}
};
emitter.addNotificationListener(listener, new
NotificationFilter() {
private static final long serialVersionUID =
3763793138186359389L;
@Override
public boolean isNotificationEnabled(Notification
notification) {
//filter GC notification
return notification.getType()
.equals(
GarbageCollectionNotificationInfo.GARBAGE_COLLECTION_NOTIFICATION);
}
}, HandBack.getInstance());
}
while(true){
try {
System.gc();
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
private static class HandBack {
private HandBack() {
}
private static HandBack instance = new HandBack();
public static HandBack getInstance() {
return instance;
}
public String handUsage() {
return "hand back";
}
}
public static void main(String[] a){
Thread th= new Test().new UserThread();
th.start();
}
}
运行后输出:
minor GC
hand back
major GC
hand back
每次gc大概有一个major gc和一个minor gc
因为都是我自己调的,如果是实际运行环境
那估计就是一个major和n次minor了
N*g
4 楼
啥意思? 都打出来了, 还手写一遍。
z*3
5 楼
要是能在pre gc的时候挂一个listener就好了
不过这样的话,jvm需要等这些listeners执行完毕才能执行
这个有可能造成leak
不过这样的话,jvm需要等这些listeners执行完毕才能执行
这个有可能造成leak
z*3
7 楼
问题是我不知道哪些objects会被gc
我只知道我需要释放哪些引用
除了这些引用之外,我不知道其他哪些objects会被gc掉
触发点无法确定
【在 k******n 的大作中提到】
: finalize?
: http://stackoverflow.com/questions/2506488/when-is-the-finalize
我只知道我需要释放哪些引用
除了这些引用之外,我不知道其他哪些objects会被gc掉
触发点无法确定
【在 k******n 的大作中提到】
: finalize?
: http://stackoverflow.com/questions/2506488/when-is-the-finalize
t*e
8 楼
This might be helpful:
MemoryPoolMXBean
http://stackoverflow.com/questions/2057792/garbage-collection-n
【在 z*******3 的大作中提到】
: 用编码实现
: 我找了半天,只找到一个gc后的notification
: 能在gc后调用代码来做一些操作
: 其实我想在gc之前,就释放一些东西
: 然后gc时候就直接gc掉酱紫,不过现在这样也勉强能用
: 无非就是第一次gc之后,释放,然后等下一次gc再释放就是了
: 我想自己写一个vert.x的session manager
: 官方的那个要用到mongo,还没怎么用过,我很怀疑有没有人用过了
: 估计上网找也找不出什么名堂来,还是自己写方便一点
: 下面是我写的测试代码,idea都在这里面了
MemoryPoolMXBean
http://stackoverflow.com/questions/2057792/garbage-collection-n
【在 z*******3 的大作中提到】
: 用编码实现
: 我找了半天,只找到一个gc后的notification
: 能在gc后调用代码来做一些操作
: 其实我想在gc之前,就释放一些东西
: 然后gc时候就直接gc掉酱紫,不过现在这样也勉强能用
: 无非就是第一次gc之后,释放,然后等下一次gc再释放就是了
: 我想自己写一个vert.x的session manager
: 官方的那个要用到mongo,还没怎么用过,我很怀疑有没有人用过了
: 估计上网找也找不出什么名堂来,还是自己写方便一点
: 下面是我写的测试代码,idea都在这里面了
h*j
9 楼
几年前的做法是用ReferenceQueue加个thread做polling来释放
【在 z*******3 的大作中提到】
: 用编码实现
: 我找了半天,只找到一个gc后的notification
: 能在gc后调用代码来做一些操作
: 其实我想在gc之前,就释放一些东西
: 然后gc时候就直接gc掉酱紫,不过现在这样也勉强能用
: 无非就是第一次gc之后,释放,然后等下一次gc再释放就是了
: 我想自己写一个vert.x的session manager
: 官方的那个要用到mongo,还没怎么用过,我很怀疑有没有人用过了
: 估计上网找也找不出什么名堂来,还是自己写方便一点
: 下面是我写的测试代码,idea都在这里面了
【在 z*******3 的大作中提到】
: 用编码实现
: 我找了半天,只找到一个gc后的notification
: 能在gc后调用代码来做一些操作
: 其实我想在gc之前,就释放一些东西
: 然后gc时候就直接gc掉酱紫,不过现在这样也勉强能用
: 无非就是第一次gc之后,释放,然后等下一次gc再释放就是了
: 我想自己写一个vert.x的session manager
: 官方的那个要用到mongo,还没怎么用过,我很怀疑有没有人用过了
: 估计上网找也找不出什么名堂来,还是自己写方便一点
: 下面是我写的测试代码,idea都在这里面了
相关阅读
感觉自己的知识结构太乱了aspectJ Question关于syncronized语句的问题谁能介绍一下java有哪些比较有名的open source projectWhat does this mean?About learning Java Swing. (转载)java developer 的工作是不是都是跟网络相关的?AJAX or javascript forum recommendation?Failed to install WTP in eclipse 3.1.2 using update manager下月那个AJAX Experience conferenceJava有类似于XAML的咚咚么?Good News刚才笔记本上装了Netbeans5.0, 但启动得时侯怎么特别慢呢?有关BufferedImage width/height 的问题Is there a JGrid?关于linux 下makefile求救!Netbean 5.0 slow as hell有没有类似MS Visual Studio的Java IDE?迷惑了很久,java 和 c++ 到底谁快?【跪求】java applet下怎么执行系统的一个程序?