jvm调优思路及调优案例( 三 )


最终定位到的代码如下:
@RestControllerpublic class IndexController {    @RequestMapping("/user/process")    public String processUserData() throws InterruptedException {        ArrayList<User> users = queryUsers();        for (User user: users) {            //TODO 业务处理            System.out.println("user:" + user.toString());        }        return "end";    }    /**     * 模拟批量查询用户场景     * @return     */    private ArrayList<User> queryUsers() {        ArrayList<User> users = new ArrayList<>();        for (int i = 0; i < 5000; i++) {            users.add(new User(i,"zhuge"));        }        return users;    }}public class User { private int id; private String name; // 1024B * 100 = 100KB byte[] a = new byte[1024*100]; public User(){} public User(int id, String name) {super();this.id = id;this.name = name; } public int getId() {return id;} public void setId(int id) {this.id = id;} public String getName() {return name;} public void setName(String name) {this.name = name;}}发现User类中定义了一个byte[] a 成员变量 , 占了100KB,在queryUsers()中 , 一次性在内存中添加了500M的对象数据 , 明显不合适 , 需要根据上述中的运行时内存数据区域阈值进行优化 , 尽量消除这种朝生夕死的对象导致的full GC.
总结:到这里 , 调优案例就结束了 , 整个过程考虑了jvm的各个调优知识点 , 相信有心的读者可以学到一些知识点 。

经验总结扩展阅读