| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/10/2009 17:53:19
|
ctdaa
JavaGuru
![[Avatar]](/images/avatar/6ad7a30abbe69e43b586e8c7c39b9412.png)
Membro desde: 12/08/2009 19:01:45
Mensagens: 222
Offline
|
Olá.
Estou criando um parser com a ferramenta javaCC, que por sua vez gera várias classes java. Em uma destas classes geradas estou recebendo o seguinte erro:
The code of method X is exceeding the 65535 bytes limit
Pesquisei o problema e a recomendação diz que este é um limite do java e que eu devo rever a gramática que estou implementando para otimizá-la.
Tudo bem, vou fazer isto. Mas este limite é fixo ou existe forma de configurar algum parametro de compilação ou algo assim?
This message was edited 2 times. Last update was at 23/10/2009 10:27:18
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/10/2009 18:46:45
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20578
Localização: Curitiba/PR
Offline
|
Sim, é fixo. E que eu saiba não existe.
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/10/2009 09:24:21
|
Marky.Vasconcelos
Moderador
![[Avatar]](/images/avatar/04940fadf3702cbd84b7a48161037c4f.png)
Membro desde: 11/04/2007 18:18:20
Mensagens: 5932
Localização: São Paulo/SP
Offline
|
Se seu método é maior que isso talvez seja uma boa hora de refatorar.
|
Facebook @MarkyHitchhiker +Mark WP: MarkyTech's
Projects:
Android Roadmap - Aprenda Android do inicio (Java é o unico pre-requisito)
Towel ( ObjectTableModel & Swing & Utils )
Tower Defense Game - Java2D [Open-Source] [How-to-play]
EVGD: Programação de jogos (links) Ponto V! - Desenvolvimento de jogos para indies, curiosos e profissionais
DefaultTableModel?! PARE! Não faça isso! Faça melhor!
Dicas: Faça perguntas inteligentes! ; MigLayout ; GridBagLayout (Joke)
Develop games is fantastic, with words you can make worlds!!!
DON'T PANIC!
MarkyHitchhiker's Blog! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/10/2009 09:29:58
|
ctdaa
JavaGuru
![[Avatar]](/images/avatar/6ad7a30abbe69e43b586e8c7c39b9412.png)
Membro desde: 12/08/2009 19:01:45
Mensagens: 222
Offline
|
Existe alguma ferramenta, utilitário, plugin, etc... que possa fazer um refactor, clean-up ou algo parecido com o fonte ou com o código java compilado?
A intensão é somente reduzir o tamanho do código, já que a manutenção dos fontes não será feita diretamente no java (e sim pelo javaCC).
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/10/2009 09:33:08
|
juliocbq
GUJ Expert
![[Avatar]](/images/avatar/153704bb24a28e9a6bb49e8ffde1492e.jpg)
Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Offline
|
eu não sabia que existia esse limite. Mas um método com mais 65000 bytes também é exorbitante.
This message was edited 1 time. Last update was at 16/10/2009 09:34:22
|
www.citrox.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/10/2009 09:40:02
|
ctdaa
JavaGuru
![[Avatar]](/images/avatar/6ad7a30abbe69e43b586e8c7c39b9412.png)
Membro desde: 12/08/2009 19:01:45
Mensagens: 222
Offline
|
Como disse no início do tópico a classe é gerada automaticamente, por isso não posso dar manutenção direta no fonte. Quando eu compilar novamente a definição do javaCC ele vai regerar as classes e consequentemente perderá as alterações. Se houver uma ferramenta de refactor automatico, aplico novamente toda vez que forem regeradas.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/10/2009 10:18:27
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline
|
Perguntinha. Digamos que seu método esteja gerando uma grande quantidade de bytecodes porque ele contém uma grande quantidade de constantes string. Seria possível acumular essas strings e lê-las de um resource, em vez de estarem no arquivo .class?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/10/2009 10:34:28
|
ctdaa
JavaGuru
![[Avatar]](/images/avatar/6ad7a30abbe69e43b586e8c7c39b9412.png)
Membro desde: 12/08/2009 19:01:45
Mensagens: 222
Offline
|
Boa idéia. Já havia pensado nisto. Mas examinei o fonte e não tem nenhuma string.... quem projetou o compilador javaCC já deve ter pensado neste tipo de otimização...
Vou colocar parte do fonte para ilustrar:
Os números que aparecem apontam para o código definido em uma classe de constantes.
This message was edited 1 time. Last update was at 16/10/2009 10:51:34
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/10/2009 11:44:53
|
ctdaa
JavaGuru
![[Avatar]](/images/avatar/6ad7a30abbe69e43b586e8c7c39b9412.png)
Membro desde: 12/08/2009 19:01:45
Mensagens: 222
Offline
|
Fiz uma intervenção manual que resolve provisoriamente o problema. Se alguém souber de uma solução melhor, agradeço.
This message was edited 1 time. Last update was at 16/10/2009 12:22:36
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/10/2009 13:32:23
|
fabiofalci
GUJ Master
![[Avatar]](/images/avatar/c359889a833e7612e0cff1dc69d272bc.png)
Membro desde: 11/04/2006 09:23:14
Mensagens: 1057
Localização: Porto Alegre - RS
Offline
|
Olhando rapidamente no google há dicas para usar javaCC de uma forma mais eficiente.
Como esse post http://markmail.org/message/ztzrnyhkhnoai5uk que leva a essa url
http://javacc.dev.java.net/doc/lexertips.html
Ali deve ter dicas para solucionar o teu caso. O problema é que parece estar fora do ar.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/10/2009 10:26:26
|
ctdaa
JavaGuru
![[Avatar]](/images/avatar/6ad7a30abbe69e43b586e8c7c39b9412.png)
Membro desde: 12/08/2009 19:01:45
Mensagens: 222
Offline
|
Para registrar uma solução mais inteligente: Como o problema era com a quantidade de palavras reservadas existentes na gramática, implementei uma segmentação separando alguns statements em um parser independente. No parser principal aciono o parser segundário quando o token específico for encontrado.... Alterei a definição do token (<DEFINE> para capturar a linha completa do statement ( e não apenas a palavra DEFINE ): A chamada ao parser secundário (IdcamsDefine) dentro do parser principal (Idcams) ficou assim:
This message was edited 1 time. Last update was at 23/10/2009 10:44:08
|
|
|
 |
|
|